Tracks·Backend & systems·53 terms
Backend
Servers, storage and the failures between them, in the order the vocabulary becomes load-bearing.
Read in order · tick what you already know
- 01
you fetch a list of fifty orders and then the ORM quietly issues fifty more queries, one per order, to load the customer.
N+1 queryBackend
- 02
the bug only shows up under load, never in tests, and the outcome depends on which of two threads got there first.
Race conditionBackend
- 03
you changed the row and now you have to hunt down every cached copy of it before someone reads the old one.
Cache invalidationBackend
- 04
the dependency got slow, everything retried, and the extra load is now the reason it cannot recover.
Retry stormBackend
- 05
the replica is forty seconds behind the primary and the report you generated from it is missing this morning's orders.
Replication lagBackend
- 06
the test fails one run in twenty, everyone reruns CI until it goes green, and the suite stops meaning anything.
Flaky testBackend
- 07
you measure the delay before the work starts moving, separately from how long the work itself takes.
LatencyBackend
- 08
you measure how many requests the system finishes per second, which is a different question from how long any one of them takes.
ThroughputBackend
- 09
the median request is 40ms, the 99th percentile is four seconds, and every page that fans out to ten services hits it.
Tail latencyBackend
- 10
you add three more identical instances behind the load balancer instead of making the existing one bigger.
Horizontal scalingBackend
- 11
one address takes all the traffic and spreads it across the instances, skipping the ones failing their health check.
Load balancerBackend
- 12
you reuse a fixed set of open database connections instead of paying the handshake on every query.
Connection poolBackend
- 13
you put one component in front of all the services to do auth, rate limiting and routing once instead of in each of them.
API gatewayBackend
- 14
you cap each client at a hundred requests a minute and start returning 429 once they go over.
Rate limitingBackend
- 15
your queries touch a handful of rows by key, thousands of times a second, and each one has to come back in milliseconds.
OLTPBackend
- 16
your query reads three columns across two billion rows and nobody minds if it takes forty seconds.
OLAPBackend
- 17
you store the customer's address in exactly one table so that changing it cannot leave four stale copies behind.
NormalisationBackend
- 18
you copy the customer's name into the orders table so the list page stops doing a join on every render.
DenormalisationBackend
- 19
you have to change the shape of a table that is being read and written right now, without stopping either.
Schema migrationBackend
- 20
you read a value another transaction had written but not committed, and then it rolled back and the value never existed.
Dirty readBackend
- 21
you read the row with its version, write it back only if the version has not changed, and retry the whole thing if it has.
Optimistic lockingBackend
- 22
you take a lock on the row up front with SELECT FOR UPDATE, so everyone else waits until your transaction ends.
Pessimistic lockingBackend
- 23
two transactions each hold a lock the other one needs and both sit there until the database kills one of them.
DeadlockBackend
- 24
you check the cache, miss, go and read the database yourself, and write the value back before you return it.
Cache-asideBackend
- 25
you let the cached value expire after a fixed number of seconds instead of trying to work out exactly when it stopped being true.
Time to liveBackend
- 26
the popular key expired and ten thousand requests all missed at the same instant and went straight through to the database.
Cache stampedeBackend
- 27
you point the reporting queries at a copy of the database so they stop competing with checkout traffic.
Read replicaBackend
- 28
one database stopped being enough, so you split the rows across several of them and now every query has to know which one to ask.
ShardingBackend
- 29
the network between your two datacentres broke and you had to decide whether to refuse writes or accept divergence.
CAP theoremBackend
- 30
every read is guaranteed to see the most recent committed write, so you never have to explain why the value went backwards.
Strong consistencyBackend
- 31
you write to one node, read from another a moment later, get the old value, and it is correct a second after that.
Eventual consistencyBackend
- 32
you push the slow job onto a queue and return to the user immediately, and a worker picks it up whenever it can.
Message queueBackend
- 33
you publish the event once and three different services each get their own copy without the publisher knowing they exist.
Publish-subscribeBackend
- 34
the worker processed the message, crashed before acknowledging it, and the queue handed the same message to somebody else.
At-least-once deliveryBackend
- 35
you can safely run the same operation five times and the system ends up in exactly the state it would after one.
IdempotentBackend
- 36
the client sends a unique id with the payment request so that retrying it cannot charge the card twice.
Idempotency keyBackend
- 37
the message failed five times so it gets moved somewhere else, instead of blocking the queue forever by being retried in a loop.
Dead letter queueBackend
- 38
the consumer tells the producer to slow down rather than silently buffering work it cannot keep up with.
BackpressureBackend
- 39
you give up on the call after two seconds instead of holding the thread open until the other side eventually answers or does not.
TimeoutBackend
- 40
after enough consecutive failures you stop calling the provider at all for a while, instead of queueing thousands of doomed requests behind a dead dependency.
Circuit breakerAI
- 41
the provider went down and users got a cached answer or an honest error, because you decided that in design rather than at 3am.
Graceful degradationAI
- 42
you trace the dependency graph and find one component whose failure takes everything else down with it.
Single point of failureBackend
- 43
you ship the code turned off, switch it on for yourself, then for one percent, then for everyone.
Feature flagBackend
- 44
you put the new build on the servers, which is a completely separate event from anybody actually using the new behaviour.
DeploymentBackend
- 45
you flip the flag and users start getting the new behaviour, on code that has already been running in production for a week.
ReleaseBackend
- 46
the deploy broke something so you put the previous version back rather than trying to fix forward under pressure.
RollbackBackend
- 47
you record a number over time so you can see the shape of the whole system at once without reading a single log line.
MetricBackend
- 48
you log an object with named fields instead of a sentence, so you can query on user id rather than grep for it.
Structured loggingBackend
- 49
you generate one id at the edge and stamp it on every log line the request produces anywhere in the system.
Correlation IDBackend
- 50
you follow one slow request across six services and see exactly which hop ate eight hundred milliseconds.
Distributed tracingBackend
- 51
you put latency, traffic, errors and saturation on one dashboard and stop trying to look at ninety graphs.
Golden signalsBackend
- 52
you commit internally to 99.9 percent of requests succeeding over 30 days, and you now have a number that says when to stop shipping features.
Service level objectiveBackend
- 53
you write up what happened focusing on why the system allowed it, not on who typed the command.
Blameless postmortemBackend