Monday Feb 28, 2011

Shoal 1.5.29 released - GlassFish 3.1's runtime dynamic clustering service

As part of the tumultuous release of GlassFish 3.1 today which comes with clustering, centralized administration, high availability, improved automated delegated transaction recovery and a host of other features on top of the Java EE 6 platform,  I am delighted to announce the release of  Shoal 1.5.29 - the latest version of the Runtime Dynamic Clustering Framework library that is the underlying runtime clustering engine for GlassFish 3.1.


GMS is employed by many GlassFish modules for group communications and group lifecycle event notifications. GlassFish modules that use GMS include the HA (in-memory replication) module, the transaction service module, the IIOP Failover Loadbalancer, and EJB Timer Service (for timer migrations). 


The In-memory Replication module (also a part of Project Shoal ) is a caching backing store module built on top of Shoal GMS. The replication module is used in GlassFish for HTTPSession, EJB Stateful Session Beans state replication, and Single Sign-On state replication, and in addition, is also employed by Project Metro Web Services for making Reliable Messaging and Secure Conversations highly available in GlassFish 3.1 release. 


In this Shoal GMS release, we have a major change incorporated and that is the default transport provider for Shoal has changed from JXTA to Grizzly - specifically this release uses Grizzly version 1.9.28 as the transport provider. Grizzly gives us better performance with its NIO based transport - GlassFish 3.1 HA is about 34% improved over GlassFish 2.x in our internal benchmarks partly due to the move to use Grizzly as the transport under GMS with the HA module using GMS messaging APIs for its replication logic. Moreover,  the developers of Grizzly are co-located with and part of the GlassFish team allowing for faster support within the team. The JXTA 2.5 transport is still available via a source code build, however, since it is not tested as part of the extensive GlassFish 3.1 HA and GMS testing, it is not included in the pre-built shoal-gms jar. 


Additional features in this release include a new notification of the Master Change Event when the group master changes to another member when an existing group master fails or is shut down administratively. Another new feature is the REJOIN sub event as part of the JoinNotificationSignal and JoinedAndReadyNotificationSignal to symbolize a  use case where a member failed and restarted much before GMS's failure detection algo confirmed the failure - in such cases, a failure notification of the restarted member is confusing and hence a REJOIN sub event is sent in as part of the member's JoinNotificationSignal and JoinedAndReadyNotificationSignal. 


We hope and look forward to the community to continue giving its valuable feedback for improvements in the Shoal modules  - Please download Shoal as a library for use in your projects and give us your valuable feedback and RFEs for improvements. We welcome your feedback at users AT shoal.dev.java.net


You can download Shoal 1.5.29 library from here :  http://shoal.java.net/downloadsindex.html

Thursday Sep 17, 2009

Project Shoal releases Shoal 1.1 Final Release

Project Shoal is announcing the release of Shoal 1.1 FCS today.  This is the third release after Shoal 1.0 and 1.0 Update Release. 

During the long time we have been working on this release, the Shoal team has accomplished many new features, and fixed many bugs providing significantly higher stability and reliability with the clustering core. A majority of the features and bug fixes were driven by the intense requirements coming out of the Telco grade application server from Project Sailfin (Sun GlassFish Communications Server) and Project GlassFish (Sun GlassFish Enterprise Server). 

Some of the highlights of this release are :

  • New event notification signal for JoinedAndReady members - applications using Shoal can call an API to report to other members that at the application level, the member is ready to begin operations - this distinguishes the member joining the group from the actual readiness of the application to start operations. 
  • New event notification signal for Group Leader changes - anytime a group leader leaves or fails, another group leader is selected and this signal allows Shoal GMS clients to be notified of this change to take any remedial actions. 
  • New health states Ready and AliveAndReady in the HealthMonitor member lifecycle state transitions to make it more closer to the finite state machine
  • Introduce capability to distinguish between group startup and individual instance startup in JOIN and JOINEDANDREADY notifications. Applications may benefit knowing whether only a single GMS member is starting vs all GMS members of the GROUP are starting at once.
  • Support for notifying failure within a specific threshold time when the failure is due to a network issue or a hardware end point failure. Blocking TCP health check connections would timeout in (default) 10 secs allowing for quicker detection of failure compared to default system settings for TCP Retransmission timeouts.
  • A new GMS Watchdog Failure Notification API to be used by external service management frameworks (i.e. like GlassFish NodeAgent) - This allows external monitoring processes to notify GMS when these external process detects a member process failure faster than GMS heartbeat based detection can assign failures. This feature allows for faster failure detection notifications than the heartbeat based unreachability algorithm can determine failure. The feature was driven by the fact that the GlassFish Node Agent would detect a member process loss faster than Shoal could detect through its heartbeats and restart the failed process, resulting in no failure notifications from Shoal GMS to its clients.  Full write up at document. Glassfish Issue 8308

