<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.11.1 at 2022-06-07 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20220607" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Axis2 Clustering Support</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
      <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script>
<meta http-equiv="content-type" content="" />      </head>
    <body class="topBarDisabled">
      <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href="http://www.apache.org/" id="bannerLeft"><img src="http://www.apache.org/images/asf_logo_wide.png"  alt="Apache Axis2"/></a></div>
        <div class="pull-right"><a href=".././" id="bannerRight"><img src="../images/axis.jpg" /></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2022-06-07<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.1<span class="divider">|</span></li>
        <li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../index.html" title="Axis2/Java">Axis2/Java</a><span class="divider">/</span></li>
    <li class="active ">Axis2 Clustering Support</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
<ul class="nav nav-list">
          <li class="nav-header">Axis2/Java</li>
    <li><a href="../index.html" title="Home"><span class="none"></span>Home</a>  </li>
    <li><a href="../download.html" title="Downloads"><span class="none"></span>Downloads</a>  </li>
    <li><a href="javascript:void(0)" title="Release Notes"><span class="icon-chevron-down"></span>Release Notes</a>
      <ul class="nav nav-list">
    <li><a href="../release-notes/1.6.1.html" title="1.6.1"><span class="none"></span>1.6.1</a>  </li>
    <li><a href="../release-notes/1.6.2.html" title="1.6.2"><span class="none"></span>1.6.2</a>  </li>
    <li><a href="../release-notes/1.6.3.html" title="1.6.3"><span class="none"></span>1.6.3</a>  </li>
    <li><a href="../release-notes/1.6.4.html" title="1.6.4"><span class="none"></span>1.6.4</a>  </li>
    <li><a href="../release-notes/1.7.0.html" title="1.7.0"><span class="none"></span>1.7.0</a>  </li>
    <li><a href="../release-notes/1.7.1.html" title="1.7.1"><span class="none"></span>1.7.1</a>  </li>
    <li><a href="../release-notes/1.7.2.html" title="1.7.2"><span class="none"></span>1.7.2</a>  </li>
    <li><a href="../release-notes/1.7.3.html" title="1.7.3"><span class="none"></span>1.7.3</a>  </li>
    <li><a href="../release-notes/1.7.4.html" title="1.7.4"><span class="none"></span>1.7.4</a>  </li>
    <li><a href="../release-notes/1.7.5.html" title="1.7.5"><span class="none"></span>1.7.5</a>  </li>
    <li><a href="../release-notes/1.7.6.html" title="1.7.6"><span class="none"></span>1.7.6</a>  </li>
    <li><a href="../release-notes/1.7.7.html" title="1.7.7"><span class="none"></span>1.7.7</a>  </li>
    <li><a href="../release-notes/1.7.8.html" title="1.7.8"><span class="none"></span>1.7.8</a>  </li>
    <li><a href="../release-notes/1.7.9.html" title="1.7.9"><span class="none"></span>1.7.9</a>  </li>
    <li><a href="../release-notes/1.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</a>  </li>
    <li><a href="../release-notes/1.8.1.html" title="1.8.1"><span class="none"></span>1.8.1</a>  </li>
      </ul>
  </li>
    <li><a href="../modules/index.html" title="Modules"><span class="none"></span>Modules</a>  </li>
    <li><a href="../tools/index.html" title="Tools"><span class="none"></span>Tools</a>  </li>
          <li class="nav-header">Documentation</li>
    <li><a href="../docs/toc.html" title="Table of Contents"><span class="none"></span>Table of Contents</a>  </li>
    <li><a href="../docs/installationguide.html" title="Installation Guide"><span class="none"></span>Installation Guide</a>  </li>
    <li><a href="../docs/quickstartguide.html" title="QuickStart Guide"><span class="none"></span>QuickStart Guide</a>  </li>
    <li><a href="../docs/userguide.html" title="User Guide"><span class="none"></span>User Guide</a>  </li>
    <li><a href="../docs/jaxws-guide.html" title="JAXWS Guide"><span class="none"></span>JAXWS Guide</a>  </li>
    <li><a href="../docs/pojoguide.html" title="POJO Guide"><span class="none"></span>POJO Guide</a>  </li>
    <li><a href="../docs/spring.html" title="Spring Guide"><span class="none"></span>Spring Guide</a>  </li>
    <li><a href="../docs/webadminguide.html" title="Web Administrator's Guide"><span class="none"></span>Web Administrator's Guide</a>  </li>
    <li><a href="../docs/migration.html" title="Migration Guide (from Axis1)"><span class="none"></span>Migration Guide (from Axis1)</a>  </li>
          <li class="nav-header">Resources</li>
    <li><a href="../faq.html" title="FAQ"><span class="none"></span>FAQ</a>  </li>
    <li><a href="../articles.html" title="Articles"><span class="none"></span>Articles</a>  </li>
    <li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki"><span class="none"></span>Wiki</a>  </li>
    <li><a href="../refLib.html" title="Reference Library"><span class="none"></span>Reference Library</a>  </li>
    <li><a href="../apidocs/index.html" title="Online Java Docs"><span class="none"></span>Online Java Docs</a>  </li>
          <li class="nav-header">Get Involved</li>
    <li><a href="../overview.html" title="Overview"><span class="none"></span>Overview</a>  </li>
    <li><a href="../git.html" title="Checkout the Source"><span class="none"></span>Checkout the Source</a>  </li>
    <li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a>  </li>
    <li><a href="../release-process.html" title="Release Process"><span class="none"></span>Release Process</a>  </li>
    <li><a href="../guidelines.html" title="Developer Guidelines"><span class="none"></span>Developer Guidelines</a>  </li>
    <li><a href="../siteHowTo.html" title="Build the Site"><span class="none"></span>Build the Site</a>  </li>
          <li class="nav-header">Project Information</li>
    <li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a>  </li>
    <li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a>  </li>
    <li><a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code"><span class="none"></span>Source Code</a>  </li>
    <li><a href="../thanks.html" title="Acknowledgements"><span class="none"></span>Acknowledgements</a>  </li>
          <li class="nav-header">Apache</li>
    <li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License"><span class="none"></span>License</a>  </li>
    <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship"><span class="none"></span>Sponsorship</a>  </li>
    <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a>  </li>
    <li><a href="http://www.apache.org/security/" class="externalLink" title="Security"><span class="none"></span>Security</a>  </li>
  </ul>
          <hr />
          <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
              </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">




