Skip to content

yumed15/system-design-notes

Repository files navigation

The Art of Scalable Systems: Designing for Success

Buckle up, intrepid coder! The Art of Scalable Systems is your passport to unraveling the mysteries of services. Explore the hilarious mishaps and ingenious solutions to everyday problems.

📚 NB: This is an attempt at documenting all my system design notes from reading and hands-on experience, starting with explaining the basic components of a service to providing examples of real world systems and discussing tradeoffs of possible solutions.

Table of contents

Basic Concepts

System components System concepts
Load Balancer ACID
API Gateway CAP Theorem
Caching PACEL Theorem
DNS
Message Queues
Proxies
Databases

Design Patterns

Problem Solution
Check set contains Bloom Filters
Where to insert data Consistent Hashing
Ensure strong consistency Quorum Consensus
Ensure high availability Leader And Follower
Atomicity in data transfers

Write Ahead Log
Segmented Log
High Water Mark

Concurrent updates to file Locking Lease
Concurrent node writes Vector Clocks
Node liveness

Heartbeat
Gossip Protocol
Phi Accrual Failure Detection

Deal with dead nodes coming back

Split Brain With Fencing
Split Brain With Generation Clock

Update dead nodes with missed data Hinted Handoff
Update stale nodes

Read Repair
Merkle Trees

Check data inconsistency Checksum

Data Synchronisation Patterns

Chapters
CQRS
Two Phase Commit
Transactional Outbox
Change Data Capture (CDC)

Monolith Decomposition Patterns

Chapters
Domain Driven Design
The Strangler Fig Migration Pattern

Real World Scenarios

Chapters
Distributed Message Queue & Event Streaming Platform

Infrastructure Bits and Bobs

Chapters
K8S - ClusterIP vs NodePort vs LoadBalancer

Payments Domain

Chapters
Parties: Acquirer, Issuer
Events: Chargebacks, Reversals