Terracotta and GridGain comparison…
One of my objectives with this exercise was to be able to understand which one of these tools should we use in what situations. It looks like we can get some inferences with the help of this application.
Initially, before implementing this app on GridGain, I was not too sure on how to implement it so that we can have some similarity with the implementation on TerraCotta. In Terracotta, we shared a Jobs class instance accross JVMs and we started multiple Producers and Consumers who would look at the same Jobs instance and add/remove a Job to/from that instance. In effect, we were able to take advantage of multiple nodes by starting up either a Consumer or a Producer, as required, and achieved better performance. In other words, “sharing” enabled us take advantage of multiple machines. So I was hung up on finding out how to share things on GridGain.
After discussing this with Dimitriy, I learned that it would not be correct to look at GridGain from a “sharing” perspective. We should look at it from a “task” perspective…what task can be made a unit of work and can be executed on other machines. In this application, Job.run() is such a task. In Terracotta, we isolated Producers and Consumers, while in GridGain, we isolated Job.run() method.
However, one drawback of this application is that Job.run() is a completely independent task and does not depend on anything. So no sharing or coordination between two JVMs is required. In Terracotta solution we were able to see how such coordination can be done among threads running on multiple machines but our application doesn’t touch this aspect on GridGain. I will try to modify it such that we can see how coordination can be achieved on GridGain. Any suggestions would be welcome!
Another important aspect of GridGain that we haven’t touched upon in this application is how to split a task, execute the parts on multiple nodes, bring back the results, join the results, and return the final output. I think this kind of a situation will take care of our sharing scenario as well.
Later…
1 Comment »
Leave a comment
-
Recent
-
Links
-
Archives
- October 2008 (1)
- January 2008 (1)
- October 2007 (3)
- September 2007 (3)
-
Categories
-
RSS
Entries RSS
Comments RSS
Hi Hanumant,
In GridGain there is a concept of split – a task gets split into multiple jobs for parallel execution. If you need to have synchronization between multiple jobs within the same task, you should use Distributed Grid Task Session. Session object is simply injected into GridTask or GridJob and you are able to set, get, or wait for any attribute/event either synchronously or asynchronously.
Hope this helps.
Best,
Dmitriy Setrakyan
GridGain – Grid Computing Made Simple