This version of Shoal is already integrated into GlassFish v2.1.1 and Sailfin v2 both of which are upcoming releases slated for October 2009 end.  

Details of the release announcement are here :

https://shoal.dev.java.net/servlets/NewsItemView?newsItemID=7645

You can download Shoal 1.1 binaries and sources with Javadocs here : https://shoal.dev.java.net/downloadsindex.html

As always, we owe it to you all in the community and thank you for all the feedback and issues you have raised to help us improve. 

Thanks very much and hope to see your feedback continuing !

Tuesday Oct 21, 2008

Economic woes resulting in slashed tech budgets? Sun's GlassFish+MySQL makes perfect sense

With signs of a global economic turmoil underway, the financial system is under severe stress with credits vanishing, and Government Departments, small and medium businesses, and large corporations are faced with potential budget cuts for technology spending. Case in point : http://www.msnbc.msn.com/id/27103082/

With Sun's open source "stack" and cost-effective support subscriptions, affected sectors of the economy can take advantage of standards based, high quality, open source software with the low cost support services from Sun. This is a good time to consider moving away from expensive proprietary software stacks to Sun's open source software.

Take the case of Sun's commercially supported GlassFish + MySQL offering, both rock solid products that come with features only available in high cost closed-source products. This offering provides you the opportunity to seamlessly move from expensive licenses to an annual support subscription based offering that will reduce your cost of ownership. For example, Unlimited deployment of GlassFish + MySQL starts at $65,000. GlassFish + MySQL constitutes a very compelling offering that will help you justify the move both on features and costs.

Contact Sun to find out how you can save significantly with this offering.

For more on the value proposition, read Arun's blog entry here.

Friday May 09, 2008

JavaOne2008: Shoal Mini Talk at Java.Net Community Corner

At the JavaOne pavilion, Java.net had set up a community corner where mini talks were given by various interested project leads. I gave a short talk on Introducing Shoal clustering framework. 

The audience was \*very\* small  but I had quality questions from one very interested participant who wanted to use Shoal as a Distributed Test Harness engine. Very unique use case I thought and yes, Shoal would fit that bill.

Here's the short slide deck of the mini talk: Shoal Mini Talk JavaOne 2008

 

JavaOne 08: JavaU Bonus course on GlassFish Application Server

As part of JavaU courses offered this JavaOne, a GlassFish Application Server bonus training course was offered for free as part of a multi course deal. 

Many attended this course on Monday, May 05, 08. Arun Gupta and I  presented at this course. We are pleasantly surprised by the turn out of around 180 given that it was in the evening (6 - 9 pm), 3 hours long, and JavaOne had not yet started! :) That was surely a boost of positive energy for me.

The most interesting part of the course for me was the number of questions from the greatly interactive audience right from the get go. We answered most of the questions, even picked up an NB issue from an audience member in the web services area, and the feedback we received was mostly that the course was very helpful for the audience to understand how the product features and capabilities stacked up with their experience with other app servers such as WebLogic and JBoss.

We finished around 9.45 pm. :)

Since the printed slide deck was only a portion of the total at the time it went to print, I promised the audience that I would make this available through my blog.

So here it is. JavaU Bonus Course on GlassFish Application Server Java One 2008

So for those who find the material useful, please download GlassFish and let us know what you think. Send us your comments and questions through the GlassFish User mailing list.  


Friday Apr 18, 2008

New Shoal Clustering Download Page

With a view to helping our users choose the right download, we have organized the Shoal downloads page on the lines of the GlassFish download page. The new download page is located here : https://shoal.dev.java.net/downloadsindex.html

