This chapter defines three categories of large-scale Java platforms:
- Category 1: Large number of Java Virtual Machines (JVMs) (100s–1000s of JVMs)
- Category 2: Smaller number of JVMs with large heap sizes
- Category 3: A combination of category 1 consuming data from category 2
In addition, the chapter discusses various trends and outlines technical considerations to help you understand the range of technical issues associated with designing large-scale Java platforms.
Large-Scale Java Platform Categories
Based on field interactions with customers, large-scale Java platforms typically fall into three main categories, as follows:
- Category 1: This category is distinguished by its large number of Java Virtual Machines (JVMs). In this category, hundreds to thousands of JVMs are deployed on the Java platform, and these are typically JVMs that function within a system that might be servicing millions of users. I have seen some customers with as many as 15,000 JVMs. Whenever you are dealing with thousands of JVM instances, you must consider the manageability cost and whether opportunities exist to consolidate the JVM instances.
- Category 2: This category is distinguished by a smaller number of JVMs (usually 1 to 20) but with large heap size (8GB to 256GB or higher). These JVMs usually have in-memory databases deployed on them. In this category, garbage collection (GC) tuning becomes critical, as discussed in later chapters.
- Category 3: The third category is a combination of the first two categories, where perhaps thousands of JVMs run enterprise applications that are consuming data from category 2 types of large JVMs in the back end.
With regard to virtualizing and tuning large-scale Java platforms, four key requirement trends hold true across these three categories:
- Compute-resource consolidation
- JVM consolidation
- Elasticity and flexibility
Let’s look at each one of these trends in more detail.