System Design

CAP teoremasi

CAP Theorem — distributed systemda uchtalasini birga olib bo’lmaydi:

Faqat 2 tasini tanlashingiz mumkin.

CAP nima?

C - Consistency

Barcha node’lar bir xil ma’lumotni ko’radi:

Write → Node 1 (value = 100)
Read → Node 2 (value = 100) 

Har qanday read eng oxirgi write’ni qaytaradi.

A - Availability

Har qaysi request javob oladi (hatto error bo’lmasa ham):

Request → Any node → Response 
(Hatto ba'zi node'lar down bo'lsa ham)

P - Partition Tolerance

Tarmoq ajralishi (network partition) bo’lsa ham ishlaydi:

Datacenter 1  ←  ✂️ ✂️  → Datacenter 2
(aloqa uzildi, lekin har biri ishlaydi)

Network partition inevitable — Internet’da har doim bo’lishi mumkin.

Nega uchtalasi birga emas?

Scenario: Network Partition

     Client

   ┌────┴────┐
   ▼         ▼
┌──────┐  ┌──────┐
│Node 1│  │Node 2│
└──────┘  └──────┘
   ↕         ↕
   ✂️ Network partition!

Tanlov:

Option 1: CP (Consistency + Partition Tolerance)

Client → Node 1: UPDATE value = 100
Node 1 → Node 2: ✂️ (can't sync)
Node 1: "Error: Can't guarantee consistency" 

Availability qurbon qilindi

Option 2: AP (Availability + Partition Tolerance)

Client → Node 1: UPDATE value = 100 
Client → Node 2: READ value = 50 (eski qiymat) 

Consistency qurbon qilindi

Option 3: CA (Consistency + Availability)

Network partition bo'lmasligi kerak
→ Single datacenter, no distribution
→ Distributed system emas! 

Real distributed systems: Partition tolerance shart (tarmoq har doim muammo bo’lishi mumkin).

Tanlov: CP yoki AP?

CP Systems (Consistency prioriteti)

Partition vaqtida: Availability qurbon qilinadi.

Network partition:
→ Write reject qilinadi
→ Read reject qilinadi (yoki eski data)
→ Consistency saqlanadi

CP Examples

1. MongoDB (default):

// Write concern: majority
db.users.insertOne(
  { name: 'Ali' },
  { writeConcern: { w: 'majority' } }
);

Majority node’lar sync bo’lmasa → Error

2. HBase:

Region Server down → Region unavailable
Consistent view muhim

3. Redis (with clustering):

Master down → Failover (10-30s unavailable)
Consistency > availability

4. Zookeeper:

Quorum yo'q → Service unavailable
Distributed coordination (consistency shart)

Qachon CP?

Financial systems: Pul yo’qolishi mumkin emas
Inventory management: Overselling muammo
Configuration management: Inconsistent config xavfli
Distributed locks: Coordination kerak

AP Systems (Availability prioriteti)

Partition vaqtida: Consistency qurbon qilinadi (eventual consistency).

Network partition:
→ Har ikkala side ham yoza/o'qiy oladi
→ Ma'lumot vaqtincha inconsistent
→ Keyinroq sync (eventual consistency)

AP Examples

1. Cassandra:

-- Write succeeds if ANY node responds
CONSISTENCY ANY;
INSERT INTO users VALUES (123, 'Ali');

Eventually replicate qilinadi.

2. DynamoDB:

// Eventual consistency (default)
const result = await dynamodb.get({
  TableName: 'Users',
  Key: { id: 123 },
  ConsistentRead: false // AP mode
});

3. CouchDB:

Multi-master, conflict resolution
Both nodes write → merge later

4. DNS:

DNS servers inconsistent bo'lishi mumkin
But always available

Qachon AP?

Social media: Tweet 1-2 sekund kech ko’rinsa muammo yo’q
Analytics: Approximate numbers OK
Caching: Stale data qabul qilinadi
Content delivery: Eventual consistency yetarli

PACELC Teoremasi

CAP kengaytmasi:

If Partition:
  Choose C or A
Else (no partition):
  Choose Latency or Consistency

Trade-off: Latency vs Consistency

Low latency:

Read from nearest replica (eventual consistency)
→ Fast but stale data possible

Strong consistency:

Read from master or quorum
→ Slow but always fresh

PACELC Examples

Cassandra:

Partition: AP (availability)
Else: EL (eventual consistency, low latency)

MongoDB:

Partition: CP (consistency)
Else: PC (strong consistency, higher latency)

Consistency Levels

Ko’p database’lar tunable consistency beradi:

Cassandra Consistency Levels

-- Strong consistency
CONSISTENCY QUORUM; -- N/2 + 1 nodes must respond

-- Eventual consistency
CONSISTENCY ONE; -- 1 node response enough

-- Any
CONSISTENCY ANY; -- Hinted handoff (fastest)

Trade-off: Consistency ↑ = Latency ↑

MongoDB Read Concern

// Strong consistency
db.collection.find().readConcern('majority');

// Eventual consistency
db.collection.find().readConcern('local');

DynamoDB Consistency

// Strong consistency
const result = await dynamodb.get({
  ConsistentRead: true // Wait for all replicas
});

// Eventual consistency (default)
const result = await dynamodb.get({
  ConsistentRead: false // Fastest replica
});

Real-world Architectures

Instagram (CP-leaning)

PostgreSQL: CP (transactions)
Cassandra: Tunable (eventual for feeds)
Redis: CP (session)

Feeds: AP (eventual OK)
Payments: CP (consistency must)

Netflix (AP)

Cassandra: AP (availability crucial)
EVCache: AP
Downtime > Stale data

"Show something > show nothing"

Google Spanner (CP with low latency)

TrueTime API: Synchronized clocks
Paxos: Consensus (CP)
But: Low latency (geographic replication)

Trade-off: Complexity + cost

Eventual Consistency in Practice

Example: Social media post

Time 0s:  Ali posts → Node 1
Time 0.1s: Node 1 → Node 2 (replicating)
Time 0.2s: Vali reads → Node 2 (eski, post yo'q) 
Time 0.5s: Replication done
Time 1s:  Vali reads → Node 2 (yangi, post bor) 

Eventual consistency: 0.5-1 sekund.

Conflict Resolution

Example: Concurrent edits

User A: profile.bio = "Backend developer"
User B: profile.bio = "Frontend developer"
(same time, different nodes)

Strategies:

1. Last Write Wins (LWW):

Timestamp-based
Latest: profile.bio = "Frontend developer"

2. Version Vectors:

Track all writes, merge intelligently

3. CRDTs (Conflict-free Replicated Data Types):

Math-based merge

4. Application-level:

Flag conflict, let user resolve

Choosing CP vs AP

Decision Matrix

Use CaseChoiceReason
BankingCPMoney loss unacceptable
E-commerce inventoryCPOverselling bad UX
Social feedAPStale OK, availability crucial
AnalyticsAPApproximate OK
ConfigurationCPInconsistent config dangerous
DNSAPAvailability > consistency
CachingAPStale acceptable

Hybrid Approach (Ko’p qo’llaniladi)

Real systems ikkalasini ishlatadi:

Critical data → CP database (PostgreSQL)
Non-critical → AP database (Cassandra)
Cache → AP (Redis eventual)

Example: E-commerce

Orders, Inventory → PostgreSQL (CP)
Product catalog → MongoDB (tunable)
Recommendations → Cassandra (AP)
Session → Redis (CP)
CDN → AP (eventual)

Xulosa

CAP Theorem:

CP (Consistency + Partition):

AP (Availability + Partition):

Real-world:

Keyingi dars: Caching asoslari - tezlikni oshirish.