Just Say No to Paxos Overhead: Replacing Consensus with Network Ordering (2016)
usenix.org
usenix.org
Ironically that is where most of our newer interconnects have their heritage. PCI-e is descendant from Infiniband which in turn is decendant from ServerNet which was developed at Tandem as the internal interconnect for their NonStop systems for the very usecases this paper describes.
i.e the very ordered networking this relies on and the architectures it enables were invented ~25 years ago.
Unfortunately the reality of today is we don't build data centres and especially not for very highly available systems. Instead we pay that latency penalty to build geographically redundant systems using cheap rented virtual hardware from 3rd parties.
This is in part because of how the always on nature of the internet changed the availability requirements for most software (which is now delivered as SaaS) from business hours in 1 timezone to always-on everywhere in the world. It's no longer an excuse for a business critical application to be down because "DC lost power" or some variation of that.
I'm old and grumpy though so whatever, everything old becomes new again eventually.
If you want good guarantees you need determinism.
It was a cool system, with architecture completely alien to the consumer products I work on nowadays, and I kinda miss QNX.
Did you know a gregk?
Here's a history video on busses from ISA to PCIe:
In the early days of all this there was a few competing standards that all had the same underlying architecture, serial, 8b/10b encoding, etc. The 2 big ones were NGIO and FutureIO. These two were eventually merged and was called ServerIO before being renamed to Infiniband.
Infiniband was going to be the next big thing and a few companies set out to make the silicon, Mellanox, QLogic/Silverstorm, Topspin/Cisco among the main ones.
Sun and Microsoft both committed to building the drivers to make this work. However pretty soon MS ran into issues with their drivers and eventually pulled the plug on shipping IB drivers in NT. This caused Cisco to drop IB and eventually doomed IB in the enterprise datacenter space and settled for Ethernet.
Sun pretty much followed suit for standard enterprise data centers but kept working on IB drivers and IB switches for their HPC and storage units. You can still see it kicking around in stuff like Exadata.
Intel is mainly responsible for making PCI-e happen. They had proposed one of the initial standards that became IB, NGIO. When NGIO was fused with FutureIO to create IB the same group renamed it to Arapahoe which was later renamed 3GIO before being renamed to PCI-e when standardized by the PCI SIG. Design wise little changed it just eschewed some of the switching complexity and focused on being an internal system interconnect.
So in many ways it's not quite PCI-e is descendant from IB but rather PCI-e -is- IB lol.
The actual final result was a shambles and couldn't remotely achieve the desired availability level. For example, mirrored or synchronized systems are more difficult to update by their very nature. They're also highly constrained physically, such as having to have physical proximity. They're so expensive that the org couldn't afford enough of them to provide dev/test/staging etc... environments. They were also already out-of-date and barely supported, because upgrading every 5 years was also too expensive.
My $0.02 was that modern development practices of highly redundant but ordinary commodity servers would have been both far cheaper and far more robust in practice.
Mind you, that specific case had a particularly schizophrenic architecture: They decided they wanted a Tier-1 data centre for availability, but their core application couldn't tolerate the latency increase. So they used Citrix to paper over this, but Citrix is complex and has many moving parts prone to failure. They also wanted security, so they tunnelled everything over the various WAN links. They would have been better off just leaving the servers in the same building as the call centre: no long distance links to break, no need for SSL gateways, no need for fibre rings or router failover, etc...
My method would have been to have two call centres, each with local compute. Much simpler, fewer things to break, and truly highly available.
Time sharing and partitioning were big deals in Big Iron, and here we are piling little iron into heaps and having the same set of problems.
To a consumer of one of these systems, you can make the batched processing occur so quickly as to seem real-time in nature, while still realizing most of the low-level CPU architecture benefits of doing things in reasonably-sized chunks.
There are benefits to doing it the old-school way too (i.e. nightly). Giving the business ample time to respond to errors before EOD processing is a huge perk in many industries where the downstream consequences of errors cannot be reconciled. Real-time processing is wonderful, but there are still a lot of places where you don't really need it or where it causes more harm than good.
Reminds me of AWS' contrasting approach (reliable delivery, out-of-order messages) in dealing with the latency penalty using specialized hardware and a proprietary transport protocol viz. SRD (Scalable Reliable Datagram): https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=916...
> They aren't wrong but they are basically just digging up the Tandem architecture and adapting it to the current RoCE/FCoE enhanced ethernet we have today.
Pat Helland, who worked on Tandem, published a paper on a novel way to avoid distributed transactions, which I believe is similar to Google Megastore's design (on top of BigTable) and seems (to my untrained eye) spiritually closer to Cloudflare's Durable Objects: https://queue.acm.org/detail.cfm?id=3025012
This solution actually just shunts the problem to a different layer. To be robust to sequencer failure and rollover, you will need to rely on an inner consensus protocol to choose sequencers. Which is basically how Multi-Paxos, Raft, etc work--you use the costly consensus protocol to pick a leader, and thereafter simply rely on the leader to serialize and ensure consistency.
It seems like an interesting paper w/ a novel engineering model and useful proofs. But from an abstract algorithmic perspective it doesn't actually offer anything new, AFAICT. There are an infinite number of ways to shuffle things around to minimize the components and data paths directly reliant on the consensus protocol. None obviate the need for an underlying consensus protocol, absent problems where invariants can be maintained independently.
https://vadosware.io/post/paxosmon-gotta-concensus-them-all
Unfortunately there are a few I'm missing and I haven't had time to update that post or make a new one -- I haven't had time to read these and try to fit them in the narrative:
- Compartmentalized Paxos (https://mwhittaker.github.io/publications/compartmentalized_...)
- Matchmaker Paxos (https://mwhittaker.github.io/publications/matchmaker_paxos.p...)
- PigPaxos (https://arxiv.org/abs/2003.07760)
- Lineraizable Quorum reads in Paxos (https://www.usenix.org/system/files/hotstorage19-paper-chara...)
I’m just not sure how you would sequence requests in a typical setup, with Clos fabrics everywhere, possibly when your redundancy group is spread across different geographical locations. Wouldn’t you need some kind of queue to reorder messages? That queue could get large, and quickly.
Paxos and Raft have the advantage of being simple and easy to understand. (Not necessarily easy to incorporate into system designs, sure, and the resulting systems can be fairly complicated, but Paxos and Raft themselves are simple enough to fit on notecards.)
You choose a single spine switch to carry the multicast messages destined to the process group. The paper also explicitly notes that different process groups need not to share the sequencer.
>when your redundancy group is spread across different geographical locations
The paper applicability is limited to data center networks with programmable network switching hardware.
> when your redundancy group is spread across different geographical locations
I think 99% of the time this is just a bad idea, unless the thing you're accessing is already strongly consistent somehow. If a service has to be accessible across regions, there's potentially a million reasons for the service to be loosely coupled across those regions besides the availability issues.
Having read replicas in several locations makes it easier to stand up a new master if your main data center catches fire (OVH)
I bet public clouds could offer this as a specialized 'ordered multicast vnet' infrastructure primitive to build intra-dc replicated systems on top of.
If there's already an ordering system in place, directly or indirectly, why not use it?
hilarious.
And it the last thing too because I closed the page. Could people just stop with this nonsense.
I suspect you were reacting to decentralized consensus (blockchains) which is a pretty different space.