Clustering

Clustering is where you run a single application on many servers. This allows you to take advantage of extra hardware to get better performance. It also gives you the ability to have failover support. If one server goes down, there is another one that will handle the processing. Think of a cluster as a group of servers that all act together as one. A cell can have any number of clusters within its configuration. You must be federated to create and manage clusters because they span multiple nodes.

Vertical - all members of the cluster on the same machine

You would do this if your Java Virtual Machine (JVM™) cannot use all of the memory on the machine. For example, the max heap size for a 32-bit JVM is
4 GB, while in practice you would want to stay less than 1.5 GB. If your machine has 8 GB, one JVM cannot use all of the memory. In this scenario you could create a vertical cluster member so that you can make effective use of all of the memory on that machine. Of course, you need to ensure that your system has enough processing power for the two JVMs.

Horizontal - cluster members on several different machines

This gives you hardware failover and allows you to spread the workload over many machines to increase throughput by using more CPUs and memory.
xxxx