architecture

  • Replication lag is a symptom, not a metric

    Seconds_Behind_Master is the number everyone alerts on and it measures one thing: how far behind the applying thread is on the transaction it is currently executing. It reads…

  • Swarm mode is in the engine and mostly unused

    Since 1.12 the engine has had orchestration built in — docker swarm init and a cluster exists. It is genuinely simple and almost nobody is running it, which…

  • Context mapping before service boundaries

    Deciding services first and then discovering the relationships produces boundaries that cut through a transaction. Mapping the relationships first tells you which splits are cheap and which are…

  • The REST API in core, and the plugin it replaces

    4.7 shipped the content endpoints. What moving off the feature plugin involves, why authentication is still the unsolved half, and the read API every site now exposes.

  • Queues, workers and the jobs that fail twice

    The email that arrived four times and the charge that arrived twice. What makes a job safe to run again, and keeping workers alive without them serving stale…

  • CQRS is two models, not two databases

    The pattern gets introduced alongside event sourcing, separate stores and eventual consistency, which makes it look like an architecture. The idea underneath is smaller: the shape that is…

  • Extracting a service without a rewrite

    The reporting code had one caller and a six-hour test run. Finding the seam, dealing with the shared schema honestly, and routing traffic gradually rather than switching.

  • Idempotency keys are what make a retry safe

    A client that times out cannot tell whether the request was processed. Retrying risks a double charge; not retrying risks losing the order. The only way out is…

  • Redis beyond caching: locks, counters and rate limits

    The cache server was already there doing one job out of four. A lock that expires, a release that checks it still owns the lock, and a sliding-window…

  • The container binds interfaces, not only concrete classes

    The container resolves concrete classes automatically, which is convenient enough that most code type-hints the concrete class and the abstraction never happens. Contextual binding is the part worth…