The document discusses building distributed systems in a platform agnostic way by limiting the scope of the cluster to only data transport and semantics. This allows components to choose their own frameworks and abstraction without being locked into a particular one. It also describes using elastic partitioning to scale consumers as needed and ensure data locality by assigning partitions based on identifiers, enabling stateful processing of related events on the same worker.
2. source worker2
worker1
worker3
Cluster
The problem: Distributed monolith
All components are bound to the same
stack and framework.
One tightly coupled blob of code distributed
across machines.
Network
Whatever you have here
Must also be here
3. Cluster
source worker2
worker1
worker3
Framework specific protocols
For example, all of the major Actor Model
frameworks and languages have their own
specific homegrown protocols
Erlang OTP, Akka, Akka.NET, MsOrleans,
none of them can talk to eachother using
their own cluster protocols.
Homegrown,
non standard,
framework
specific protocol
Network
4. Cluster
producer
consumer
consumer
consumer
Embracing The Unix Philosophy
What if we instead shrink the responsibility of
the cluster?
Instead of encapsulating everything, including
business logic, we can limit the scope to data
transport and cluster semantics only.
6. source worker2
worker1
worker3
Cluster
producer
Elasticity by partitions
We start out by having a much higher
number of partitions than consumers.
partition
partition
partition
consumer
partition
partition
partition
partition
partition
partition
consumer
consumer