<h1>Axis2 Clustering Support</h1>

<p>Are you interested in improving Scalability and High Availability of your Web Services?</p>

<p>Axis2 1.4 provides experimental clustering support to add <b><i>Scalability, Failover and High Availability</i></b> to your Web Services.
This guide will explain the extent of clustering support and it's the current limitations.
It also highlights the recommended approaches using examples.</p>

<p>Axis2 clustering support can be used in several scenarios.
However it is important to understand the current limitations and the risks/impacts associated with each scenario.
</p>


<section>
<h2><a name="Content"></a>Content</h2>

<ul>

<li><a href="#introduction">Introduction</a></li>

<li><a href="#scalability">Scalability</a></li>

<li><a href="#failover">Failover</a></li>

<li><a href="#ha">High Availability</a></li>

<li><a href="#stateless_webservices">Clustering for Stateless Web Services</a></li>

<li><a href="#stateful_Web_Services">Clustering for Stateful Web Services</a></li>

<li><a href="#config">Configuring Axis2 to add Clustering Support</a></li>


<li><a href="#scalability_stateless_example">Example 1: Scalability and HA with Stateless Web Services</a></li>

<li><a href="#failover_stateful_example">Example 2: Failover for Stateful Web Services</a></li>

<li><a href="#scalability_stateful_example">Example 3: Scalability and HA with Stateful Web Services</a></li>

<li><a href="#summary">Summary</a></li>

<li><a href="#furtherstudy">For Further Study</a></li>
</ul>


<a name="introduction" id="introduction"></a>
<section>
<h2><a name="Introduction"></a>Introduction</h2>

<p>In the context of Axis2 clustering, a node is defined as a separate process with a unique port number where it listens for requests on a given transport . A physical machine can contain more than one node.</p>


