Easing application scalability across a cluster is a problem being solved in a variety of ways. Terracotta does it with memory – network-attached memory, to be exact. The company’s infrastructure software creates an expandable/retractable pool of shared memory that Java applications can tap to meet increasing demand.
Network-attached memory is analogous to network-attached storage (NAS) in that it provides a service to thousands of connected clients transparently. As NAS is transparent underneath the file system, network-attached memory is transparent underneath the Java language, says Jeff Hartley, vice president of products and marketing at Terracotta. Objects are manipulated and kept consistent in memory like files are in NAS, but in Terracotta’s memory pool, everything can be massively scaled out.
“Another way to think of it is virtualization for the Java environment,” Hartley says. “In the same way that a hypervisor slices a machine into several logical machines, Terracotta takes many physical machines and connects them as one logical machine.”
Developers don’t have to change their applications to get clustering behavior. A clustered application looks the same as a Java application. Essentially, users tell Terracotta what to do in a config file, Hartley says, and the software injects that behavior into the application at runtime. Not only is there is no API required to send messages across the cluster, he says, there is no API at all. Terracotta uses plain old Java objects and plugs into familiar frameworks like Spring, Hibernate and EHcache so developers can continue using the same tools, stacks and development models.
“We provide an open source clustering solution,” says Hartley. “It’s scalability and high availability for Java enterprise apps, without having to change your application code. We actually hook into the Java virtual machine and share data.”
Beside simplified clustering and scalable performance, Hartley says Terracotta’s approach also brings “high availability without tradeoffs” — the possibility of reducing database bottlenecks, achieving better use of hardware, lowering maintenance costs, and, because the software takes care of adding clustering capabilities, focusing on developing new applications rather than retooling old ones.
“We’re working at the level of memory. If you have App Server A die, the user gets sent to App Server B, and all the data is sent from memory to B without the user even realizing it,” Hartley says. “We provide high availability by putting everything in memory instead of adding racks of servers.”
When you add a server to handle demand, it just “joins the group.” “You don’t have to implement anything. Just add the servers and we make them members of the cluster’s shared memory pool. Our server keeps your server’s data in sync,” Hartley says. Changes to one virtual machine are instantaneously reflected to every virtual machine throughout the cluster that needs to know.
Because data can be shared between Java virtual machines and processed at in-memory speeds, some customers use the software to take load off their databases. Transient data like user session info or shopping cart info can be kept and processed in memory, while only critical results are sent to and kept in the database. “Terracotta is used to handle the work-in-progress data while a process is running, and only the completed data goes to the database. As a result, some of our users have been able to reduce database utilization by as much as 70 percent and not have to buy more database licenses to meet increased workload,” Hartley says.
Eliminating mundane work for IT staff is one of Terracotta’s other major selling points. As company CTO Ari Zilka explains in a video tour of the software, “You don’t have to write the plumbing or maintain the plumbing. …You can run an app on two servers at midnight and on 20 servers at noon. It frees IT to run apps the way they need to run them” and focus development time on more important business issues, he says.
Deployment involves two primary components: client nodes and the Terracotta server array. Nodes run on standard Java VMs, and each node corresponds to a Java process in the cluster (e.g., the application server). Terracotta is loaded into each VM at startup. The Terracotta server array provides the intelligence to orchestrate all the nodes in the cluster, synchronize activity between them, replicate data and handle storing data to disk. The array can run in an active-passive pair configuration for high availability that can achieve tens of thousands of requests per second, the company says. Running multiple instances of the Terracotta server in active-passive mode guarantees that a failure won’t compromise the cluster, the company says.
“We’re a very fundamental technology. We’re not a grid solution, we’re not a cloud solution. We’re network-attached memory — distributed memory that sits right below the applications, and can be used for all kinds of things,” explains Hartley.
Customers running Terracotta typically have one thing in common: unpredictable numbers of demanding users. (Zilka used to be chief architect at Walmart.com, so he knows about building infrastructure to deal with traffic spikes of epic proportion.) The user list includes big names familiar with meeting heavy online demand, including Adobe, MapQuest, BBC, Electronic Arts, PartyGaming (PartyPoker.com, etc.), and financial services companies like JP Morgan and Mizuho Securities.
An online multiplayer gaming company that wishes to remain unnamed uses clustered servers to not just host games, but also to coordinate and track player activities. It chose Terracotta as its scale-out solution for several reasons: (1) it works behind the scenes, at byte-code level, providing distributed heap memory across multiple Java VMs; (2) developers can use the standard Java semantics for synchronizing access to shared objects; (3) “impressive horizontal scalability” enabled by just adding more server nodes and not having to use databases and caches to manage shared data; (4) no single point of failure; and (5) it’s open source, so the software doesn’t add to the bottom line and doesn’t require a purchase order to get started.
Mark Turansky, a software architect currently working in the health care industry, has written about his experience using Terracotta. “With enabling software like Terracotta, clustering becomes easy. You’ve still got to design your software to take advantage of parallelism, but the act of running programs in parallel is no longer difficult. …It invisibly and magically clusters your Java classes via configuration,” Turansky writes. “Distributing code and running massively parallel programs used to be difficult. It required complex architectures and expensive application servers. This is accidental complexity. Advances in software development — like Terracotta, GridGain, Spring, and other FOSS [free open source] programs — dramatically reduce if not eliminate the accidental complexity of distributing your programs to a cluster of machines.”
Gnip, a service that aggregates and distributes feeds from sites like Twitter and Digg to users of services like Plaxo, runs its system on Amazon’s EC2 but chose Terracotta for node replication at the memory level. A post on the company’s site explains: “The prospect of just writing our app and thinking of it as a single thing, rather than ‘how does all this state get replicated across n number of nodes’ was soooo appealing.”
Terracotta has just released version 2.7, which the company says is more tightly integrated with frameworks like Spring and Glassfish, and adds better management and visualization features, improved garbage collection and the ability to apply hot patches. It is available for download at www. terracotta.org.