-
Notifications
You must be signed in to change notification settings - Fork 49
Home
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.
Copyright 2013-2017 Comcast Cable Communications Management, LLC
Using Sirius
Getting started with Sirius
Configuring Sirius
How to Deploy Sirius
Reference Applications
Migrations and Release Notes
Migration Guide 1.1.x to 1.2.x
Release Notes 2.0.0
Migration Guide 1.2.x to 2.0.x
Developing Sirius
Getting Started
Contributing Guildelines
License
Releasing Sirius
Scaladocs
Test Timeout Failures
Transaction Log
Implementation
Live Compaction
waltool
Other