This should make it easier for users to find Shoal bits and use them in their clustering applications.We are seeing increasing interest from users with different types of questions in the Shoal user mailing list ranging from newbie questions to very advanced ones. Keep'em coming folks.

We will be posting new promoted downloads  and releases through this download page. Let us know if you need specific improvements to be made.

 

Thursday Jan 17, 2008

Sailfin drives a new feature in Shoal: JoinedAndReadyNotificationSignal

As usage of Shoal's clustering framework increases across products, new feature requests are coming in to enrich Shoal's offerings for employing applications.

The Sailfin project is building a Telecommunications Application Server with contributions from Ericsson and Sun. One of the parts of Sailfin is a Java based load balancer called ConvergedLoadBalancer (CLB). The CLB load balances both Http and SIP based requests. The CLB is unique in that it is a component of the Sailfin appserver instance. Thus, any instance in the cluster can be configured as a load balancer. Such an instance can be part of a Front End LB Cluster performing load balancing of requests on a separate application server cluster tier or it can be part of a Self LoadBalancing Cluster wherein one or more instances of the application server cluster also perform the role of a load balancer while also serving requests. The CLB component and other Sailfin components employ Shoal for cluster events, messaging and health monitoring.

The CLB (as with any load balancer) needs to know when instances of a cluster have not only joined a cluster but also when the instances are ready serve requests. Shoal was up until now providing a JoinNotificationSignal which would be triggered as soon as each instance in the cluster used Shoal's GMS to join the cluster. This was sufficient for many use cases but for the LB it needed to know not just that but also when the instance had completed startup operations. This requirement helped us design a new notification called JoinedAndReadyNotificationSignal that would be disseminated to the cluster members for each instance completing startup and reporting such a completion to the group.

Shoal's GroupManagementService provides a new API called reportJoinAndReadyState() which the employing parent application can now call when the parent application has completed its own initialization and startup indicating a point where operational activities on the instance can now start.

Sheetal and I recently committed the code supporting this new feature.

This feature can be particularly useful while building Compute Grid and Cloud Computing type services using Shoal wherein each Grid node can now report when they are ready to act as nodes in the grid. BTW Shoal's concept of  a GroupLeader ties in well with the Grid's Compute Task Manager abstraction and is a good infrastructural fit.

Do please share your feedback with us at users alias about what you would like to see added in Shoal to serve your clustering and fault tolerance needs. Shoal's goal of clustering goes much beyond the realm of Data Grids (which we are looking into building ) with a wider  spread in terms of building fault tolerance solutions.


Friday Jan 11, 2008

GlassFish Hidden Nugget: Automatic Distributed Transaction Recovery Service

GlassFish v2 and v2 ur1 releases (and later) have support for transaction recovery (both manual and automated) in the sense that incomplete transactions at the time of an instance failure can be committed either manually or automatically.

Part of the new feature set in the cluster profile is a little known feature called Automated Distributed Transaction Recovery that comes out of Project Shoal's support for it. 

Essentially, Automatic Distributed Transaction Recovery in GlassFish works as follows :

Consider the following :

  • a cluster of three instances : instance1, instance2, and instance3
  • Two XA resources used by each GlassFish instance
  • a transaction starts on instance 1,
  • Transaction Manager on instance1 asks resource X to pre-commit,
  • Transaction Manager on instance1 asks resource Y to pre-commit,
  • Transaction Manager on instance1 asks resource X to do a commit,

Now, instance1 crashes

The Transaction Service component in one of the surviving members, instance2 and instance3, gets a notification signal that a failure recovery operation needs to be performed for a instance1. This signal from Shoal is called FailureRecoverySignal.

This notification signal comes to the Transaction Service component in only one particular selected instance as a result of a selection algorithm run in Shoal's GMS component that takes advantage of the identically ordered cluster view provided to it by the underlying group communication provider (default provider is Jxta).

The Transaction Service component in this instance, say instance2, would now go into its autorecovery block. It starts by waiting for a designated time (default to 60 seconds) to allow for the failed instance1 to start back up.

If instance1 is starting up, its own Transaction Service component would do self recovery to complete phase 1 transactions.

