Hyflow-go keeps remote communication minimal by employing a novel multi-master replication scheme.
We spared no effort to make hyflow-go fast, and we are still working on it.
It is based on commit-time transaction certification. It is flexible and supports Multi-Version Concurrency Control (MVCC) and single-versioning. Can be used to provide either serializability or Extended Update Serializability (EUS), depending on the underlying ordering layer.
Consensus protocols are pluggable. Choose between the partial order protocols such as Alvin POB, M2Paxos or E‑Paxos, and total order protocols like Multi‑Paxos and Raft*. Of course, for distributed systems researchers, rolling your own is always an option.
The lowest layer deals with cluster communication. It is backed by zeromq, nanomsg or mangos. Optimistic batching is used to increase throughput while keeping latency low. Relies on code generation for maximum serialization performance at run-time.
By tracking conflicts between transactions, we can avoid ordering (serializing) non-conflicting transactions. This enhances concurrency and allows transactions to commit earlier. Some non-serializable executions are allowed, but this is not generally a problem in practice.
In the Alvin POB and E-Paxos protocols, each node is in charge of coordinating the transactions originating at that location. This reduces the client perceived latency by one round trip, as transactions don't need to relayed to the global leader for ordering.
In the absence of contention, Alvin POB and E-Paxos can further reduce latency by one round trip by using fast quorums. Fast quorums are larger than classic quorums, so this may not necessarily result in a net improvement for all deployments.
Go is a perfect match for writing research software. It is a high-level language, has low cognitive overhead, compiles fast, has automatic memory management and built-in concurrency. All these allow researchers and developers to focus more on the research problem they're trying to solve, and less on the engineering aspect.
Go is fast! While it is quick to write and feels like a scripting language, Go is strongly typed and compiles to native code. It offers a great level of control over memory layout and allocation. The built-in profiler allows developers to detect and optimize the critical paths in their code.
Go compiles to self-contained, static binaries. Deployment is a matter of copying the executable to the destination machine. There are no virtual machines or other dependencies to setup.
In an earlier implementation, encoding/decoding data for network transmission quickly added up to 100% CPU capacity, limiting performance unnecessarily. After experimenting with a number of options, we decided to rely on code generation for maximum performance. While it adds an additional step at build-time, CPU usage due to serialization is now a non-issue.
To speed up prototyping new transactional and consensus protocols, we implemented a light-weight cluster communication library. This makes common operations quick and easy to write. Cluster dynamics, quorum handling, reply management and timeouts are all seamlessly handled here.
Traditional transports such as TCP and UDP sockets lack a lot of functionality. Instead we use nanomsg-like sockets, which support advanced communication patterns and advanced batching algorithms. We use a pure-Go implementation called mangos.
Theme by BLACKTIE.CO