Pure Danger Tech


navigation
home

Terracotta, Ehcache, Hibernate, and more to come

15 Nov 2009

Based on a couple of chance occurrences that have happened in the last week, I’ve come to realize that many people are not aware of the awesome stuff Terracotta has been putting out at a frantic pace in the last six months. (At least, it sure feels frantic to me.)

Going back a bit to the July/August timeframe, we released Terracotta for Hibernate, a clustered Hibernate product that provides a second level cache provider and a monitoring panel inside the Terracotta Developer Console.

We spent all summer with the whole team doing almost nothing but tuning that sucker and we made the cache really fly, putting together some pretty insane read-only numbers and some very good read/write numbers. We also used our own monitoring panel inside the dev console while doing all that tuning and built a lot of great Hibernate and cache stats visibility into it along with the ability to dynamically tune the expiration and eviction settings while you’re running.

An easily overlooked detail of the Hibernate release was that we did a lot of work to make the product easier to integrate than the Terracotta DSO platform has been in the past. Historically, using Terracotta required building a platform-appropriate boot jar that got prepended to your classpath to allow us to do dynamic bytecode instrumentation. We have a bunch of tools that automatically detect when that’s need, build the boot jar, etc but we still see it as a deployment factor that throws people off. With the Hibernate product, we have a new “express” deployment mode that does not require a boot jar. It does currently require a Java agent jar, which you must set on the command line, but at least it is not OS/JDK specific. This allows the Hibernate product to run on more JDKs (like JRockit) and more app servers (like Websphere) than we previously could support.

As a package, Terracotta for Hibernate is a great user-oriented cohesive package and as a release, I was as proud of the outcome of it as anything I’ve ever worked on. We’ve seen a steady and rising interest in it as the word gets out but I still think way too few people are even aware of it.

Right on the heels of that release, in August we announced that Terracotta had acquired Ehcache and hired Greg Luck, the primary developer. Terracotta has had clustered Ehcache integration since Ehcache 1.2 and we have a bunch of customers using it. We have done prototypes of clustering other open source caches but honestly, almost everyone uses Ehcache. However, the integration had never been as clean or as fast as we or our customers wished.

Now that we had the ability to modify some of the internals of Ehcache, we embarked on a brand new clustered store integration. In October we released that Ehache-Terracotta integration along with Ehcache 1.7.0. The new Ehcache Terracotta integration also built on our Hibernate express product development. The Ehcache Terracotta express product requires NO boot jar and NO agent jar. You just add a jar to your classpath, add one line to your Ehcache configuration to tell it where your Terracotta server is, and one line to each cache that is clustered. It is truly the easiest clustered product Terracotta has ever released.

On performance, the Ehcache Terracotta integration builds on the same exact core and libraries that we spent all summer performance testing underneath the Hibernate cache, so it has the same kind of awesome performance.

And just a few days ago, we released the beta version of the Ehcache Console. This is a new commercial product (free to try) that lets you plug in a probe to your existing Ehcache installation (back to Ehcache 1.4) and aggregate one or more cache managers or nodes into a single web console and HTTP/XML/YAML monitor server. If you need to watch the performance of your caches, search the contents of your cache, or remove individual elements from your cache, the console can do those things. If you need to connect to your preferred management and monitoring tools, you can do that through the monitoring API. The beta is out now to try and we’ll continue refining it and taking feedback for a while.

Ehcache Monitoring BETA

So that’s what we’ve released so far in 2009. But we’re not done yet! We have really another exciting announcement coming soon (I’m not sure when exactly). I think people will be excited when they find out….

And other than that announcement we have two more development efforts that will be coming out in the next few months. First, our server team has been hard at work on the Terracotta 3.2 release. This release has more engineering done on the core platform than any release I can remember. We have rebuilt both the server and client side lock managers from the ground up, with an eye towards drastically reduced lock memory footprint, drastically increased performance. In addition to that, we’ve made a ton of improvements to protocols, threading, batching, concurrency, etc. We’re seeing performance results of 5-6x throughput on our Hibernate tests compared to our previous results (which already beat every competitor we tested). In general, anyone using the Terracotta platform should see a boost in performance with Terracotta 3.2.

Second, we’re starting to work on unifying the work that we’ve done on the Terracotta for Hibernate product and the Ehcache Terracotta integration so that they become just one single express product that is only a simple express product with no boot jar or agent jar. Basically, the Ehcache Hibernate provider will start to support Terracotta clustering, and rework the console options to become more consistent between Hibernate and Ehcache. That stuff is 2010 for sure but it’s in the works.

I think we’ve built some amazing stuff this year so I hope this gets the word out a little better! If you are looking to do some kind of clustered caching, we’d love to talk to you. I think we cover a lot of ground, but even if we don’t end up having the perfect solution we’d love to learn what we’re missing and think about what we could do to help.