In instance2, after the wait timeout occurs, the transaction service component would now see if instance1 is part of the group view and if not try to acquire a lock for the failed instance's transaction logs through Shoal's FailureRecoverySignal and if successful (indicating that the failed instance did not startup), acquire the transaction log and start recovery of transactions i.e complete the commit operations for the pre-commit transactions. If the acquisition of the lock fails, then it gives up, and checks that the failed instance did startup through Shoal's group view and logs this fact.


If, during the recovery operations  being performed by instance2, the failed instance1 starts up, the transaction service component in this instance would first check with Shoal if a recovery operation is in progress for its resources by any other instance in the group and if yes, it waits for the recovery operations to be completed and then completes startup. This ability to check for such recovery operations in progress is through a related Shoal feature called Failure Fencing[1].  If there are no recovery operations in progress, then the startup proceeds with a self recovery which recovers any incomplete transactions in instance1's logs.

Now during recovery of instance1's transaction logs, instance2 fails, then the fact that this instance was in the process of recovering for instance1 is known to the remaining members of the group (i.e. instance3) through the failure fencing recovery state recorded in Shoal's Distributed State Cache. As a result, when instance3's transaction service gets the failure recovery signal, not only does it get it for instance2's failure, but also for instance1. This facility covers for cases where cascading failures or multiple failures occur.

Note that, for the automatic distrbuted transaction recovery to work, access to the transaction logs for all instances in the cluster for
purposes of auto recovery requires that the logs be mounted on a shared/mirrored disk[2].


[1] More on Shoal's Automated Delegated Recovery Selection
[2] Distributed Transaction Recovery

 

 

 

Saturday Dec 08, 2007

Excellent Article on Shoal by non-Sun authors

Just came across this excellent introductory article on Shoal clustering framework on Java.net which I believe is to be published on upcoming Tuesday going by the date posted (12/11/2007).

Noticeably, this is an article by authors that we, at the Shoal community, have not yet corresponded with. This is great news as it lets us know that there is a quiet adoption of this framework. The article lucidly explains salient aspects of Shoal's clustering approach and how easy it is to integrate it into your application/infrastructure. 

We hope this will make it even easier for users to adopt this technology.

Do send us your questions at the Shoal users mailing list.


Wednesday Dec 05, 2007

Shoal Whitepaper on Scalable Dynamic Clustering

Its been a while since I have blogged. I have been rather busy managing the GlassFish v2 ur1 release which is round the corner around Dec 13/14.

Meanwhile, Mohamed Abdelaziz and I put together a Whitepaper that gives details on the scalability and dynamic clustering aspects of Shoal. The paper provides a good overview of the self composing nature of Shoal and dives deeper into the set of protocols that provide the basis for building fault tolerant infrastructures.

Shoal is coming along very well in various spaces going by the increasing hits to our website from Telco and Financial majors. We are continuously improving Shoal into a robust component based on feedback from our user community. So keep'em coming to the users mailing list.

Tuesday Aug 14, 2007

Shoal Clustering User Guide Part 1

In this series of blog entries, I will provide a guide for new users on how to use Shoal for your application.

This particular blog entry provides a Shoal Clustering 101 type basic introduction. Subsequent blogs will enable the user to get more closer to the metal on how to use this technology.

What is Shoal? 

Shoal is a technology/framework that allows consuming applications the ability to participate in a group and thereby communicate with the group, register interest in being notified of group events, and share application data across group members. These functionalities enable Shoal to be used as a clustering framework in enterprise infrastructure software while also being capable of other use cases.

Shoal's core is the Group Management Service (GMS) which provides client APIs to interact with a group while allowing group communication libraries to be integrated through a service provider interface implementation. Currently with a Jxta service provider, Shoal takes advantage of advanced Jxta features for robustness, reliability and scalability.

While Shoal itself is scalable to many instances in a group (upto 64 nodes in our tests), the scaling is always determined by the size and characteristics of the employing application/product.

Shoal Downloads  

Among the first things you want to know is where to get Shoal downloads.  

