Showing posts with label clustering. Show all posts
Showing posts with label clustering. Show all posts

Monday, May 2, 2011

AdroitLogic announces v1.4.0 of the UltraESB

The latest version brings support for clustering using ZooKeeper, and introduces a web based administration console, and support for Caching, XACML and JSON among many other features.

Singapore - May 2, 2011 - AdroitLogic Private Ltd. announced today the release v1.4.0 of its free and open source Enterprise Service Bus, the UltraESB. The UltraESB is released under the OSI approved GNU Affero General Public License; as well as a zero-dollar non-GPL commercial license which allows unlimited and perpetual use free of charge. First released in January 2010, the UltraESB was the first ESB to utilize memory mapped files and zero-copy, coupled with non-blocking IO to provide extreme levels of performance.

Version v1.4.0 released today offers support for clustering and management of cluster nodes through the new Web based administration console based on JMX. Clustering support is built over Apache ZooKeeper, which is used to manage extremely large clusters of Hadoop nodes. Advanced features such as automatic restart of a complete cluster of nodes - with round-robin processing, or management of a service, or endpoint across a cluster have been made trivial operations. The new version also supports caching, and the current release ships support for ehCache. The new release also ships support for high performance XML processing, utilizing FastXML. This allows end users to integrate third party libraries such as VTD XML with the UltraESB for extremely fast XPath processing, without parsing XML payloads. XACML is supported for fine grained authorization using the PicketBox  XACML library, and automatic conversion to/from JSON to XML makes processing JSON payloads even simpler.

In addition to supporting many transports and message formats, the UltraESB also offers support to easily develop JSON based data services with just a single line of configuration, and provides full support for the HTTP transport, including true REST support, basic, digest, NTLM and Amazon S3 authentication using pre-emptive authentication or challenge response mechanisms as applicable. The UltraESB also ships a very high performance WS-Security library that allows it to perform WS-Security operations over 3X faster than solutions based on the WSS4J/Rampart libraries used by other ESBs.

JMX support has been thoroughly improved to utilize MXBeans, and allows detailed monitoring and management of a runtime using JMX consoles such as Zabbix. The UltraESB now ships with a native Zabbix agent for even easier monitoring. As the UltraESB integrates with the Spring framework and supports Java as well as JSR 223 scripting languages, integration with third party libraries and extension is simple and powerful.

UltraESB implements clustering

You may already know from Asankha's blog or from the New item that we have released the 1.4.0 version of the UltraESB few hours ago, and I was waiting and waiting to write about this awesome clustering implementation that I have done for the UltraESB 1.4.0

The story begins with the decision to use ZooKeeper for the clustering implementation, which is what Asankha was initially suggesting me. I've done few feasibility studies and found it to be just right for the clustering implementation that I have been dreaming for years. Why I said I was dreaming is that, most of the ESB implementations out there have not identified the 2 main concerns of clustering;


  • Group coordination

  • State replication
to be different and they failed to keep those 2 concerns nicely separated. What I believe is that these 2 concerns of clustering needs to be managed separately and hence implemented with right amount of isolation yet integrating them together to work nicely. It is like spice or salt for food, you need that but only the just right amount, too less or too much gives you trouble. I have explained about this in more detail in my Clustering Part I article.

As explained in the above article UltraESB has cleanly separated the group coordination and cooperative control aspect of the clustering and that has been implemented with using ZooKeeper. On top of this we have written a command framework to command the complete cluster in one go, which enabled us to implement several set of cluster wide management controls.

First and the most important/useful cluster management command that is available on the UltraESB is the Round-Robin graceful restart of the nodes in the cluster. One of the major concerns on the modern ESB clusters was to managing the maintenance restarts without affecting the availability. I haven't come across any ESB out there including commercial once which provides a single control to do the maintenance restart with zero down-time of the service and zero message loss of the system. UltraESB guarantees this with the above operation. Restart being a graceful it guarantees that any node will not restart without serving all the messages it accepted, and the nodes in the cluster are being restarted in a round robin fashion makes sure that the system do not have a state where it doesn't have any live node to dispatch the message to, even if the cluster is just 2 nodes.

One key feature of the new 1.4.0 release is it's web based management console, which I will keep to a separate blog, but I had to mention it here to show you the one of 2 options available for you to try out this in action. So the first option is using the console Cluster Control Panel as shown below;

The other option is to use the jconsole. Which lead me to say a word on the improvements that we have done on the JMX management aspect of the ESB. Now we are using all new MXBeans and not MBeans, and that helped us a lot in improving the management. Will talk about all those on a separate article on the console and its implementation.

Apart from that this command framework enables you to turn on/off sequences, endpoints and proxy services in the complete cluster in one go. Not just that but you could write your own control commands to the UltraESB cluster too and use them in your solution to command the complete cluster.

If you are seeking to try it out the Clustered deployment of UltraESB and control commands is all what you need to go through. You may run the console using the uconsole.sh or uconsole.bat and see this in action in the console too.

That was about group coordination, and then I have evaluated several frameworks for implementing the state replication as that is a significant part of a good clustering implementation and many aspects like scalability and performance measures has to be taken into account when developing such a replication framework. We found the ehCache to be a good fitting distributed cache which can be used to implement state replication, but that used some kind of multi-casting based peer discovery to discover cache peers and we didn't want to rely on that as on cloud it is giving trouble and may not be scalable in a considerably big cluster. There we have used the right amount of salt and use the underlying ZooKeeper based coordination to discover the cache peers of distributed ehCache, thanks to ehCache it had a flexible API and the peer discovery was plugable. I am planning to write a complete article on this aspect of clustering later as the Clustering Part - II and once I am done with it, I will share the link as a comment too.

With that it brings me to the end of the story. Stay tuned to hear more about the UltraESB 1.4.0 and its newly born uconsole.

Wednesday, April 6, 2011

UltraESB v1.4.0 development builds are available for feedback!

Good cooking takes time. If you are made to wait, it is to serve you better, and to please you.
- MENU OF RESTAURANT ANTOINE. NEW ORLEANS

Anyone who has read the Mythical Man Month by Brooks will remember the famous statement on the menu of Restaurant Antoine. Likewise, we've taken a bit of time, to do a great release of the UltraESB v1.4.0, to please you better! The release is expected later this month, but we've started releasing public development builds for user feedback.

Some of the highlights of the new release are:
  • Support for clustered deployment and management of a cluster (based on Apache ZooKeeper)
  • Configuration updates, includes and removals at runtime including a "prepare" phase that detects possible issues before a configuration switch
  • An extremely lightweight Web based console for management of the UltraESB and basic monitoring
  • Complete revamp of JMX functionality to use MXBeans, and including a built-in Zabbix monitoring agent
  • Support for local and distributed caching via ehCache (expect support for memcached soon!)
  • XACML support using PicketBox XACML
  • Support for save/restore of test setup from the ToolBox
  • Many more enhancements and rectification of issues

Here is a brief screenshot from the web console


And here is a view of a proxy service shutdown command on a cluster, where one can see the list of nodes where the command completed successfully, or failed

The console also allows one to quickly load new configuration fragments, or unload or update loaded fragments


  • To checkout the source code, use Mercurial as follows:hg clone https://bitbucket.org/adroitlogic/ultraesb

Note: Some of the pages/parts of the pages of the Web console are still under construction