Skip to content
Peter Cline edited this page Feb 25, 2014 · 16 revisions

Sirius is a library for distributing and coordinating data updates amongst a cluster of nodes. It handles building an absolute ordering for updates that arrive in the cluster, ensuring that all nodes are in sync, and persisting the updates on each node. These updates are generally used to build in-memory data structures on each node, allowing applications using Sirius to have direct access to native data structures representing up-to-date data. Sirius does not, however, build these data structures itself -- instead, the client application supplies a callback handler, which allows developers using Sirius to build whatever structures are most appropriate for their application.

Said another way: Sirius enables a cluster of nodes to keep developer-controlled in-memory data structures in sync and up-to-date, allowing I/O-free access to shared information.


Sirius uses the Multi-Paxos algorithm to order the updates and to generate consensus within the cluster. Along with Multi-Paxos Sirius uses a catch-up algorithm to achieve eventual consistency across the cluster. A Sirius cluster is able to tolerate ceil(n/2 - 1) (where n is the number of nodes in a cluster) of concurrently failing nodes in a cluster and still continue to function. Once beyond this failure threshold, no updates to the datastore can be accepted until the number of failing nodes is back to or under the threshold.

After an update has been ordered by Sirius it is added to the persistent storage in a transaction log and applied to the in memory state as defined by the application. Sirius comes with an implementation of the transaction log that is useful in many use cases. There is also a reference application that will be a useful reference in creating your own applications.

The state maintained by Sirius can be queried by submitting a request similar to that for updates. The main difference is that this request is executed locally and does not need to be distributed. This local query provides high performance reads of the in-memory state, as all nodes in the cluster have copies of the entire state.

Sirius is intended to provide a means to replicate in-memory state consistently across a cluster. The main use case for Sirius is to provide high volume and high performance reads to a set of reference data that is replicated to a cluster of application computers, where the volume of writes is significantly smaller than the number of reads. Sirius itself is a flexible library and it has a number of other use cases.

#Next steps For a hands-on guide to setting up a basic Sirius cluster, we recommend reading the "Getting started with Sirius" page. The details for Sirius configuration are on the "Configuring Sirius" page. Advanced deployment details are in the "How to deploy Sirius" page. For those who wish to delve into the technical details of the system the "How Sirius works" page is the starting point for exploring the internal details.