Shoal download is available here. Pick the latest zip file for the latest and greatest stable version. The zip file contains two jars of interest - the shoal-gms.jar containing Shoal's client api, GMS core implementation, and a Jxta service provider implementation,  and jxta.jar which is the Jxta peer-to-peer platform.

Shoal Documentation 

Now that you have the jars, you would need documentation to see how to integrate Shoal into your product. Shoal offers APIs to consuming applications to participate in a cluster. Shoal's JavaDocs containing the APIs are available here. In the JavaDoc, select the com.sun.enterprise.ee.cms.core package.  Look in the Description section for a simple introduction to the API.

As the Description mentions, the GMSFactory class located in the com.sun.enterprise.ee.cms.core package is the entry point for getting Shoal's Group Management Service.

Code Snippet 

The following code snippet uses the GMSFactory to start the GMS module, use the GroupManagementService reference to initialize the group, register interest in events,  join the group and the api to call when the process is ready to leave the group : 


//initializes GMS and underlying group communication provider

final GroupManagementService gms = GMSFactory.startGMSModule(serverIdentifierName, groupIdentifierName, GroupManagementService.MemberType.CORE, configProperties);

//register for group events

//register to receive notification when a process joins the group
gms.addActionFactory(new JoinNotificationActionFactoryImpl(this));

//register to receive notification when a group member leaves on a planned shutdown
gms.addActionFactory(new PlannedShutdownActionFactoryImpl(this));

//register to receive notification when a group member is suspected to have failed
gms.addActionFactory(new FailureSuspectedActionFactoryImpl(this));

//register to receive notification when a group member is confirmed failed
gms.addActionFactory(new FailureNotificationActionFactoryImpl(this));

//register to receive notification when this process is selected to perform recovery operations on a failed member's resources
gms.addActionFactory(serviceName, new FailureRecoveryActionFactoryImpl(this));

//register to receive messages from other group members to this registered component

gms.addActionFactory(new MessageActionFactoryImpl(this), componentName);

//joins the group
gms.join();
 

//leaves the group gracefully
gms.shutdown(GMSConstants.shutdownType.INSTANCE_SHUTDOWN); 

As the above code snippet shows, it is extremely easy to instrument Shoal into your application and be on the road to clustering your application and take remedial actions on occurrence of group events.

A Simple Shoal Example (sources)

Look through this example code to see the full source of a Simple Shoal Example.  Look in the runSimpleSample() method to understand steps to make Shoal an in-process component.

Questions? Comments? 

If you have questions on the above, please send your questions to the Shoal users alias: users [at] shoal [dot] dev [dot] java [dot] net or post your questions as a comment to this blog entry.

In the next blog entry, I will go a bit deeper explaining specific parts of Shoal.


Tuesday Aug 07, 2007

Shoal Clustering Framework 1.0 Early Access available

Its been a fairly long time since I blogged.

Over the past few months, we (the GlassFish HA team and the Jxta Team ) have been concentrating on improving and addressing GlassFish high availability features and associated bugs. In the process, Shoal's Group Management Service benefited from intensive QE cycles on 8-node GlassFish clusters under scores of scenarios and test cases. We have been focused on fixing bugs, improving performance, and progressively gating changes in Shoal to manage risks for the upcoming GlassFish v2 FCS release. 

At the moment, Shoal is in good shape and we decided to release the Shoal 1.0 Early Access version a couple of days ago. This will be followed by the 1.0 Final release before the GlassFish v2 release once we know that we have delivered the final acceptable bits for that product.

After that our next step is to address the unique requirements that arise out of the Sailfin project which is building a SIP supported application server based on GlassFish.  

We'd love to hear feedback from our user community about your success stories, issues and enhancement requests using Shoal.

We have seen anecdotal evidence of how useful and easy-to-use this library is and it would help improve our adoption and project growth if more specific feedback is available. Our Statcounter statistics are showing companies from very interesting industry segments going through the Shoal site, downloads and documents so this is a huge boost to our commitment to build a good group communications API based library.

If you have a success story or feedback using Shoal that you can share, drop us a line at the Shoal user alias

users[at]shoal[dot]dev[dot]java[dot]net

and we will highlight it our blogs and on the Shoal web site.

Also we welcome code and design contributions from experienced clustering and distributed systems developers.

 

 

 

