Collaboration: At the Extremities of Extreme
Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Gavin Terrill on Aug 28, 2008
Greg Luck, of the EhCache team, announced in early August the availability of SOAP and RESTful APIs for caching. As described in the documentation:
Ehcache now comes with a Cache Server, available as a WAR for most web containers, or as a standalone server. The Cache Server has two APIs: RESTful resource oriented, and SOAP. Both support clients in any programming language.
In a follow up post, Greg outlines his thoughts on deployment options for a theoretical 1 terabyte cache:
The largest ehcache single instances run at around 20GB in memory. The largest disk stores run at 100Gb each. Add nodes together, with cache data partitioned across them, to get larger sizes. 50 nodes at 20GB gets you to 1 Terabyte.
The first, and simplest, approach involves setting up several nodes running ehcache server and have the client determine the server to use based on an object's hashcode:
String[] cacheservers = new String[]{"cacheserver0.company.com", "cacheserver1.company.com", "cacheserver2.company.com", "cacheserver3.company.com", "cacheserver4.company.com", "cacheserver5.company.com"};
Object key = "123231";
int hash = Math.abs(key.hashCode());
int cacheserverIndex = hash % cacheservers.length;
String cacheserver =cacheservers[cacheserverIndex];
To support redundancy, a load balancer is introduced, and each node runs two ehcache server instances, with replication between them enabled using the existing distributed caching options (RMI or JGroups). In this approach, clients would still determine their servers using the hashcode, but now failures are handled transparently behind the virtual IP assigned by the load balancer.
The third option Greg describes involves moving the responsibility for routing requests to the load balancer.
The RESTful version of the EhCache Server is based on Jersey - the JSR 311 reference implementation. Paul Sandoz, one of the Jersey developers, discussed how the client API of jersey could be used to access the cache for creating and retrieving a sample XML document:
// retrieving a node
Node n = r.accept("application/xml").get(DOMSource.class).getNode();
// creating a node
String xmlDocument = "...";
Client c = Client.create();
WebResource r = c.resource(http://localhost:8080/ehcache/rest/sampleCache2/2);
r.type("application/xml").put(xmlDocument);
So, in what scenarios would a RESTful cache be useful? James Webster reports on seeing an increase in adoption of this architectural style in large enterprises:
An architectural pattern that I have observed a few investment banks implement is a distributed memory cache accessed via a RESTful front-end over HTTP for providing access to market data (e.g.. stock prices, interest rate curves, or derived values like volatility surfaces & correlations) and static data (e.g. counterparty details, settlement defaults). The distributed cache can be ‘easily’ scaled to hold massive data sets and the front-end allows the data to be accessed in a technology agnostic fashion, as long as the client can speak HTTP.
As James points out, it will be interesting to see how long it will take commercial vendors (such as Oracle and Gigaspaces) to support RESTful interfaces in their products.
Free Gartner Cloud Service Brokerage Report
Monitor your Production Java App - includes JMX! Low Overhead - Free download
Using Drools? See what you're missing! Get the Power of Drools with the Assurance of Red Hat
Improve Java Garbage Collection, Runtime Execution, and JVM visibility with Zing
int hash = Math.abs(key.hashCode());
is not always positive.
www.blogger.com/comment.g?blogID=33967480&p...
Why would venders like Oracle or Gigaspaces want to expose caching via SOAP or REST? Caching is not a service; exposing such a 'service' enterprise wide would only lead to problems down the road.
Best Regards,
Richard L. Burton III
They are not saying that caching would be provided as a service by Oracle or Gigaspaces. They are merely pointing out that the services that are provided by these vendors might have RESTful APIs for their clients, in the future. RTFA!
Carlos
Caching is not a service
Mark Nottingham's "Leveraging the Web for Services at Yahoo!" talk (QCon London 2007) challenged my idea of what caching could be used for. He explains how HTTP-based caching using Squid has been used to integrate the many Yahoo! properties.exposing such a 'service' enterprise wide would only lead to problems down the road
I'd be interested in hearing about the problems you foresee.
I second Gavin's request - what's wrong with caching as a service?
Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.
Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).
Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.
Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.
One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.
InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.
Alex Papadimoulis discusses ugly code, where it comes from, how to avoid it, and how to get rid of it.
John Davies examines Visa’s architecture and shows how enterprises have architected complex integrations incorporating Hadoop, memcached, Ruby on Rails, and others to deliver innovative solutions.
6 comments
Watch Thread Reply