<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-11-16 
 | 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="20181116" />
    <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: 2018-11-16<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.7.9<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>
      </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="../svn.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>



<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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>

<div class="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;2018
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>