<a name="scalability" id="scalability"></a>
<section>
<h2><a name="Scalability"></a>Scalability</h2>

<p>In order to maintain the same level of serviceability (QoS) during an increase in load you need the ability to scale.
Axis2 provides replication support to scale horizontally. That is, you can deploy the same service in more than one node to share the work load, thereby increasing or maintaining the same level of serviceability (throughput etc).</p>


<a name="failover" id="failover"></a>
<section>
<h2><a name="Failover"></a>Failover</h2>

<p>Axis2 provides excellent support for Failover by replicating to backup node(s). 
If you deploy your Stateful Web Services in this mode, you can designate 1-2 backups and replicate state. 
In the event the primary node fails, the clients can switch to one of the backups. 
If you use Synapse with the Failover mediator you can provide transparent Failover.</p>


<a name="ha" id="ha"></a>
<section>
<h2><a name="High_Availability"></a>High Availability</h2>

<p>You can improve the availability of your Web Service by using the following Axis2 functionality. 
</p>
<ul>

<li><b>Failover</b> support will ensure that a client will continued be served, without any interruption due to a node failure.</li>

<li><b>Scalability</b> support will ensure that your services can maintain the same level of serviceability/availability (QoS) in increased load conditions.</li>

<li><b>Hot Deploy</b> feature ensures that you could deploy new services without shutting down your existing services.</li>
</ul>



<a name="stateless_webservices" id="stateless_webservices"></a>
<section>
<h2><a name="Clustering_for_Stateless_Web_Services"></a>Clustering for Stateless Web Services</h2>

<p>This is the simplest use case. 
If your Web Service does not store any state in the context hierarchy then you could deploy your service in &quot;n&quot; number of nodes. To ensure identical configuration for your services, you can load from a central repository using the URLBasedAxisConfigurator. This is not a must, but it makes management of the cluster easy and less error prone.</p>


<p>Since it is stateless no explicit replication is needed. If a node fails any other node in the cluster can take over. You can use a load balancer to direct requests based on a particular algorithm (Ex: Round Robin, Weight based, Affinity based). You can increase the no of nodes to handle scalability (to scale vertically) without worrying about the overhead of replication as the services are stateless</p>


<a name="stateful_webservices" id="stateful_webservices"></a>
<section>
<h2><a name="Clustering_for_Stateful_Web_Services"></a>Clustering for Stateful Web Services</h2>

<p>This is a more complicated use case where your Web Service needs to store state in the context hierarchy. Each Web Service instance (deployed in separate nodes) will need to share state among themselves. Axis2 provides replication to support sharing of state among services.</p>


<p>However, if more than one node tries to update the same state in the context hierarchy, conflicts will arise and the integrity of your data will be compromised. Now your cluster will have inconsistent state. This can be avoided using a locking mechanism. However Axis2 currently does not support it yet.</p>


<p>If this shared state is read more frequently and updated rarely the probability of conflicts decrease. You may use Axis2 in the above use case for Stateful Web Services based on your discretion. However it's important to remember that there can be conflicts.<i><b>If you have frequent writes it is not advisable to use Axis2 until we introduce locking support</b></i></p>


<p>Please note this warning is only applicable to the following use cases.
</p>
<ul>

<li>Your Service is deployed in Application Scope</li>

<li>You store information in the ServiceGroupContext (irrespective of your scope)</li>
</ul>



<p>You may safely use services in &quot;soapsession&quot; scope provided you <i><b>don't modify (or modify at all) state in ServiceGroupContext frequently</b></i>. In soap-session the service context is exclusive to the client who owns the session. Therefore only that client can modify state. A conflict might arise if the same client tries to access the same service in two different nodes simultaneously which happens to modify the same state. However this is rare, but might arise due to an error in the load balancer or the client. If you use Sticky sessions, it will ensure that state will be changed in one node only by directing all requests by the same client to the same node. This is the safest way to use Axis2 clustering support for Stateful Web Services to acheive scalability.
</p>



<a name="config" id="config"></a>
<section>
<h2><a name="Configuring_Axis2_to_add_Clustering_Support"></a>Configuring Axis2 to add Clustering Support</h2>

