Indeed, vertical scaling is when a variety of JVMs or other components are stacked together on a very powerful machine. If that machine goes down, you're through.
Availability is how much it is up, so vertical scaling means you have a problem if your single point of failure is down. Reliability is the fact that your server is up when you need it to be up. A car that breaks down only when you don't need it is still reliable, since it's there when you need it. It's just not always available. Still, they are similar concepts.
A cluster is the term given to two or more JVMs working together to serve up a common set of EJBs and Servlets. If you want to workload manage your applications, which essentially means having redundant JVMs on which your applications are running, what you do is set up a �cluster.�
With a cluster, when you deploy your application, rather than deploying to a single JVM, you deploy your application to the cluster. Then each member of the cluster, each Java Virtual Machine that is, is capable of handling requests from clients.
What is Vertical Scaling?
If a cluster is a collection of JVMs working together to provide a workload managed environment, then �vertical scaling� happens when each of those JVMs are running on the same physical machine.
Now I know what you�re thinking: that doesn�t provide any failover support? Well, if the cleaning staff accidentally kicks out the power cord on your server, then indeed, you�re going to experience some downtime.
So what benefit does vertical scaling provide?
Vertical scaling provides a variety of benefits, especially if your environment is heavy on hardware.
First of all, if one JVM goes offline, whether intentionally or not, the other JVMs can pick up the slack, so you do get a certain degree of failover, although its not exactly the level of failover we usually associate with workload management. With vertical scaling, we are still node dependent.
A more likely reason for implementing a vertically scaled environment is to take advantage of powerful, multiprocessor machines.
The fact is, despite the use of our modern, multithreaded operating systems, there are enough concurrent processes within a JVM to make having one java.exe process running on a multiprocessor system a fairly ineffective endeavor. To take maximum advantage of your multiprocessor machine, you should implement vertical scaling and have n-1 JVMs running, where n is the number of processors in your system, and 1 is the number between zero and two.
What is Horizontal Scaling?
Horizontal scaling occurs when you deploy an application across multiple physical machines. Horizontal scaling is traditionally what we think of when the term �workload management� is thrown around.
WebSphere makes implementing horizontal scaling incredibly easy. The first step is to install the base edition of WebSphere onto a couple of different machines, and then install the Deployment Manager on another machine. Make the base editions part of the deployment manager�s administrative domain, and then use the administrative console to create a cluster.
The WebSphere Administrative Console makes it very easy to set up JVMs on multiple nodes that will act as a cluster. When you subsequently deploy your applications to the cluster, the various JVMs on the multiple nodes will take part in serving up the application. If one node goes down, the other JVMs on other nodes will pick up the slack.