Clustering SPI provides the ability to plug-in different clustering
implementation to carbon. By default, carbon will ship hazel-cast based
clustering impl. There will be a separate file (cluster.xml) for cluster
configuration.

The SPI will contain the following main interfaces.

*ClusteringAgent* - is responsible for initializing and managing this node
in the cluster.
*MembershipScheme* - a representation of a membership scheme such as
"multicast" or "well-known address (wka) used in the cluster.

A high-level view can be as follows

[image: Inline image 1]

When the cluster agent is successfully initialized, it will also register
the Cluster Service (being discussed at "[C5] Clustering API"). The
Cluster Service will use the clustering agent underneath at implementation
level for its required operations. Based on previous experiences, we have
defined the following methods for clustering agent and membership scheme
for now. Based on the final outcome of this discussion, they may get
changed.

*ClusteringAgent*

    /**
     * Initialize the agent which will initialize this node, and join the
cluster
     */
    void *init*() throws ClusteringFault;

    /**
     * Shutdown the agent which will remove this node from cluster
     */
    void *shutdown*() throws ClusteringFault;

    /**
     * Set carbon configuration context to this agent to be used in the
clustering impl
     */
    void *setConfigurationContext*(CarbonConfigurationContext
configurationContext);

    /**
     * Get the list of static members
     */
    List<ClusterMember> *getStaticMembers*();

    /**
     * Get the number of members alive.
     */
    int *getAliveMemberCount*();

    /**
     * Send a message to all members in the cluster
     */
    List<ClusteringCommand> *sendMessage*(ClusterMessage msg, boolean
isSync)
            throws ClusteringFault;

    /**
     * Send a message to a set of specific members in the cluster
     */
    List<ClusteringCommand> *sendMessage*(ClusterMessage msg,
List<ClusterMember> members, boolean isSync)
            throws ClusteringFault;


*MembershipScheme*

    void *init*() throws ClusteringFault;

    void *joinGroup*() throws ClusteringFault;


Thoughts?

Thanks,
Kishanthan.
-- 
*Kishanthan Thangarajah*
Senior Software Engineer,
Platform Technologies Team,
WSO2, Inc.
lean.enterprise.middleware

Mobile - +94773426635
Blog - *http://kishanthan.wordpress.com <http://kishanthan.wordpress.com>*
Twitter - *http://twitter.com/kishanthan <http://twitter.com/kishanthan>*

<<C5 - Clustering.png>>

_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to