André Roaldseth
Developer at NAV
Services and datasets can be deployed and scaled independently
Companies are a collection of
services which must work together
Each context usually depends
one or more external dataset.
F.ex. Orders need Customer data.
Distributed Join Problem *
* Hard even for databases
More coupling
Divergence over time
Buffering, handling failure, backpressure, scaling, etc. get pushed into service’s responsibilities
The synchronous world of Request/Response protocols leads to tight, point-to-point couplings.
Encapsulation encourages us to hide data as it
decouple services. But we also want to slice and dice shared data.
Data systems do not encapsulate,
they expose as much as possible,
nor do they manage complexity very well.
Data systems are about exposing data.
Services are about hiding it.
- Ben Stopford
Synchronous Request-Response = high coupling
No history = divergence
Concentration
Single Point of Failure
Coordination
Is it data?
We need encapsulation so we don’t expose a service’s internal state.
But we need to make it easy for services to get access to shared data so they can get on and do their jobs.
* Even the version
Centralize an immutable stream of facts.
Decentralize the freedom to act, adapt and change.
- Ben Stopford
By André Roaldseth