First, our ACM Transactions on Computer Sysms paper will be appearing sometime soon, which should give nice visibility for the work, and also the validation that comes from a tough peer-to-peer reviewing process. The paper has hugely improved through the pushback our reviews provided, so it was a challenge but, I think, worth it. The system itself works really well!
Next, we are starting to focus on a stronger integration with Azure IoT, where Derecho could be used either as a tool for creating new micro-services with strong fault tolerance and consistency guarantees, or as an ultra fast RDMA-capable object store. Microsoft has been supportive of this and Derecho should be available from their third party portal, still as a free and open source technology.
But that portal isn’t available yet. So right now, use Derecho via the v0.9 release of the system, which will be available by February 1 (we are saving v1.0 for later in the year, after we have a reasonable amount of end user experience). As of today, we still have one or two bugs we want to fix before doing that release.
Some key points:
- We are urging people to use the Ubuntu Linux version, because this interoperates between normal Linux environments and Azure (the Microsoft cloud). On our release site (download here), you can find the source code but also some VMs (a container and then a true VM) with the library preinstalled. But in fact Derecho should work on any Linux-compatible system.
- Right now, Derecho has only been tested in a single cluster, cloud (Azure, including Azure IoT, AWS, etc). We have some limited experience with virtualization, and with ROCE as opposed to pure Infiniband.
- The easiest path to using Derecho is via the new key-value store. In this both keys and values can be any serializable object type you like, and we offer a wide range of features: Put and Get, but also a conditional put, which checks that the version you are writing was based on the most current version of the underlying object (useful for atomic replace, like in Zookeeper), plus a watch operation that works just like a topic based pub-sub or DDS. Objects can be stateless, stateful but not versioned, or versioned and persistent with strong consistency and extremely accurate temporal indexing. On this we will eventually support pub-sub (think of Kafka or OpenSplice), file systems (HDFS, Ceph), and maybe even a genuine Zookeeper look-alike. The only caution is that the watch feature isn’t designed to support huge numbers of watched topics. So if you would have more than 50 or 100 active topics, consider using Dr. Multicast to squeeze that set down.
- The full system can only be used directly from our templates library API in C++, but you can easily build a wired-down library with no templated methods and then load it from Java or Python or whatever.
- Runs on RDMA, OMNIPath, and even on normal TCP with no special hardware help at all. You just configure it via a configuration file, to tell the system how to set itself up. We use LibFabrics for this mapping to the underlying hardware.
- Right now, all the Derecho group members need to be on hardware with identical endian and byte alignment policies, but clients not in the group can use RESTful RPC, the OMG DDS stack, WCF or JNI to issue RPCs to Derecho group members, which can then relay the request as appropriate.
Later this year we will extend the system in various ways. The API should stay stable, but the new features would include:
- Hierarchically structured WAN layer that does read-only content mirroring for the object store.
- A form of ultra fast and scalable LAN and WAN BlockChain support.
- Machine checked correctness proofs, and a reference-version of the core Derecho protocols both in a high level form, and as proved and then re-extracted from those proofs in C or C++.
- External client access to our API via RDMA, supporting point-to-point send and query.
- Integration with Matt Milano’s mobile code language, MixT, allowing a client to send code to data residing in the object store.