System Design
Everything on CoreConcept tagged with System Design. Explore related tags below.
Related tags
Courses
Learn how to design scalable, reliable, and maintainable systems — from single servers to distributed architectures used by millions of users.
Articles
As relational databases grow beyond millions to billions of rows, single-table query performance degrades due to massive B-Tree index sizes and memory swapping.…
Decoupling microservices using Event-Driven Architecture (EDA) requires choosing an asynchronous messaging backbone. Engineers evaluate three distinct messaging…
In high-concurrency microservices architectures, preventing race conditions when multiple stateless worker instances access shared resources requires Distribute…
At the heart of every database system lies a Storage Engine that determines how data is written to disk, indexed, and retrieved. Relational databases like Postg…
Rate Limiting is a critical defense mechanism for production APIs, protecting downstream microservices from traffic spikes, denial-of-service (DoS) attacks, and…
System design interviews evaluate a candidate's ability to architect scalable, resilient, and cost-effective distributed systems under real-world constraints. S…
In-memory caching is an essential component of high-throughput web architectures, reducing database read load and accelerating API response times. When selectin…
Selecting the right primary database is one of the most critical architectural decisions for software teams. PostgreSQL is the world's most advanced open-source…
A product manager says PAY-204: next Friday's campaign may double checkout traffic for three hours. The beginner mistake is asking, "How many servers do we need…
An order database's primary data center suffers a catastrophic, unrecoverable event — not a transient node failure, an actual disaster. Two numbers now determin…
A team deploys their application to three regions, each with its own app tier, database, and network path. On paper, a failure in one region should never touch …
A product-page personalization API needs to answer in under 100ms for a good user experience. A shopper in Sydney hits it, and the request has to reach the orig…
A multi-tenant analytics platform partitions incoming events by tenant_id, hashed onto 16 shards — a design that looked perfectly balanced in every load test. T…
A URL shortener's redirect endpoint, GET /r/{code}, looks purely read-heavy — billions of redirects against a handful of short codes created per second. But eve…
An order service runs in two regions, us-east and eu-west. In one design, both regions serve live customer traffic right now, splitting the load. In another, us…
A permission check in front of a wire-transfer approval endpoint times out. What should happen next? One engineer's instinct says "don't block the transfer over…
A payment service keeps processing requests with zero dropped transactions while one of its three nodes crashes mid-request — that's fault tolerance. A differen…
A product page shows the item, its price, and an "add to cart" button — the core path — plus a "customers also viewed" recommendation strip powered by a separat…
A checkout API runs three replicas across two availability zones behind a load balancer — on paper, no single point of failure. Then one AZ has a networking inc…
An order-ingestion API writes to an in-memory queue, a worker pool drains it, and a payment provider on the other end gets slow. The queue keeps accepting every…
A shopping cart write to cart-77 needs to land on enough replicas that a later read is guaranteed to see it — but "enough" is a number you choose, and the numbe…
A 4-node session cache scales to 5 nodes to handle more traffic. With hash(key) % N, that single node addition changes almost every key's target node, and the c…
A user changes their display name, refreshes the page a second later from a phone on a different network, and sees the old name. Nothing crashed. No request fai…
A checkout API can wait until every step finishes, or accept an order and complete work later. The first path gives the caller an immediate final answer but cou…
A shopping cart must remember items, so the product cannot be literally stateless. The useful design question is where that state lives. Keep the cart inside on…
An order API can return responses all day and still charge the wrong amount. It can be temporarily unreachable while every stored order remains safe. It can fai…
A dashboard can look “fast” while users still wait, and a load test can report huge requests-per-second while p99 checkout times explode. Latency is how long on…
You press Enter on https://shop.example/products/42. A moment later, a product page appears. That small action crosses naming, transport security, HTTP, edge in…
A support ticket that needs docs, a tool call, and a model reply does not need twelve equal "frameworks." It needs an orchestration lane, a retrieval lane, a se…
A travel checkout may call a public weather API, your own booking API, and a partner airline API. All three could use REST, but they should not share the same c…
RabbitMQ is a broker: producers publish messages; exchanges route them; queues buffer work; consumers process and acknowledge. The same building blocks combine …
Many teams still introduce NGINX as “just a web server.” In production it usually sits in front of your app: clients hit NGINX first; your Node, .NET, or Java p…
Five Docker containers with REST between them is not a production microservices system. Clients hit a load balancer and API gateway; services own their database…
Checkout slows while product pages remain healthy. CPU is moderate, but the orders table shows rising lock waits and writes queue behind one hot index. Adding a…
A product page feels instant on the second visit because some layer reused work from the first. The useful beginner question is not “should we add Redis?” but “…
Many developers reach for async/await hoping one method will finish sooner. It does not make a database round-trip or HTTP call execute faster; the external ope…
A chat demo with an API key is not an LLM product. LLMOps is the set of tools that make models behave like services you can ship: versioned prompts, evals, guar…
A prompt is only one part of a production AI system. Engineers also need vocabulary for execution loops, tool connections, model access, cost, evaluation, safet…
"Just use Postgres" is good advice until a measured access pattern needs a specialist. A checkout might use Redis for the cart, SQL for order and inventory, a v…
Semantic search, RAG, and agent memory depend on the same primitive: store embeddings and retrieve nearby vectors with the filters your product requires. The ma…
This guide is for developers who can build a frontend, API, and database but have not yet operated the whole request path. By the end, you can trace one checkou…
Mobile users lose signal in elevators, on flights, and in rural areas, but they still expect edits to survive. An offline-first architecture writes locally, rec…
Microservices are not a shopping list. They are a set of layers — package, store, communicate, protect the edge, run and observe — each with many tools that sol…
When GET https://app.example.com/api/orders/42 returns 502, the failure may sit at DNS, the external load balancer, an Ingress controller, a Service selector, a…
A Redis GET can be constant-time and still miss its latency target when a large Lua script is ahead of it, the client opens a new TLS connection, or the value t…
At 3am you need three answers: what happened, how bad is it, and where time went. Logs record discrete events. Metrics aggregate rate, errors, and latency. Trac…
Traffic climbs and something saturates — CPU, memory, disk, or connection count. Vertical scaling gives one machine more resources. Horizontal scaling adds mach…
A product page is easy to cache until a price changes: the CDN still has the old response, one app instance has an older in-process value, and Redis has already…
The CAP theorem states that when a distributed system is partitioned, it cannot guarantee both linearizable consistency and availability for every request. Cons…
Every new project faces the same question: one deployable application or separately deployed services? A monolith minimizes distributed-systems overhead; micros…
A load balancer spreads connections so one machine does not take all the pain. Layer 4 routes on IP and port — fast and protocol-agnostic. Layer 7 reads HTTP ho…
One buggy client can retry a failing endpoint in a tight loop and starve everyone else. Rate limiting protects shared capacity and keeps abuse expensive; a sing…
This guide is for backend engineers who know HTTP and database transactions but need to decide where six microservice patterns fit. By the end, you can trace on…
A team says "we need to shard the database" when the actual measured problem is a 200GB events table that scans slowly, or "let's add replication" when what the…
A product page's cache key expires at 2:00:00pm. In the same instant, 5,000 concurrent requests check the cache, all get a miss, and all 5,000 independently que…
A team sets an internal reliability target of 99.9% and signs a customer contract promising 99.5% — and a new engineer immediately asks why the numbers don't ma…
Two background workers pick up the same financial payout job at the exact same millisecond. Without mutual exclusion across separate servers, both workers proce…
Building fault-tolerant distributed databases requires keeping multiple server nodes synchronized on a sequence of state machine operations. Before Raft, Paxos …
Building multiplayer text editors like Google Docs, Figma, or Notion requires synchronizing concurrent modifications from multiple users across high-latency net…
A WebSocket delivers every message reliably and in order over TCP — which sounds like exactly what a multiplayer game needs, until you realize that guarantee is…
A distributed lock feels like it should be enough: acquire it, do your write, release it, and only one client at a time gets to touch the resource. It works rig…
"Multi-tenant" is not one architecture — it's a spectrum from a fully shared database with a tenant_id column on every table, to one dedicated GCP project per c…
OpenTelemetry gives you a single, vendor-neutral way to emit traces, metrics, and logs — but that neutrality means the instrumentation code never talks to Googl…
Want a curated collection instead? Topic hubs group the best content by subject.
Browse Topics