proomt

Search

Search posts, papers, and topics

All posts

Atomic ObjectVlad Surganov14 min readadvanced

Concurrency Control: Your Aggregate Is Single-Threaded. Your Cluster Isn’t.

Summary

This article distinguishes between serialization (preventing concurrent access) and arbitration (permitting access and rejecting losers) in distributed concurrency control. It argues that arbitration should be responsible for correctness, as serialization guarantees are conditional and can fail silently in multi-process environments, leading to data corruption.

  • Arbitration is total and holds under network partitions; serialization is conditional and can evaporate.
  • Assign correctness to the arbiter and performance to the serializer to build robust distributed systems.
  • Database advisory locks can serialize commands per entity cluster-wide, but they serve performance, not correctness.
  • Deriving entity IDs from natural keys converts coordination problems into naming problems, solvable without coordination.

Engineers building distributed systems must understand the fundamental difference between arbitration and serialization to prevent subtle data corruption issues that only appear in multi-replica production environments.

7/10

Related reading

  1. How Uber Protects Against Retry Storms

    Uber developed a context-aware mechanism to prevent retry storms in deep microservice dependency chains. It introduces "error ownership" where services claim errors they originate and unclaim errors they propagate, allowing upstream callers to make informed retry decisions and avoid amplifying load on already struggling services.

    Hacker News front pageuber.com12 minHN11949
  2. Worker Backpressure (Part 1)

    Canva added a lightweight, local backpressure loop to its queue worker library that monitors per‑message success/failure, computes a backoff factor against a configurable failure‑rate set‑point, and throttles the worker’s concurrency. In two real incidents the mechanism kept failure rates under 2 % fleet‑wide, limited DLQ growth to a handful of messages, and maintained throughput without manual i…

    Canvacanva.dev10 min
  3. Textbook review: Is Parallel Programming Hard, And, If So, What Can You Do About It?

    A detailed, personal review of Paul McKenney’s free online textbook on parallel programming. The author, coming from a TLA⁺/distributed‑systems background, finds the early chapters excellent for building intuition about CPU caches, memory ordering, and false‑sharing, but notes gaps (e.g., shallow coverage of C++11 atomics and MESI). The review is concrete, cites specific chapters, and offers prac…

    Lobstersahelwer.ca8 minlobste.rs21
  4. Microservices vs Monolithic Architecture: What Nobody Tells You Until You've Lived Through Both

    The article walks through the hidden costs of both monoliths and microservices, showing that the choice isn’t about hype but about concrete trade‑offs like deployment coordination, observability, data consistency, and team structure. It recommends a modular monolith as a pragmatic middle ground when the organization isn’t ready for full service sprawl.

    SitePointsitepoint.com9 min