<p>You need to add the following snippet to your axis2.xml</p>

<div>
<pre>
   &lt;cluster class=&quot;org.apache.axis2.clustering.tribes.TribesClusterManager&quot;&gt;
     &lt;contextManager class=&quot;org.apache.axis2.clustering.context.DefaultContextManager&quot;&gt;
        &lt;listener class=&quot;org.apache.axis2.clustering.context.DefaultContextManagerListener&quot;/&gt;
        &lt;replication&gt;
            &lt;defaults&gt;
                &lt;exclude name=&quot;local_*&quot;/&gt;
                &lt;exclude name=&quot;LOCAL_*&quot;/&gt;
            &lt;/defaults&gt;
            &lt;context class=&quot;org.apache.axis2.context.ConfigurationContext&quot;&gt;
                &lt;exclude name=&quot;SequencePropertyBeanMap&quot;/&gt;
                &lt;exclude name=&quot;NextMsgBeanMap&quot;/&gt;
                &lt;exclude name=&quot;RetransmitterBeanMap&quot;/&gt;
                &lt;exclude name=&quot;StorageMapBeanMap&quot;/&gt;
                &lt;exclude name=&quot;CreateSequenceBeanMap&quot;/&gt;
                &lt;exclude name=&quot;ConfigContextTimeoutInterval&quot;/&gt;
                &lt;exclude name=&quot;ContainerManaged&quot;/&gt;
            &lt;/context&gt;
            &lt;context class=&quot;org.apache.axis2.context.ServiceGroupContext&quot;&gt;
                &lt;exclude name=&quot;my.sandesha.*&quot;/&gt;
            &lt;/context&gt;
            &lt;context class=&quot;org.apache.axis2.context.ServiceContext&quot;&gt;
                &lt;exclude name=&quot;my.sandesha.*&quot;/&gt;
            &lt;/context&gt;
        &lt;/replication&gt;
     &lt;/contextManager&gt;
   &lt;/cluster&gt;
</pre></div>

<p>The exclude tag tells the system to avoid replicating that particular property. This is a useful
feature as you would need to have properties that is node specific only. 
The default config in axis2 will have all properties the axis2 system doesn't want to replicate. Web Service developers can also use this to filter out properties that should be local only.
</p>


<a name="scalability_stateless_example" id="scalability_stateless_example"></a>
<section>
<h2><a name="Example_1:_Scalability_and_HA_with_Stateless_Web_Services"></a>Example 1: Scalability and HA with Stateless Web Services</h2>

<p>The following is a good example for deploying a Stateless Web Service for Scalability and High Availability.
The following service can be deployed in &quot;application&quot; scope in &quot;n&quot; nodes using a central repository. 
Once state is loaded by a particular node it will be shared by other nodes as the config context will replicate the data.
Even if two nodes load the data at the same time, there want be any conflicts as it is the same set of data.
(All nodes should synchronize their clocks using a time server to avoid loading different sets of data)</p>


<p>For the sake of this example we assume replication is cheaper than querying the database.
So once queried it will be replicated to the cluster</p>

<div>
<pre>
/**
 * This Service is responsible for providing the top 5
 * stocks for the day, week or quarter
 */
public class Top5StockService
{
	public String[] getTop5StocksForToday()
	{
		// If cache is null or invalid fetch it from data base
		ConfigurationContext configContext =
            MessageContext.getCurrentMessageContext().getConfigurationContext();
		
		String[]  symbols = (String[])configContext.getProperty(TOP5_TODAY);
		if (!checkValidity(configContext.getProperty(TOP5_TODAY_LOAD_TIME)))
                {
		    symbols = loadFromDatabase(TOP5_TODAY);
                    configContext.setProperty(TOP5_TODAY,symbols);
		    configContext.setProperty(TOP5_TODAY_LOAD_TIME,new java.util.Date()); 	 
                } 
		
		return symbols;
	}
	
	public String[] getTop5StocksForTheWeek()
	{
		 // If cache is null or invalid fetch it from data base
		.............
	}
	
