One actor is no actor. Actors come in systems.
In the spirit of famed computer scientist Carl Hewitt:1 one microservice is no microservice. Microservices come in systems.
Like humans, microservices are autonomous and therefore need to communicate and collaborate with others to solve problems. And as with humans, it is in the collaboration with others that the most interesting opportunities and challenging problems arise.
What’s difficult in microservices design is not creating the individual services themselves, but managing the space between the services. We need to dig deeper into the study of systems of services.
What is not surrounded by uncertainty cannot be the truth.
As soon as we exit the boundary of the single-service instance, we enter a wild ocean of nondeterminism—the world of distributed systems—in which systems fail in the most spectacular and intricate ways; where information becomes lost, reordered, and garbled; and where failure detection is a guessing game.
It sounds like a scary world.2 But it is also the world that gives us solutions for resilience, elasticity, and isolation, among others. What we need is better tools to not just survive, but to thrive in the barren land of distributed systems.
The contents of a message are always from the past! They are never “now.”
When it comes to distributed systems, one constraint ...