ABC Arbitrage is a finance company specialized in automated trading since 1995. Due to the growth and success of our company over the past years, we are currently expanding our software engineering team. Our teams constantly look for new technologies and apply the best fitted tools for our needs as a result of the competitiveness of the automated trading business.
I joined the team in January 2012 as a software engineer and am now in charge of the infrastructure for our .Net services.
At the time we considered Cassandra we were using SQL Server and Redis, but they were not appropriate for upcoming projects requiring high throughput and resilience. We compared Hazelcast, Riak and Cassandra and the latter showed better performance and seemed more mature; this oriented our choice towards it.
Our main selling point was the high availability offered by Cassandra because we couldn’t afford to stop trading if we had a maintenance or hardware failure. Also, the way Cassandra stores data makes it ideal for time series storage / querying, a pattern that is met quite often in finance.
We use Cassandra for multiple applications ranging from the monitoring of our servers to the storage of real time risk data. We also use it as a persistence service for our in house P2P Enterprise Service Bus (soon to be open sourced).
The first deployed version was 1.1.5. We then updated to 1.2 in January 2013 and are planning on updating to 2.0 very soon.
Our deployment is relatively modest compared to the likes of Netflix. We currently have three data centers (two in Europe and one in the US) with three nodes in each. We are planning on adding a data center in Asia in the coming months. Our cluster contains about 300Gb of data per node for a total amount of 2.7Tb (out of 38).
Cassandra is a tool that allows you to build great applications. Even though it has become more accessible with CQL, it is important to understand the way it works under the hood in order to use it properly. For users with little experience, they risk using anti-patterns like “read before write” or “queues”.