Skip to content

No Silver Bus

I never liked gRPC.

Inter-service communication in microservices has arrived here without ever finding the right answer. REST is verbose. gRPC drags Protobuf management along with it. Message queues bring async complexity. I once built a pipeline streaming events into Kinesis and pulling them out with Lambda. The discomfort of vendor lock-in was always there.

But the hard part is not the transport. It is the transaction.

Consider what a database does to guarantee ACID. WAL. MVCC. Two-phase commit. Deadlock detection. Decades of refinement running close to the kernel. Controlling the exact timing of a single fsync to disk. Only then does consistency hold.

Now we try to reproduce that over HTTP, across services, with all the uncertainty of the network baked in. Saga patterns. Compensating transactions. Eventual consistency. Every one of these starts from the same premise: give up on full consistency. The thing databases protect with their lives at the physical layer, we attempt to recreate at the application layer with retries and events. I think the premise itself is broken.

Some say do not split services where transactions must span boundaries. But cut along domain lines and you will end up there anyway. An e-commerce system where orders, inventory, and payments live in separate services. Textbook case.

The silver bullet has not been found yet.