views:

1529

answers:

7

I've never used distributed caches/DHTs like memcached, jboss cache, ehcache, etc. I'm wondering which, if any, is appropriate for my use.

First, I'm not doing web applications (as most of these project seem to be geared towards web apps). I write servers (Order Management Systems actually) for financial trading firms. The servers themselves are not too complicated. They need to receive information (market data, orders, executions, etc.) rout them to their destination while possibly transforming some of these messages.

I am looking at these products to solve the following problems:

  • Safe repository of the state of the server. I'd rather build the logic of my application as a bunch of transformers (similar to Apache Camel) and store the state in a 'safe' place

  • This repository should be distributed: in case one of these data stores crashes, one or two more should be up and I should be able to switch to them seamlessly

  • This repository should be fast. Single digits milliseconds count here, in other words, systems which consume/process this data are automated systems, not humans clicking on links. This system needs to have high-throughput and low latency. By sending my data outside the process, I am necessarily slowing performance, but I am trying to balance absolute raw speed and absolute protection of data.

  • This repository should be safe. Similar to the point about several on-line backups, this system needs to write data to disk (potentially more than one disk).

I'd really like to stop writing my own 'transaction servers.' Am I correct to be looking into projects such as jboss cache, ehcache, etc.?

Thanks

+3  A: 

A lot of financial institutions are using Oracle Coherence for this.

It won't match all the points on your list though.

Fortyrunner
+3  A: 

I believe, JBoss Cache is a good enough for your purposes:

  • fast
  • distributed
  • transactional with MVCC implementation (no read locking)
  • supports JTA
  • supports asynchronous mode
  • eviction data to persistent storage (jdbc, bdb, etc)
Andrey Vityuk
+4  A: 

Is this what Terracotta is for?

Andrew Swan
I'll take another look at Terracotta. Thanks Andrew, Andrey and Fortyrunner.
Shahbaz
+1  A: 

You can also use NCache Enterprise, which is a distributed caching solution for both Java and .NET. It gives you scalable performance through data partitioning and performance through replication. NCache Enterprise is feature-rich program that lets you use other important features like expiration, eviction , database sync and many more.

james
+1  A: 

Hazelcast is an open source, transactional, distributed caching solution for Java. Good fit for financial applications. It is released under Apache license.

Hazelcast is actually a little more than a distributed cache; it is distributed implementation of queue, topic, map, multimap, lock, executor service for Java.

Talip Ozturk
+2  A: 

You have some good free solutions here. However if you need a faster solution, you could try 29 West or Solace which have sub-100 micro-second latency relaible/guarenteed messaging solutions.

Peter Lawrey
A: 

I'll suggest NCache because of the following reasons,

  • Support .NET and java
  • Wide range of topologies
  • No code change required
  • Highly distributed and scalable
  • Absolutely Free (NCache Express)
Timmy