	public String[] getTop5StocksForTheQuarter()
	{
		// If cache is null or invalid fetch it from data base
                ............
	}
}
</pre></div>


<a name="failover_stateful_example" id="failover_stateful_example"></a>
<section>
<h2><a name="Example_2:_Failover_for_Stateful_Web_Services"></a>Example 2: Failover for Stateful Web Services</h2>

<p>The following example demonstrates Failover support by replicating state in a service deployed in &quot;soapsession&quot; scope.
You can deploy the service in 2 nodes. Then point a client to the first node and add a few items to the shopping cart.
Assuming the primary node has crashed, point the client to the backup node. You should be able to checkout the cart with the items you added in the first node.</p>


<div>
<pre>
public class ShoppingCart
{	
	public final static String SHOPPING_CART = &quot;SHOPPING_CART&quot;;
	public final static String DISCOUNT = &quot;DISCOUNT&quot;;
	
	public void createSession()
	{
		List&lt;Item&gt; cart = new ArrayList&lt;Item&gt;();
		ServiceContext serviceContext =
            MessageContext.getCurrentMessageContext().getServiceContext();
		serviceContext.setProperty(SHOPPING_CART, cart);
	}
	
	public void addItem(Item item)
	{
		ServiceContext serviceContext =
            MessageContext.getCurrentMessageContext().getServiceContext();
		List&lt;Item&gt; cart = (List&lt;Item&gt;)serviceContext.getProperty(SHOPPING_CART);
		cart.add(item);
	}
	
	public void removeItem(Item item)
	{
		ServiceContext serviceContext =
            MessageContext.getCurrentMessageContext().getServiceContext();
		List&lt;Item&gt; cart = (List&lt;Item&gt;)serviceContext.getProperty(SHOPPING_CART);
		cart.remove(item);
	}
	
	public double checkout()
	{
		ServiceContext serviceContext =
            MessageContext.getCurrentMessageContext().getServiceContext();
		List&lt;Item&gt; cart = (List&lt;Item&gt;)serviceContext.getProperty(SHOPPING_CART);
		
		double discount = (Double)serviceContext.getServiceGroupContext().getProperty(DISCOUNT);
		
		double total = 0;
		for (Item i : cart)
		{
			total = total + i.getPrice();
		}
		
		total = total - total * (discount/100);
		
		return total;
	}	
}
</pre></div>


<a name="scalability_stateful_example" id="scalability_stateful_example"></a>
<section>
<h2><a name="Example3:_Scalability_and_HA_with_Stateful_Web_Services"></a>Example3: Scalability and HA with Stateful Web Services</h2>

<p>You can deploy the the above Shopping Cart service in several active nodes (with a backup(s) for each node). 
You only replicate to your backup nodes for Failover. The load balancer should ensure sticky sessions. 
 The strategy is to partition your load between the active nodes to achieve scalability and replication to the backups to achieve Failover. These in turn will increase the high availability of your services. Since the above example doesn't use Service Group Context to write any state there want be any conflicts.</p>


<p>For the sake of this example we assume that all read only properties for the Service Group Context is loaded at initialization
 <b><i>Please note this is the recommended approach for Stateful Web Services due to the current limitations</i></b>
</p>


<a name="summary" id="summary"></a>
<section>
<h2><a name="Summary"></a>Summary</h2>

<p>Apache Axis2 provides experimental support for clustering to improve the following properties of your Web Services.
</p>
<ul>

<li>Scalability</li>

<li>Failover</li>

<li>High Availability</li>
</ul>
It is important to understand the current limitations when leveraging clustering support.



<a name="furtherstudy" id="furtherstudy"></a>
<section>
<h2><a name="For_Further_Study"></a>For Further Study</h2>

<p><a href="../index.html">Apache Axis2</a></p>

<p><a href="Axis2ArchitectureGuide.html">Axis2 Architecture</a></p>

<p>Introduction to Apache Axis2-<a class="externalLink" href="http://www.redhat.com/magazine/021jul06/features/apache_axis2/">http://www.redhat.com/magazine/021jul06/features/apache_axis2/</a></p>

</html>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2022
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>
