This is the third article in the series of articles exploring distributed java
application development. In this article we will explore the capabilities/support
required to build Aplication-Level Server-cluster-aware applications.
We will explore these capabilities with the help of a simple example. In this
example we will take sample usecase of converting standalone application to
clustered application.
Fig A. shows a sample stand-alone application. This sample application process
the real-time data/events/messages supplied by a external system.
Now for scalability and availability reasons we want to convert this application
into clustered application (Fig B).
While converting stand-alone application to clustered application, we must
design applications so that they can run as multiple instances on different/same
physical servers. This can be done by splitting the application into smaller
components that can be deployed independently.
Stateless Application Components:
This conversion is easy, if the application components are stateless. Stateless
application components are independent of others and can run independently.
These stateless application components can handle/process the requests/data
equally. We just need a load-balancing mechaninsm to redirect the requests/data
to avilable application servers. If we need to handle more data, then we need
to add more servers and install the application components.
Stateful Application Components:
But most of the practical clustered applications components are stateful.
For instance, the application components may share a common data/configuaration
based on which processing happens. The application components may share a common
cache for fatser processing.
The following the capabilities/supports required to build stateful application
components.
* Distributed State Sharing / Caching
* Distributed Service Registry and Discovery
* Group communication and membership with state maintenance and querying capability:
* Dynamic leader server election and Task co-ordination
* Distributed Locks/Synchronization
* Distributed Data Structures , ID Generator
* Distributed Execution
* Distributed Messaging System
* Distributed Scheduling
Next article we will explore the above capabilities/supports required to build Application-Level Server-cluster-aware applications.