Saturday Mar 31, 2007

NetBeans and GlassFish clusters:What are your needs?

We are looking for feedback from users of NetBeans and GlassFish on what they would like to see in terms of their runtime interactions through the IDE with cluster(s) in GlassFish.

Most IDEs provide the ability to work with a single instance of an application server such as GlassFish, etc.  I do not see the notion of cluster(s) in the IDEs unless I have missed something obvious. There must be various use cases wherein a developer (typically an advanced developer/deployer/tester such as a System Integrator) would need the ability to interact with a cluster through the IDE.

Clustering typically involved an environment consisting of many instances that can be located on different remote machines. Such instances are created/started/stopped/deleted on each machine by a dedicated agent process that follows instructions from an administrative server within which a cluster is a logical configuration entity while instances are physical entities. So, within the IDE, there are possibly but a few operations that can be executed/managed.

So here are some questions for which I'd appreciate responses through comments (Add more if you can think of any further):

  1. Is there indeed a need for interacting with clusters through the IDE?
  2. What problems do you see today with respect to clusters from within your IDE?
  3. If the browser based admin console of the appserver can be lauched from within the IDE would this  be sufficient to address your needs?
  4. If not, why is the IDE an important piece to help solve that problem?
  5. If interacting with cluster(s) is important, what should that interaction functionality be from within an IDE?
  6. If debugging seems like an obvious use case, would that not already be addressed by working with individual instances that are part of a cluster?
  7. What other use cases do you work with that you wish an IDE could provide when working with clusters?

Do add more questions and answers if you can think of more.

Tuesday Mar 27, 2007

Article on Introducing PetStore 2.0

Blueprints team members Inderjeet Singh, Mark Basler and Sean Brydon recently teamed up with Sun staff writer Dana Nourie  for an article Introducing the Java PetStore 2.0 Application.

There is a lot of interest among Java developers to learn how next generation dynamic web technologies such as Ajax can be put to use in Java EE applications that deploy in an enterprise setting. The article has been very popular and generated many thousands of hits since publication a couple of weeks ago. The PetStore Blueprint application's value proposition to developers is to show how one can use Web 2.0 technologies with end-to-end Java EE apps. 

The Blueprints project provides many such learning artifacts. A great way to learn more in this space is the Blueprints Solutions Catalog which is now hosted live with a view app at our web application developers' page. The viewer app is itself a Web 2.0 app and provides content organized into useful categories.  See more Web 2.0 samples here.

The Blueprints apps have been tested with various releases and builds of GlassFish. The Java EE SDK includes Blueprints apps so that is the easiest way to get both the GlassFish application server and the above applications in one download.


 

Wednesday Feb 14, 2007

Blueprints team delivers Web 2.0-based PetStore 2.0 application

The Blueprints team has delivered a brand new (early access but mostly complete)  version of the popular PetStore application.

What's different about this release is that this application demonstrates the use of latest emerging technologies (popularly called Web 2.0) and uses the more mainstream pattern preference of developers, that of a web-only application that employs the JPA for persistence. As a result, the PetStore 2.0 is a significantly lightweight yet rich web application that shows how to mesh Java EE 5 artifacts with emerging technologies such as AJAX, mashups, etc.


Petstore 2.0 can be viewed live on Sun's Developer Web site located at http://webdev1.sun.com/petstore/faces/index.jsp. The announcement of the release is located at https://blueprints.dev.java.net/servlets/NewsItemView?newsItemID=4632.


The Petstore 2.0 application demonstrates numerous Web 2.0 uses cases in the application including Ajax, Client-side mashups, Server-Side mashups, Delegated mashups, RSS news bar through ROME, File upload and much more. Petstore 2.0 is part of the Java EE 5 SDK and runs on Glassfish. The release notes for Petstore are located at https://blueprints.dev.java.net/petstore/release_notes.html.

If you are a developer looking for resources and guidelines on how to build AJAX and other web 2.0 technologies enabled Java EE apps, download the PetStore and review the code base. The code is released under the BSD license and is reusable in your apps.

You can also discuss your questions at the blueprints forum located at : http://forum.java.sun.com/forum.jspa?forumID=121 

 

About

Shreedhar Ganapathy

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today