« When to Use HA-JDBC | Main | Object Identity, Tradition and DSO - Part 1 »
August 17, 2005
History of Terracotta Virtualization Server
posted by ari
Terracotta is all about Java--
We share data and coordinate that sharing. With just the JDK, nothing new to learn, no new code to edit, and no APIs to navigate. You could say we've got serious POJO MOJO. And, I am really excited about where we plan to take this technology. Terracotta has a vision for what I call the ultimate in runtime control--a topic for another time. How did we come across this view? This approach?
History
Orion Letizi, Tim Eck and I worked together on the world's largest retailer’s (read: hundreds of millions of transactions per day) Internet site. We focused on developing tools that other great teams alongside us used to solve business problems. Our customers were those teams of engineers (developers and operators). They used our products and tools because the tools were purported to have addressed operational needs around availability and scalability with minimal impact to the developer's code. However, this was just not the case. We had API's, just like every one of Terracotta's competitors. And no matter how carefully designed, the API always failed to address one team or another's view of
It quite honestly took our leaving that company and clearing our heads before the light bulb went off. After a few months of rest, with no production system to help maintain, we had come to a key realization: there are design approaches and tools for solving
So, we decided to create Java software that could be invisible, drop-in and transparent. State of the art solutions designed to address operational needs weren’t working. We had tried re-writing the apps and APIs alongside business developers, app by app, and that was too expensive. We decided that we needed to laser focus on the root cause of operational pain--I/O bottlenecks and the associated availability and scalability challenges those bottlenecks pose at runtime. We then worked backwards from the pain to the design patterns that cause that pain (OR impedance mismatch, clustered HTTP session, message-based apps). And we landed on the conclusion that it was truly an application agnostic opportunity.
So Here We Are... Today
We have about four production customers and many labs out there, where we are solving real operational problems. The customer app team meets us in their own lab and we fix the applications right there, together, on the fly.
Terracotta is focusing on Java clustering and caching and the associated I/O challenges. Our Terracotta Virtualization Server (TVS) makes both development and product operations easier. We view the challenge of clustered I/O as a logical “T”, that addresses both horizontal and vertical I/O.
On the horizontal, we are talking about conversations between app servers. Virtualization in the horizontal axis means not having to know how many copies of the app are deployed; virtualizing the VM boundaries with our DSO product. DSO is our clustering component of TVS and allows several JVMs to appear and act like one.
Virtualization in the vertical axis means not worrying as much about the scalability of the SoR and definitely not having to scale the system of record with the number of app servers in the horizontal axis. Our HA-JDBC product caches the data and allows the JVMs to share the cache. HA-JDBC is all about transparency, clustering, and caching, just like DSO.
Today, clustered caching is no longer sufficient. We hear it all the time: the effort of altering the pure business logic for clustering far outweighs the benefits. We have addressed the need that is out there in the Enterprise with our clustering solution. Tomorrow, we promise to stay ahead of the curve by leveraging our industry-lead in transparency to solve other problems of unnecessary complexity (imagine a completely transparent OR-mapper that hides Hibernate completely from the code base...it will take a marriage of our DSO and HA-JDBC products to deliver, but we know we can do it). Check out the evaluation copy of TVS on our web site and experience transparent clustering for yourself.
I encourage you to keep checking back weekly as I dive into more technical Java issues and related topics. Please drop me a line at blog@terracottatech.com with questions and suggested topics. If we use your topic, you will get an awesome POJO MOJO t-shirt (and maybe I will even answer a few questions).
Kewl.
--Ari
Comments
I'm interested in the interaction between the cache & garbage collection. For example, an OODB can function as a cache, but there are serious garbage collection isssues as it is easy to produce persistent garbage. On a related note, could you compare you system with something like GemStone/J?
Its good to see some people working on this stuff who have dealt with large problems.
Thanks,
Blaine
Posted by: Blaine Wishart at August 22, 2005 11:51 AM
Blaine,
All good questions. Garbage collection for TVS piggy-backs on native garbage collection. Indulge me this over-simplification but essentially when an object is reapable on all VMs, it is reaped in TVS as well. So, if you have a memory leak in your application, TVS will let you survive till you find it by virtualizing the heap space and paging out things your app actually doesn't access in favor of more immediate memory needs. And, TVS will soon allow you to view objects in our server by number of accesses per second (hotness, if you will) so you might even be able to determine your leaks by viewing the objects that have paged out to the TVS server and never page back to any VM.
Gemstone/J...I wish I knew more about it, but I believe it is less transparent that TVS and it is focused on a "pages of memory" model wherein you get a reference to a page of shared memory and anything you change in that page is pushed, at the 4KB page level to the server and any VM that accesses the page gets a write lock while multiple VMs can have a read lock. Not piggybacking on the VM as much as just an elegant way to proxy fine grained and nearly transparent clustering.
DSO, on the other hand, is hooked into the JVM at a field level as a natural extension of the memory model itself. When things change and are safely made available across threads in one VM, the same becomes true under TVS across multiple VMs. DSO is literally "code to 1 VM, deploy to many" whereas I think Gemstone/J is an approximation of the same.
Posted by: Ari Zilka at August 23, 2005 8:02 PM