I heard the term “clustering” used for application servers such as GlassFish as well as Terracotta; and I'm trying to understand what word clustering means when used in conjunction with application servers and when used in conjunction with Terracotta.
My understanding:
If the GlassFish server is a cluster, then this means that we have several physical / virtual machines, each with its own JRE / JVM, it launches separate instances of GlassFish. However, since they are grouped, they will all exchange data through their administrator server ("DAS") and will have the same applications that will be deployed to all of them. They will act efficiently (for the end user) as if they were the only application server, but now with load balancing, fault tolerance / redundancy and scalability added to the mix.
Terracotta is essentially a product that forces multiple JVMs running on different physical / virtual machines to act as if they are a single JVM.
Thus, if my understanding is correct, the following is implied:
- Cluster application cluster server if you want load balancing and fault tolerance
- You use Terracotta when a particular JVM is too small to contain your application and you need more horsepower.
- So technically, if you have a GlassFish stack, say, 5 server instances; each of these 5 instances can indeed be an array / cluster of Terracotta instances; that each GlassFish server instance is actually a GlassFish instance living through the JVM of several machines.
If any of these statements / assumptions is incorrect, please correct me! If I left the base and obviously do not understand the clustering and / or the purpose of Terracotta itself, please point me in the right direction!
source