āĻāĻāĻŋ āĻāĻāĻāĻŋ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āϝā§āĻāĻžāύ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰ āĻŽā§āϞāĻŋāĻ āĻāĻŋāύāĻŋāϏāĻā§āϞ⧠āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤
āĻāĻ āĻāĻŋāĻāĻā§āϰāĻŋā§āĻžāϞ āĻāϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻāĻĒāύāĻžāĻā§ āĻŽā§āϞāĻŋāĻ āĻāĻŋāύāĻŋāϏāĻā§āϞā§āϰ āϧāĻžāϰāĻŖāĻž āĻĻā§ā§āĻžāĨ¤ āĻāĻžāϞ⧠āϞāĻžāĻāϞ⧠star, watch āĻāĻŋāĻāĻŦāĻž fork āĻā§āϞāĻŋāĻ āĻāϰ⧠āϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
- Section 1: System Design
- Section 2: Database Engineering
- Section 3: Database Transaction
- Section 4: Client Server Architecture
- Section 5: Reliability
- Section 6: Performance Metrics
- Section 7: Distributed System
- Section 8: Domain Name System
- Section 9: Transmission Control Protocol
- Section 10: User Datagram Protocol
- Section 11: HTTP, TLS and HTTPS
- Section 12: What happens when you type a URL in your browser
- Section 13: Concurrency and Parallelism
- Section 14: High Concurrency Control
- Section 15: Functional and Non Functional Requirements
- Section 16: Back Of the Envelope Estimation
- Section 17: Authentication and Authorization
- Section 18: Stateful and Stateless Architecture
- Section 19: Proxy
- Section 20: REST API
- Section 21: Scalability
- Section 22: Database Sharding
- Section 23: Database Replication
- Section 24: Caching
- Section 25: Content Delivery Network
- Section 26: Rate Limiter
- Section 27: CAP Theorem
- [Section 28: Consistent Hashing] (āĻāϞāĻŽāĻžāύ)
- Section 29: Polling, Web Socket and Server-Sent Events
- [Section 30: Stream and Batch Processing] (āĻāϞāĻŽāĻžāύ)
- Section 31: Message Queue
- [Section 32: rpc, gRpc] (āĻāϞāĻŽāĻžāύ)
- Section 33: Single Sign-On
- Section 34: Elasticsearch
- Section 35: Bloom Filter
- [Section 36: Load Balancing Algorithms] (āĻāϞāĻŽāĻžāύ)
- [Section 37: How Live Streaming works] (āĻāϞāĻŽāĻžāύ)
- Section 38: How OAuth2 works
- [Section 39: Serverless Architecture] (āĻāϞāĻŽāĻžāύ)
- Section 40: High Availability best practices by Netflix
- Section 41: Real World Problems
- Section 42: Resources
āϝāĻāύ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĄā§āĻā§āϞāĻĒ āĻāϰāĻŋ, āϤāĻāύ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĄāĻŋāĻāĻžāĻāύ āĻ āύā§āϏāϰāĻŖ āĻāϰāĻž āĻāϰā§āϰāĻŋāĨ¤ āĻāϰ āĻĒā§āϰāϧāĻžāύ āĻāĻžāϰāĻŖ āĻšāϞā§, āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āϝāĻžāϤ⧠āĻŦāϰā§āϤāĻŽāĻžāύ⧠āĻāĻŦāĻ āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻā§āύāĻ āϏāĻŽāϏā§āϝāĻž āĻāĻžā§āĻžāĻ āĻāĻžāϞāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻŦāĻŋāĻļā§āώ āĻāϰā§, āϝāĻĻāĻŋ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āĻāĻ āϏāĻŽā§ āĻĒā§āϰāĻā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§ā§ā§ āĻĨāĻžāĻā§, āϤāĻāύ āĻāĻāĻŋ āĻĒā§āϰāĻā§āϰ āϞā§āĻĄ āϏāĻšā§āϝ āĻāϰāϤ⧠āϏāĻā§āώāĻŽ āĻšāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻā§āύ⧠āĻāĻžāύā§āĻāĻļāύ āĻŦāĻŋāĻā§āĻāĻŋāύā§āύāϤāĻž āĻŦāĻž āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏā§āϰ āĻ āĻŦāύāϤāĻŋ āĻāĻžā§āĻžāĻ āĻāĻžāĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻ āϧāϰāύā§āϰ āĻĄāĻŋāĻāĻžāĻāύāĻā§āĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύ āĻŦāϞāĻž āĻšā§āĨ¤
(āĻāĻ āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύ āĻŽā§āϞāϤ āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ āĻāĻā§āĻāĻŋāύāĻŋā§āĻžāϰāĻŋāĻ āĻāϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒā§āĻā§āϤāĨ¤)
āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰāĻžāϰ āϏāĻŽā§ āĻĄā§āĻāĻžāĻŦā§āϏ āĻā§āĻŦāĻ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻŦāĻŋāώā§āĨ¤ āĻā§āύ āĻā§āύ āϰāĻāĻŽā§āϰ āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāϰ āĻāύā§āϝ āĻā§āύ āĻā§āύ āϰāĻāĻŽā§āϰ āĻĄā§āĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ, āĻĄā§āĻāĻžāĻŦā§āϏā§āϰ āĻā§āĻŦāĻŋāϞā§āϰ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻā§āĻŽāύ, āĻā§āĻŦāĻŋāϞ āĻāϞāĻžāĻŽ āĻāϰ āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ, āĻā§āĻŦāĻŋāϞ size āĻāϤā§āϝāĻžāĻĻāĻŋ āĻāĻžāύāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻĻāϰāĻāĻžāϰāĨ¤
āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĄā§āĻā§āϞāĻĒ āĻāϰāĻžāϰ āϏāĻŽā§ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻ āĻ āύā§āϝāĻžā§ā§ āĻĄā§āĻāĻžāĻŦā§āϏ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰāϤ⧠āĻšā§āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ, āĻāĻŽāϰāĻž āĻĒā§āϰāϧāĻžāύ āĻĻā§āĻ āϧāϰāύā§āϰ āĻĄā§āĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĨāĻžāĻāĻŋ - SQL(āϰāĻŋāϞā§āĻļāύāĻžāϞ) āĻĄā§āĻāĻžāĻŦā§āϏ āĻāĻŦāĻ NoSQL(āύāύ-āϰāĻŋāϞā§āĻļāύāĻžāϞ) āĻĄā§āĻāĻžāĻŦā§āϏāĨ¤ āĻāĻŽāϰāĻž āĻā§āĻŽāύ āĻŦāĻž āĻā§āύ āϧāϰāĻŖā§āϰ āĻĄāĻžāĻāĻž āώā§āĻā§āϰ āĻāϰāϤ⧠āĻāĻžāĻ, āĻāĻŋāĻāĻžāĻŦā§ āώā§āĻā§āϰ āĻāϰāϤ⧠āĻāĻžāĻ, āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāĻā§āϰ āĻĒāĻĻā§āϧāϤāĻŋ āĻāϤā§āϝāĻžāĻĻāĻŋ āĻĒā§āϰā§ā§āĻāύ āĻ āύā§āϝāĻžā§ā§ āĻĄā§āĻāĻžāĻŦā§āϏ āĻŦāĻžāĻāĻžāĻ āĻāϰāϤ⧠āĻšā§āĨ¤ āĻĄāĻžāĻāĻžāϰ āϧāϰāύ āĻ āύā§āϝāĻžā§ā§ āĻĄā§āĻāĻžāĻŦā§āϏāĻā§āϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻāĻŋāύā§āύ āĻāĻŋāύā§āύ āϏā§āĻŦāĻŋāϧāĻž āĻĻāĻŋā§ā§ āĻĨāĻžāĻā§āĨ¤
SQL | NoSQL |
---|---|
āĻā§āĻŦāĻŋāϞā§āϰ āĻŽāϧā§āϝ⧠āĻĄāĻžāĻāĻž āϏā§āĻā§āϰ āĻāϰāĻž āĻšā§, āϝā§āĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻžāϰāĻŋ āĻāĻāĻāĻŋ āĻāύā§āĻāĻŋāĻāĻŋ āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāϞāĻžāĻŽ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāϰ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āύāĻŋāĻĻā§āϰā§āĻļāύ āĻāϰā§āĨ¤ āĻā§āĻŦāĻŋāϞāĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠relation āĻĨāĻžāĻā§āĨ¤ | āĻā§āύ āĻĒā§āϰāĻāĻžāϰ relation āĻāĻžā§āĻž āĻĄāĻžāĻāĻž āĻŦāĻŋāĻāĻŋāύā§āύāĻāĻžāĻŦā§ āώā§āĻā§āϰ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āϝā§āĻŽāύāĻ key-value, graph, document āĻāϤā§āϝāĻžāĻĻāĻŋāĨ¤ |
āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏā§āĻāĻŋāĻŽāĻž āĻ āύā§āϝāĻžā§ā§ āĻĄāĻžāĻāĻž āϏā§āĻā§āϰ āĻāϰāĻž āĻšā§āĨ¤ (āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏā§āĻāĻŋāĻŽāĻž āĻĒāϰāĻŦāϰā§āϤā§āϤ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž āϝāĻžā§āĨ¤) | NoSQL āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻĄāĻžāĻāύāĻžāĻŽāĻŋāĻ āϏā§āĻāĻŋāĻŽāĻž āĻĨāĻžāĻā§, āĻ āϰā§āĻĨāĻžā§ āϏā§āĻāĻŋāĻŽāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύāϝā§āĻā§āϝāĨ¤ |
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻĄā§āĻāĻžāĻŦā§āϏ
āĻĄāĻžāĻāĻžāĻŦā§āĻ āĻā§āϰāĻžāύāĻāĻžāĻāĻļāύ āĻāĻ āϏāĻŽāϏā§āϤ āĻĒā§āϰāĻļā§āύ āĻŦāĻž āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§:
-
āĻĄāĻžāĻāĻžāĻŦā§āĻ āϏāĻĢāĻāĻāϝāĻŧā§āϝāĻžāϰ āĻŦāĻž āĻšāĻžāϰā§āĻĄāĻāϝāĻŧā§āϝāĻžāϰ āϝ⧠āĻā§āύ⧠āϏāĻŽāϝāĻŧ fail āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ (write āĻ āĻĒāĻžāϰā§āĻļāύā§āϰ āĻŽāĻžāĻāĻāĻžāύā§āĻ)
-
āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻā§ āĻŦāĻžāϧāĻž āĻāϏāϤ⧠āĻĒāĻžāϰā§, āϝāĻž āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ āĻĨā§āĻā§ āĻ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤāĻāĻžāĻŦā§ āĻŦāĻŋāĻā§āĻāĻŋāύā§āύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
-
āĻāĻāĻžāϧāĻŋāĻ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻāĻāĻ āĻāύā§āĻā§āϰāĻŋ āĻāĻĒāĻĄā§āĻ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§, āϝāĻžāϰ āĻĢāϞ⧠āĻāĻā§ āĻ āĻĒāϰā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻāĻāĻžāϰāϰāĻžāĻāĻ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
-
āĻāĻāĻāĻŋ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āĻ āĻĨā§āĻā§ āĻāĻŽāύ āϤāĻĨā§āϝ āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰ⧠āϝāĻž āϏāĻŽā§āĻĒā§āϰā§āĻŖāϰā§āĻĒā§ Commit āĻāϰāĻž āĻšāϝāĻŧāύāĻŋ, āĻĢāϞ⧠āϤāĻĨā§āϝāĻāĻŋ āĻ āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻ āĻŦāĻž āĻ āϏāĻāĻāϤāĻŋāĻĒā§āϰā§āĻŖ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
-
āĻā§āϞāĻžāϝāĻŧā§āύā§āĻāĻĻā§āϰ āĻŽāϧā§āϝ⧠concurrency āĻŦāĻž race condition āĻāϰ āĻāĻžāϰāĻŖā§ āĻ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ āĻŦāĻžāĻ āϤā§āϰāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻāĻĒāϰā§āϰ āĻĒā§ā§āύā§āĻāĻā§āϞā§āϰ āĻāϤā§āϤāϰ āĻĒā§āϤ⧠āĻšāϞ⧠āύāĻŋāĻā§āϰ āĻāĻĒāĻŋāĻāĻā§āϞ⧠āĻŦā§āĻāϤ⧠āĻšāĻŦā§āĨ¤
āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠Transaction āĻŦāϞāϤ⧠āĻŦā§āĻāĻžā§ āĻāĻāĻžāϧāĻŋāĻ READ āĻāĻŦāĻ WRITE āĻ āĻĒāĻžāϰā§āĻļāύāĻā§ āĻāĻāĻāĻŋ āϞāĻāĻŋāĻā§āϝāĻžāϞ āĻāĻāύāĻŋāĻ āĻāϰ āĻŽāϧā§āϝ⧠āĻāĻŦāĻĻā§āϧ āĻāϰāĻžāĨ¤ āĻāϰ āĻĢāϞā§, āϏāĻŽāϏā§āϤ READ āĻāĻŦāĻ WRITE āĻ āĻĒāĻžāϰā§āĻļāύ āĻāĻāϏāĻžāĻĨā§ āĻāĻāĻāĻŋ āĻāĻāĻ āĻ āĻĒāĻžāϰā§āĻļāύ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻŋāϤ āĻšā§āĨ¤ āĻ āϰā§āĻĨāĻžā§, āϝāĻĻāĻŋ āϏāĻŦ āĻ āĻĒāĻžāϰā§āĻļāύ āϏāĻĢāϞāĻāĻžāĻŦā§ āϏāĻŽā§āĻĒāύā§āύ āĻšā§, āϤāĻŦā§ COMMIT āĻāϰāĻž āĻšāĻŦā§, āĻāϰ āϝāĻĻāĻŋ āĻā§āύ⧠āĻāĻāĻāĻŋ āĻ āĻĒāĻžāϰā§āĻļāύ āĻŦā§āϝāϰā§āĻĨ āĻšā§, āϤāĻŦā§ ROLLBACK āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āϰā§āĻŦā§āϰ āĻ āĻŦāϏā§āĻĨāĻž āĻĢāĻŋāϰāĻŋā§ā§ āύā§āĻā§āĻž āĻšāĻŦā§āĨ¤
āϏāĻžāϧāĻžāϰāĻŖāϤ Transaction āĻāĻāĻžāĻŦā§ āĻļā§āϰ⧠āĻšā§,
BEGIN
SELECT * FROM users
UPDATE users SET username=âlahinâ WHERE id=224
COMMIT
āĻāĻĒāύāĻŋ Prisma āĻĻāĻŋā§ā§ āϞāĻŋāĻāϤ⧠āĻā§āϞā§,
await prisma.$transaction(async (prisma) => {
const users = await prisma.users.findMany();
await prisma.user.update({
where: { id: 224 },
data: { username: "lahin" },
});
});
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰāĻžāύāϏāĻžāĻāĻļāĻžāύ
āĻā§āϞāĻžā§ā§āύā§āĻ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻŦā§ āϏāĻžāϰā§āĻāĻžāϰāĻā§ āĻāĻŋāĻā§ āϏā§āĻĒā§āϏāĻŋāĻāĻŋāĻĢ āϰāĻŋāϏā§āϰā§āϏ āĻāϰ āĻāύā§āϝ, āϏāĻžāϰā§āĻāĻžāϰ āϏā§āĻ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĒāĻžāĻā§āĻžāϰ āĻĒāϰ āϏ⧠āϤāĻžāϰ āϝāĻžāĻŦāϤā§ā§ āĻĒā§āϰāϏā§āϏ āĻļā§āώ āĻāϰ⧠āĻā§āϞāĻžā§ā§āύā§āĻāĻā§ āϰā§āϏāĻĒāύā§āϏ āĻĻāĻŋā§ā§ āĻĻāĻŋāĻŦā§, āĻāĻāĻŋ āĻā§āϞāĻžā§ā§āύā§āĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰāĨ¤
āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŦ āĻāĻĻāĻžāĻšāϰāĻŖ āĻĨāĻžāĻāĻŦā§ āĻā§āϞāĻžā§ā§āύā§āĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰā§āĨ¤
āϏāĻŋāϏā§āĻā§āĻŽ āϝāĻĻāĻŋ āĻā§āύ⧠āĻĒā§āϰāĻāĻžāϰā§āϰ Fault/Error āĻĨāĻžāĻāĻžāϰ āĻĒāϰāĻ āĻāĻžāϞā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŋāĻāĻŦāĻž āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āϝāĻĻāĻŋ āĻŦāύā§āϧ āύāĻž āĻšā§, āϤāĻŦā§ āϏā§āĻ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ ReliableāĨ¤ āĻāĻŽāĻžāĻĻā§āϰ āĻŽāύ⧠āϰāĻžāĻāϤ⧠āĻšāĻŦā§ āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ Fault āĻāϰ āĻāĻžāϰāĻŖā§ āϏāĻŋāϏā§āĻā§āĻŽ Failure āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
Fault āĻāϰāĻāĻŽ āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻā§āύ⧠user āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻā§ āĻāĻŽāύāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻā§ āϝāĻžāϤ⧠āĻā§āύ⧠Failure āĻšā§ā§ āĻā§āϞ, āϏā§āĻāĻž āĻāĻā§āĻāĻžāĻā§āϤ āĻŦāĻž āĻ āύāĻŋāĻā§āĻāĻžāĻā§āϤāĻāĻžāĻŦā§āĻ āĻšāϤ⧠āĻĒāĻžāϰā§, āϤāĻāύ āϝāĻĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻŦāύā§āϧ āύāĻž āĻšā§ā§ āĻā§āύ⧠āĻĒā§āϰāĻāĻžāϰā§āϰ Warning message āĻĻā§āĻāĻžāϞ⧠āϤāĻāύ āϏā§āĻ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋāĻā§ āĻāĻŽāϰāĻž Reliable āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āϰāĻŋāϞāĻžāĻāĻŦāĻŋāϞāĻŋāĻāĻŋ
āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽā§ā§āϰ āĻāĻŋāϤā§āϤāĻŋāϤ⧠āĻā§āύ⧠āϏāĻŋāϏā§āĻā§āĻŽ āϝāϤāĻā§āĻā§ āĻāĻžāĻ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āϏā§āĻāĻŋ āĻšāĻā§āĻā§ ThroughputāĨ¤ āϝā§āĻŽāύ, āĻĒā§āϰāϤāĻŋ ā§§ā§Ļ āϏā§āĻā§āύā§āĻĄ āĻ āϏāĻŋāϏā§āĻā§āĻŽ āϝāĻĻāĻŋ ā§Ģā§Ļ āĻāĻŋ API request āϏāĻŽā§āĻĒāύā§āύ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āϤāĻžāĻšāϞ⧠āϤāĻžāϰ Throughput āĻšāĻŦā§ ā§Ģā§Ļ/ā§§ā§Ļ = ā§ĢāĨ¤
āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ Resource āĻāύā§āϝ āϝāĻāύ āϏāĻžāϰā§āĻāĻžāϰāĻā§ Request āĻāϰ⧠āĻāĻŦāĻ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ FIRST BYTE of Response āϝāĻāύ āĻā§āϰāĻšāĻŖ āĻāϰ⧠āϤāĻžāϰ āĻŽāϧā§āϝāĻāĻžāϰ āϏāĻŽāϝāĻŧāĻā§āĻā§ (Request āĻāϰāĻž āĻĨā§āĻā§ āĻļā§āϰ⧠āĻāϰ⧠āĻāĻŦāĻ FIRST BYTE āĻā§āϰāĻšāĻŖ āĻāϰāĻžāϰ āϏāĻŽā§ āĻĒāϰā§āϝāύā§āϤ) āĻšāϞ Time to First ByteāĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻŽā§āϝāĻžāĻā§āϰāĻŋāĻā§āϏ
āĻāĻāĻžāϧāĻŋāĻ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ (āĻŦāĻž āĻāĻŽā§āĻĒā§āύā§āύā§āĻ) āĻāĻāϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻžāϰ āĻĢāϞ⧠āĻā§āύ āĻāĻžāĻ āĻļā§āώ āĻšā§ āĻāĻŦāĻ End User āĻāϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ (āĻŦāĻž āĻāĻŽā§āĻĒā§āύā§āύā§āĻ) āĻšāĻŋāϏā§āĻŦā§ āĻāϏā§, āϏā§āĻ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻšāϞ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϏāĻŋāϏā§āĻā§āĻŽāĨ¤ āĻāĻ āĻŽā§āĻļāĻŋāύāĻā§āϞā§āϤ⧠āĻļā§ā§āĻžāϰā§āĻĄ āϏā§āĻā§āĻ(Shared State) āĻĨāĻžāĻā§, āĻāĻā§āĻāĻžāϰā§āύā§āĻāϞāĻŋ (Concurrently) āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻā§ āĻ āĻĒāϰā§āϰ āϏāĻžāĻĨā§ Information āĻļā§ā§āĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
āĻŦāϰā§āϤāĻŽāĻžāύ āϏāĻŽā§ā§ Distributed System āĻāϰ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāϞ YouTubeāĨ¤
YouTube āĻā§āύ?
- āϏāĻžāϰā§āĻāĻžāϰ User āĻĨā§āĻā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĒāĻžā§ Video Upload āĻāĻŋāĻāĻŦāĻž Video Watch āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
- āĻāĻŋāĻĄāĻŋāĻ āĻāύāĻā§āĻĄāĨ¤
- āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻŋāϏā§āĻā§āĻŽāĨ¤
āĻāĻā§āϞ⧠āϏāĻŦāĻāĻŋāĻā§ āĻŽāĻŋāϞ⧠Distributed System YouTube āϤā§āϰāĻŋ āĻāϰā§āĨ¤
Domain Name System āĻāĻŋāĻāĻŦāĻž DNS āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ Human Readable Domain (āϝā§āĻŽāύ www.google.com) āĻā§ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ IP-āϤ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰā§āĨ¤
āĻāĻĒāύāĻŋ āϝāĻāύ āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠URL āĻāĻžāĻāĻĒ āĻāϰā§āύ (āϝā§āĻŽāύ www.google.com)āĨ¤ DNS āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻĒāύāĻžāϰ āĻĻā§ā§āĻž URL āĻāϰ IP Address āĻŦā§āϰ āĻāϰāĻŦā§ āĻāĻŦāĻ āϏā§āĻ IP Address āĻ āĻāĻĒāύāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĒā§āϰāϏā§āϏ āĻšāĻŦā§āĨ¤
āĻāĻ āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāĻāĻž āĻļā§āϰ⧠āĻšā§ DNS Resolver āĻĻāĻŋā§ā§,
-
DNS Resolver āĻŽā§āϞāϤ Human Readable Domain āĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ IP-āϤ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āĻāϰ ā§ŠāĻāĻŋ āĻĒāĻžāϰā§āĻ āĻāĻā§,
-
Root Server, āĻāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻŽā§āϞāϤ .com, .org, .net āĻāϤā§āϝāĻžāĻĻāĻŋāϰ āϤāĻĨā§āϝ āϰāĻžāĻā§ āĻāĻŦāĻ āϏā§āĻā§āϞā§āϰ IP āϏā§āĻ DNS Resolver āĻā§ āĻĻāĻŋā§ā§ āĻĨāĻžāĻā§ āϝā§āĻŽāύ .com āĻāϰ āĻāύā§āϝ .com āĻāϰ IP, .org āĻāϰ āĻāύā§āϝ .org āĻāϰ IP
-
Top Level Domain Server, āĻāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻŽā§āϞāϤ āĻĒā§āϰāϤāĻŋāĻāĻŋ Top Level Domain (www.google.com āĻāϰ TLD āĻšāϞ .com) āĻāϰ Authoritative Server āĻāϰ āϤāĻĨā§āϝ āύāĻŋāĻā§āϰ āĻŽāϧā§āϝ⧠āϰāĻžāĻā§āĨ¤
- āϏāĻžāϧāĻžāϰāĻŖ top-level domains: .com, .org, .gov
- āĻĻā§āĻļā§ā§ code top-level domains: .jp, .uk, .bd
-
Authoritative Server, āĻāĻ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻŽāϧā§āϝ⧠āϏā§āĻ Human Readable Domain (āϝā§āĻŽāύ www.google.com) āĻāϰ IP āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤
-
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻĄā§āĻŽā§āĻāύ āύā§āĻāĻŽ āϏāĻŋāϏā§āĻā§āĻŽ
Transmission Control Protocol āĻ āĻĨāĻŦāĻž TCP āĻšāĻā§āĻā§ āĻāĻāĻāĻŋ āύā§āĻāĻā§āĻžāϰā§āĻ āĻĒā§āϰā§āĻā§āĻāϞ āϝā§āĻāĻžāύ⧠āĻāĻāĻžāϧāĻŋāĻ Device āĻāĻā§ āĻ āĻĒāϰā§āϰ āϏāĻžāĻĨā§ āĻŽā§āϏā§āĻ āĻāĻĻāĻžāύ-āĻĒā§āϰāϧāĻžāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
TCP āĻā§ Reliable āĻŦāϞāĻž āĻšā§ āĻāĻžāϰāĻŖ āϝāϤāĻā§āώāĻŖ āĻĒāϰā§āϝāύā§āϤ āĻĄāĻŋāĻāĻžāĻāϏāĻā§āϞ⧠āĻāĻā§ āĻ āĻĒāϰā§āϰ āϏāĻžāĻĨā§ āĻŽā§āϏā§āĻ āĻ āĻĻāĻžāύ-āĻĒā§āϰāϧāĻžāύ āĻļā§āώ āĻšāĻŦā§ āύāĻž āϤāϤāĻā§āώāύ connection āĻŦāύā§āϧ āĻšāĻŦā§ āύāĻžāĨ¤
Transmission āĻļā§āϰ⧠āĻšāĻā§āĻžāϰ āĻĒā§āϰā§āĻŦā§ TCP 3-way-handshake āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠connection established āĻāϰā§āĨ¤ āĻāĻāĻŋ ā§ŠāĻāĻŋ āϏā§āĻā§āĻĒā§ āĻšā§ā§ āĻĨāĻžāĻā§,
- SYN (synchronize): āĻāĻ flag āĻĻā§āĻŦāĻžāϰāĻž TCP āĻāĻžāύā§āĻāĻļāύ establish āĻāϰāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻž āĻšā§āĨ¤
- SYN-ACK (synchronize-acknowledge): āĻāĻ flag āĻāĻžāύā§āĻāĻļāύ establish āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤
- ACK (acknowledge): āĻāĻ flag āĻĻā§āĻŦāĻžāϰāĻž āĻāĻžāύā§āĻāĻļāύ establish āϏāĻŽā§āĻĒāύā§āύ āĻšāĻā§āĻžāϰ acknowledge āĻāϰāĻž āĻšā§āĨ¤
āĻāĻ 3-way-handshake āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠Device'āĻā§āϞā§(āĻā§āϞāĻžā§ā§āύā§āĻ-āϏāĻžāϰā§āĻāĻžāϰ) āĻāĻā§ āĻ āĻĒāϰā§āϰ āϏāĻžāĻĨā§ āĻŽā§āϏā§āĻ āĻāĻĻāĻžāύ-āĻĒā§āϰāϧāĻžāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āĻāĻŋ āύāĻžāĨ¤
TCP Reliability āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰ⧠āϏāĻžāϧāĻžāϰāĻŖāϤ Acknowledgments āĻāĻŦāĻ Retransmissions āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ TCP āϤ⧠āĻŽā§āϞāϤ āϝāĻāύ āĻā§āϞāĻžā§ā§āύā§āĻ āĻĄā§āĻāĻž send āĻāϰ⧠āϏāĻžāϰā§āĻāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāĻŋ āĻā§ Acknowledge āĻāϰā§āĨ¤ āĻā§āϞāĻžā§ā§āύā§āĻ āϝāĻĻāĻŋ Acknowledge āύāĻž āĻĒāĻžā§ āϤāĻāύ āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻŦāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ Retransmission āĻāϰāĻŦā§āĨ¤ āĻāϰāĻāĻŽ Reliability āύāĻŋāĻļā§āĻāĻŋāϤ āĻšā§ā§ āĻĨāĻžāĻā§āĨ¤
TCP āĻŽā§āϞāϤ Networking āĻāϰ OSI Model āĻāϰ Practical FormāĨ¤ āĻāĻāĻŋ Transport Layer āĻĨā§āĻā§ āĻļā§āϰ⧠āĻšā§ āĻāĻŦāĻ Application Layer āĻ āĻāĻžāĻ āĻāϰā§āĨ¤
HTTP, Web Socket, FTP āĻāϤā§āϝāĻžāĻĻāĻŋ āĻŽā§āϞāϤ TCP āϤ⧠āĻāϞā§āĨ¤
UDP āĻŽā§āϞāϤ OSI Model āĻāϰ Transport Layer-āĻ āĻ āĻŦāϏā§āĻĨāĻžāύ āĻāϰā§āĨ¤ TCP āĻāϰ āĻŽāϤ āĻāĻāĻŋ reliable āύāĻžāĨ¤ āĻāϤ⧠āĻā§āύ⧠3-way handshake āϤā§āϰ⧠āĻšā§ āύāĻžāĨ¤ āĻāĻāĻŋ āĻŽā§āϞāϤ Low Latency āĻāĻŦāĻ unreliable connection āϤā§āϰ⧠āĻāϰā§āĨ¤
UDP Process to Process communication establish āĻāϰā§āĨ¤
TCP āϤ⧠āϝā§āĻšā§āϤ⧠3-way handshake āϤā§āϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ reliable connection āϤā§āϰ⧠āĻšā§, āĻāĻŋāύā§āϤ⧠āĻāĻ 3-way handshake āϤā§āϰ⧠āĻāϰāϤ⧠āϏāĻŽā§ā§āϰ āĻĒā§āϰā§ā§āĻāύ āĻšā§ āϏā§āĻāύā§āϝ performance āĻāĻŽ āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤ Performance āĻāϰ āĻāĻĨāĻž āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāϞ⧠UDP āĻāĻāĻāĻŋ better choiceāĨ¤
UDP āϤ⧠āĻā§āύ⧠Error checking āĻšā§ āύāĻžāĨ¤
UDP āĻāϰ use-cases:
- Real-time Communication; āĻāĻĻāĻžāĻšāϰāĻŖ: Skype, Zoom.
- Live Video Streaming; āĻāĻĻāĻžāĻšāϰāĻŖ: Twitch, ESPN+.
- Online Gaming; āĻāĻĻāĻžāĻšāϰāĻŖ: Call of Duty.
UDP āϞāĻžāĻāĻ āĻāĻŋāĻĄāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻŽāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ, āĻāĻžāϰāĻŖ Live āĻāĻā§āύā§āĻā§āϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒā§āϰāĻāĻžāϰāĻāĻŋ sync āϰāĻžāĻāĻž āĻŦā§āĻļāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āύāĻžāĨ¤ UDP āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āϝāĻĻāĻŋ āĻāĻŋāĻā§ āĻĢā§āϰā§āĻŽ āĻšāĻžāϰāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧ, āϏā§āĻā§āϞ⧠āĻĒā§āύāϰāĻžāϝāĻŧ āĻĒā§āϰā§āϰāĻŖ āĻāϰāĻž āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ,
āĻāĻĒāύāĻŋ āĻŦāĻŋāĻĒāĻŋāĻāϞ (āĻā§āϰāĻŋāĻā§āĻ) āĻĻā§āĻāĻā§āύāĨ¤ āĻāĻāĻžāϰ ā§§.⧍-āϤ⧠āĻšāĻ āĻžā§ āĻŦāĻžāĻĢāĻžāϰāĻŋāĻ āĻļā§āϰ⧠āĻšāϞā§, āĻāϰ āĻāĻāύ āĻāĻāĻžāϰ ā§§.ā§Ē āĻāϞāĻā§āĨ¤ āĻāĻ āĻĻā§āĻ āĻŦāϞ āύāĻŋāϝāĻŧā§ āĻāĻĒāύāĻŋ āϤā§āĻŽāύ āĻāĻŋāύā§āϤāĻž āĻāϰāĻā§āύ āύāĻžāĨ¤ āĻāĻĒāύāĻŋ āĻĒāϰā§āϰ āĻŦāϞ āĻĻā§āĻāĻā§āύāĨ¤ āĻāĻāĻŋ āĻšāĻā§āĻā§ UDPāĨ¤
HTTP āĻ āϰā§āĻĨāĻžā§ Hyper Text Transfer Protocol, HTTP āĻāĻ āĻĒā§āϰāĻāĻžāϰā§āϰ āĻŦā§āĻļāĻŋāώā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠āĻĨāĻžāĻā§, āϝāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ Web Browser āĻāĻŦāĻ Web Server āύāĻŋāĻā§āĻĻā§āϰ āĻāĻŋāϤāϰ communication āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āĻāĻāĻŋ āĻāĻ āĻĒā§āϰāĻāĻžāϰā§āϰ set of rules āϝāĻž āĻĄā§āĻāĻž āĻā§āϞāĻžā§ā§āύā§āĻ āĻĨā§āĻā§ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻĒāĻžāĻ āĻžāύ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰā§āĨ¤ āĻĄā§āĻāĻž āĻšāϤ⧠āĻĒāĻžāϰ⧠Text, Image āĻāϤā§āϝāĻžāĻĻāĻŋāĨ¤ āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāĻŋāϤāϰ āĻĄā§āĻāĻž āĻāĻĻāĻžāύ āĻĒā§āϰāϧāĻžāύ plain-text āĻ āĻšā§ā§ āĻĨāĻžāĻā§, āĻāϰ āĻĢāϞ⧠HTTP secured āύāĻžāĨ¤
TLS āĻāĻŋāĻāĻŦāĻž Transport Layer Security, āĻāĻāĻŋ āĻšāϞ⧠Cryptographic Protocol āϝāĻž āĻŽā§āϞāϤ communication āϏā§āϰāĻā§āώāĻŋāϤ āĻāϰāĻžāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤ āĻāĻāĻŋ āĻĄāĻžāĻāĻž āĻāύāĻā§āϰāĻŋāĻĒā§āĻ āĻāϰ⧠āĻĨāĻžāĻā§ āĻĄāĻžāĻāĻž āĻā§āϞāĻžā§ā§āύā§āĻ āĻĨā§āĻā§ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻā§āϰāĻžāύā§āϏāĻŽāĻŋāĻ āĻšāĻā§āĻžāϰ āϏāĻŽā§āĨ¤
HTTPS āĻ āϰā§āĻĨāĻžā§ Hyper Text Transfer Protocol Secure, āĻāĻāĻŋ āύāĻŋāĻā§ HTTP āĻāϰ āϏāĻāϞ āĻŦā§āĻļāĻŋāώā§āĻ āĻŦāĻšāύ āĻāϰ⧠āĻļā§āϧ⧠SSL/TLS āϝā§āĻ āĻāϰā§, āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ Encrypted āĻšā§ā§ āĻĨāĻžāĻā§āĨ¤
(āĻāĻŦāĻŋāĻāĻŋ āĻāύā§āĻāĻžāϰāύā§āĻ āĻĨā§āĻā§ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰāĻž)āĨ¤ āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻĒāύāĻžāϰ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻāϰ Address Bar āĻ URL āĻāĻžāĻāĻĒ āĻāϰ⧠enter press āĻāϰāĻŦā§āύ, āĻāĻĒāύāĻžāϰ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āĻĒā§āϰāĻĨāĻŽā§ āĻāĻĒāύāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻāĻāĻŋāĻā§ DNS āϏāĻžāϰā§āĻāĻžāϰ āĻ āĻĒāĻžāĻ āĻŋā§ā§ āĻĻāĻŋāĻŦā§ āϤāĻžāϰāĻĒāϰ āĻĻā§āĻāĻŦā§ DNS cache āĻāϰ āĻāĻŋāϤāϰ āϏā§āĻ URL āĻāϰ IP āĻāĻĄā§āϰā§āϏ āĻāĻā§ āĻāĻŋ āύāĻžāĨ¤ āϝāĻĻāĻŋ āύāĻž āĻĨāĻžāĻā§ āϤāĻžāĻšāϞ⧠āĻŦāĻŋāĻāĻŋāύā§āύ steps āĻļā§āώ āĻāϰāĻžāϰ āĻĒāϰ DNS āϏā§āĻ URL āĻāϰ IP āϰāĻŋāĻāĻžāϰā§āύ āĻāϰāĻŦā§āĨ¤
āϤāĻžāϰāĻĒāϰ 3-way handshake āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ IP address āĻāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻāϰ āϏāĻžāĻĨā§ TCP āĻāĻžāύā§āĻāĻļāύ āϤā§āϰ⧠āĻšāĻŦā§āĨ¤
āĻĒāϰāĻŦāϰā§āϤā§āϤ⧠browser TCP āĻāĻžāύā§āĻāĻļāύ āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āϏā§āĻ āϏāĻžāϰā§āĻāĻžāϰ⧠HTTP āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰā§āĨ¤
āϏāĻžāϰā§āĻāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĒā§āϰāϏā§āϏ āĻāϰ⧠āϤāĻžāϰāĻĒāϰ āϰā§āϏāĻĒāύā§āϏ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āĻŦā§āϰāĻžāĻāĻāĻžāϰ āϏā§āĻ āϰā§āϏāĻĒāύā§āϏ āĻā§ āĻŦāĻŋāĻāĻŋāύā§āύ āϏā§āĻā§āĻĒ āĻļā§āώ āĻāϰ⧠āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āĻĻā§āĻāĻžā§āĨ¤
Concurrency āĻāĻŦāĻ Parallelism āĻŦā§āĻāϤ⧠āĻšāϞ⧠āĻāĻŽāĻžāĻĻā§āϰāĻā§ Process āĻāĻŦāĻ Thread āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāϰ āĻāϞā§āĻā§ āĻŦā§āĻāϤ⧠āĻšāĻŦā§āĨ¤
Process āĻāĻŋ? āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ(code) āϝāĻāύ execution āĻ āĻŦāϏā§āĻĨāĻžā§ āĻĨāĻžāĻā§, āϤāĻāύ āϏā§āĻāĻŋ āĻāĻāĻāĻŋ ProcessāĨ¤ āĻāĻāĻŋ āĻāĻŽāύ āĻāĻāĻāĻŋ environment āĻŦāĻž container, āϝā§āĻāĻžāύ⧠āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϰ āĻāύā§āϝ āĻĒā§āϰā§ā§āĻāύā§ā§ āϏāĻŽāϏā§āϤ āϰāĻŋāϏā§āϰā§āϏ (āϝā§āĻŽāύ, CPU āĻāĻžāĻāĻŽ, āĻŽā§āĻŽāϰāĻŋ) āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰāĻž āĻšā§ āĻāĻŦāĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻāĻžāϞāĻžāύā§(execute) āĻšā§āĨ¤
Thread āĻāĻŋ? āĻāĻāĻŋ āĻŽā§āϞāϤ Process āĻāϰ SubsetāĨ¤ āĻāĻā§ Independent Execution Unit āĻ āĻŦāϞāĻž āĻšā§āĨ¤ āĻāĻāĻāĻŋ Process-āĻ āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ Thread āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§, Thread āĻŽā§āϞāϤ Process āĻāϰ Shared Resource āĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āϤāĻžāϰ āĻāĻžāĻ āĻšāĻā§āĻā§ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāϰ āĻ āĻĒāĻžāϰā§āĻļāύāĻā§āϞā§āĻā§ Concurrently āĻāĻŋāĻāĻŦāĻž Parallelly(core āĻāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰā§) execute āĻāϰāĻžāĨ¤
Thread āĻāĻžāϞā§āĻāĻžāĻŦā§ āĻŦā§āĻāĻžāϰ āĻāύā§āϝ Concurrency āĻāĻŦāĻ Parallelism āĻŦā§āĻāĻž āϝāĻžāĻāĨ¤
Concurrency āĻāĻŋ? Concurrency āĻšāĻā§āĻā§ Thread āĻāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻžāϧāĻŋāĻ āĻāĻžāĻ āĻĨā§āĻŽā§ āĻĨā§āĻŽā§ āĻāĻāϏāĻā§āĻā§ āϏāĻŽā§āĻĒāύā§āύ āĻšāĻā§āĻā§, āϝāĻĻāĻŋ ā§§āĻāĻŋ CPU āĻā§āϰ āĻĨāĻžāĻā§āĨ¤
āϧāϰā§āύ CPU āĻā§āϰ āĻšāĻā§āĻā§ ā§§āĻāĻŋ, āĻāĻāĻžāϧāĻŋāĻ āĻāĻžāĻ Thread āĻāϰ āĻŽāϧā§āϝ⧠āϝāĻāύ āĻĨāĻžāĻā§, āϤāĻāύ Context Switching āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ CPU āĻĻā§āϰā§āϤāĻāĻžāĻŦā§ āĻāĻā§ āĻ āĻĒāϰāĻā§ āϏāĻŽāϝāĻŧ āĻāĻžāĻ āĻāϰā§, āĻ āϰā§āĻĨāĻžā§ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻĨā§āĻŽā§ CPU āĻ āύā§āϝ āĻāĻžāĻ āĻļā§āϰ⧠āĻāϰā§, āϤāĻžāϰāĻĒāϰ āĻāĻŦāĻžāϰ āϏā§āĻ āĻāĻžāĻ āĻĒā§āύāϰāĻžā§ āĻāĻžāϞ⧠āĻāϰ⧠āϝāϤāĻĻā§āϰ āĻĒā§āϰā§āĻŦā§āϰ execution āĻ āϏāĻŽā§āĻĒāύā§āύ āĻšā§ā§āĻā§, āϤāĻžāϰāĻĒāϰā§āϰ āĻ āĻāĻļ āĻĨā§āĻā§ āĻāĻŦāĻžāϰ āĻļā§āϰ⧠āĻšā§āĨ¤
āϝāϤāĻā§āώāĻŖ āύāĻž āĻĒāϰā§āϝāύā§āϤ āϏāĻŦ āĻāĻžāĻ āĻļā§āώ āĻšāĻā§āĻā§, āĻāϰāĻāĻŽ āĻāϞāϤ⧠āĻĨāĻžāĻāĻŦā§āĨ¤
Parallelism āĻāĻŋ? āĻāĻāĻžāϧāĻŋāĻ āĻāĻžāĻ āĻāĻāĻ āϏāĻŽā§ā§ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§/āϏā§āĻŦāĻžāϧā§āύāĻāĻžāĻŦā§ āϏāĻŽā§āĻĒāύā§āύ āĻāϰāĻž, āĻāĻŦāĻ āĻāĻāĻŋ āϏāĻŽā§āĻāĻŦ āϝāĻāύ āĻāĻāĻžāϧāĻŋāĻ CPU core āĻĨāĻžāĻā§āĨ¤
āϧāϰā§āύ CPU āĻā§āϰ āĻšāĻā§āĻ⧠⧍āĻāĻŋ, āĻāĻāĻžāϧāĻŋāĻ āĻāĻžāĻ Thread āĻā§āϞā§āϰ āĻŽāϧā§āϝ⧠execute āĻšāĻŦā§āĨ¤
āĻāĻāĻžāϧāĻŋāĻ āĻā§āϰ āĻāϰ āĻŽāϧā§āϝā§āĻ Concurrency āĻšā§ā§ āĻĨāĻžāĻā§āĨ¤ āĻāĻāύ?
āϝāĻāύ āϏāĻŦ Thread āĻŦā§āϝāϏā§āϤ āĻšā§ā§ āĻĒā§āĻŦā§ āϤāĻāύ āĻ āύā§āϝ Task āĻā§āϞā§āϰ āĻāύā§āϝ Context Switching āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ Task āĻā§āϞ⧠āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰāĻž āĻšāĻŦā§āĨ¤
Parallelism āĻāĻĻāĻžāĻšāϰāĻŖ I/O bound task āĻāϰ āĻāύā§āϝ Node.js āĻĻāĻŋā§ā§,
const fetch = require("node-fetch");
async function fetchData() {
const urls = [
"https://jsonplaceholder.typicode.com/posts/1",
"https://jsonplaceholder.typicode.com/posts/2",
"https://jsonplaceholder.typicode.com/posts/3",
];
const promises = urls.map((url) => fetch(url).then((res) => res.json()));
const results = await Promise.all(promises); // Parallel Execution
console.log(results);
}
fetchData();
Node.js Parallel Execution āĻāϰ āĻāύā§āϝ Worker Threads, Child Processes, Cluster module āϰā§ā§āĻā§āĨ¤
High Concurrency āĻŽāĻžāύ⧠āĻšāĻā§āĻā§, āϝāĻāύ āĻāĻāĻžāϧāĻŋāĻ user āĻāĻŋāĻāĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ process āĻāĻāĻ āϏāĻŽā§/āĻāĻāĻ āĻŽā§āĻšā§āϰā§āϤ⧠āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϰāĻŋāϏā§āϰā§āϏ āĻāĻŋāĻāĻŦāĻž āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĄāĻžāĻāĻž modify āĻāϰāϤ⧠āϝāĻžā§āĨ¤ āĻāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻ āύā§āĻ āϏāĻŽāϏā§āϝāĻž āϏā§āώā§āĻāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§, āϝāĻžāϰ āĻŽāϧā§āϝ⧠āϏāĻŦāĻā§ā§ā§ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āϏāĻŽāϏā§āϝāĻž āĻšāĻā§āĻā§ Data InconsistencyāĨ¤
(āĻāϞāĻŽāĻžāύ)
āĻāĻāĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻŋ āĻāĻŋ āĻāĻžāĻ āĻāϰ⧠āϏā§āĻāĻŋ Functional Requirement āĻāϞā§āϞā§āĻ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦāϞāĻž āϝāĻžā§, āϏā§āĻļā§āϝāĻžāϞ āĻŽāĻŋāĻĄāĻŋā§āĻž āϏāĻŋāϏā§āĻā§āĻŽā§,
- āĻĒā§āϏā§āĻ āĻāϰāĻž āϝāĻžā§
- āĻĒā§āϏā§āĻā§ āϞāĻžāĻāĻ āĻāϰāĻž āϝāĻžā§
- āĻĒā§āϏā§āĻā§ āĻāĻŽā§āύā§āĻ āĻāϰāĻž āϝāĻžā§
- āĻĒā§āϏā§āĻā§ āĻĄāĻŋāϞāĻŋāĻ āĻāϰāĻž āϝāĻžā§
āĻĒā§āϰāϤāĻŋāĻāĻž āĻšāĻā§āĻā§ āĻāĻ āĻāĻāĻāĻŋ Functional RequirementāĨ¤
āĻāĻāĻŋ āĻŽā§āϞāϤ āĻāĻāĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻā§āĻŖāĻŽāĻžāύ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāϤāĻž (Quality Characteristics), āĻāĻĻāĻžāĻšāϰāĻŖ:
- Performance
- Security
- Cost
- Scalability
- Reliability
āĻĒā§āϰāϤāĻŋāĻāĻž āĻšāĻā§āĻā§ āĻāĻ āĻāĻāĻāĻŋ Non Functional RequirementāĨ¤
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻāύāĻŋāĻ āϝāĻž āĻāĻŽāĻžāĻĻā§āϰāĻā§ āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰ Load Balancer, CDN āĻāϤā§āϝāĻžāĻĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§ āĻāĻŋ āύāĻž āϤāĻžāϰ āĻāύā§āĻŽāĻžāύāĻŋāĻ āϧāĻžāϰāύāĻž āĻšāĻŋāϏāĻžāĻŦ āĻāϰ⧠āĻŦāϞ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻŦā§āϝāĻžāĻ āĻ āĻĢ āĻĻāĻž āĻāύāĻā§āϞāĻĒ āĻāϏā§āĻāĻŋāĻŽā§āĻļāύ
āĻāĻāĻāĻŋ secured āϏāĻŋāϏā§āĻā§āĻŽ design āĻāϰāϤ⧠āĻšāϞ⧠Authentication āĻāĻŦāĻ Authorization āĻāĻžāύāĻž āĻ āϤā§āϝāύā§āϤ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤ Authentication āĻŽā§āϞāϤ identity verify āĻāϰāĻžāĻā§ āĻŦā§āĻāĻžā§āĨ¤ āĻāĻŽāϰāĻž āϝāĻāύ āĻā§āύ⧠āϏāĻŋāϏā§āĻā§āĻŽā§ āĻāĻŋā§ā§ āĻāĻŽā§āĻāϞ āĻāĻŦāĻ āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄ āĻĻāĻŋā§ā§ āϞāĻāĻāύ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŋ, āϏā§āĻ āĻāĻŽā§āĻāϞ āĻāϰ āĻĒāĻžāϏāĻā§āĻžāϰā§āĻĄ āĻā§āϰāĻŋāĻĢāĻžāĻ āĻāϰ⧠āĻšāĻā§āĻā§ AuthenticationāĨ¤
Authorization āĻšāϞ⧠āĻā§āύ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϰāĻŋāϏā§āϰā§āϏ⧠āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ user āĻāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āĻāĻŋ āύāĻž āϤāĻž āĻŦā§āĻāĻžā§āĨ¤ āϝā§āĻŽāύ āĻā§āύ⧠āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ API āĻĨāĻžāĻā§ āϝāĻž āĻļā§āϧā§āĻŽāĻžāϤā§ā§° āĻāĻĄāĻŽāĻŋāύāĻŋāϏā§āĻā§āϰā§āĻāϰ āĻŽāĻžāύā§āώ āĻāĻžā§āĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻž, āĻāĻāύ āϝāĻĻāĻŋ āĻā§āĻ āĻāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻāĻžā§ āϤāĻžāĻšāϞ⧠āϏā§āĻ āĻŽāĻžāύā§āώāĻāĻž Authorize āĻāĻā§ āĻāĻŋ āύāĻž āϏā§āĻāĻžāĻ āϝāĻžāĻāĻžāĻ āĻāϰāĻž āĻšāĻā§āĻā§ AuthorizationāĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻ āĻĨā§āύāĻāĻŋāĻā§āĻļāύ āĻāĻŦāĻ āĻ āĻĨāϰāĻŋāĻāĻžāĻļāύ
āĻāĻ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ⧠āĻĄā§āĻāĻž Store āĻāĻŦāĻ Maintain Application āϏāĻžāϰā§āĻāĻžāϰ⧠āĻšā§ā§ āĻĨāĻžāĻā§āĨ¤ FTTP āĻšāϞ StatefulāĨ¤
āĻŦāĻžāϏā§āϤāĻŦ āĻā§āĻŦāύ⧠Stateful āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ āĻāϰ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāϞ Web SocketāĨ¤ Web Socket āĻŽā§āϞāϤ bidirectional, full-duplex protocolāĨ¤ āĻāĻāĻžāύ⧠Server āĻĄā§āĻāĻž store āĻāϰ⧠āϰāĻžāĻā§, āϝāĻžāϤ⧠Client āϏāĻŦāϏāĻŽā§ Server āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻĒāĻžā§āĨ¤
āĻāĻ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ⧠āĻĄā§āĻāĻž Store āĻāĻŦāĻ Maintain Application āϏāĻžāϰā§āĻāĻžāϰ⧠āĻšā§ āύāĻž āĻŦāϰāĻ āĻā§āύ⧠Database āĻŦāĻž Cache āĻ āϏā§āĻā§āϰ āĻāĻŦāĻ āĻŽā§āĻāύāĻā§āĻāύ āĻšā§āĨ¤ HTTP āĻšāϞ StatelessāĨ¤
HTTP āϏāĻŦāϏāĻŽā§ Stateless Architecture, āĻāĻžāϰāĻŖ āĻā§āύ⧠protected resource āĻāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āϏāĻŦāϏāĻŽā§ request āĻāϰāĻžāϰ āϏāĻŽā§ cookie/token āϏāĻžāĻĨā§ āĻĻāĻŋāϤ⧠āĻšā§āĨ¤ server āĻāĻāύ⧠cookie/token āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻā§ āύāĻžāĨ¤
āĻā§āϞāĻžā§ā§āύā§āĻ āϝāĻāύ āϏāĻžāϰā§āĻāĻžāϰāĻā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĒāĻžāĻ āĻžāύā§āϰ āϏāĻŽā§ āϏāϰāĻžāϏāϰāĻŋ āϏāĻžāϰā§āĻāĻžāϰāĻā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āύāĻž āĻāϰ⧠āĻ āύā§āϝ āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰāϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāϞā§, āϏā§āĻ āĻĒā§āϰāϏā§āϏ āĻšāĻā§āĻā§ āĻĒā§āϰāĻā§āϏāĻŋ āĻāĻŦāĻ āϝ⧠āϏāĻžāϰā§āĻāĻžāϰ āĻĻāĻŋā§ā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻŦā§ āϏā§āĻāĻž āĻšāĻā§āĻā§ āĻĒā§āϰāĻā§āϏāĻŋ āϏāĻžāϰā§āĻāĻžāϰāĨ¤
āĻŦāĻžāϏā§āϤāĻŦ āĻā§āĻŦāύ⧠āĻĒā§āϰāĻā§āϏāĻŋāϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻšāĻā§āĻā§ NGINXāĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻĒā§āϰāĻā§āϏāĻŋ
REST Api āĻāĻžāύāĻžāϰ āĻĒā§āϰā§āĻŦā§ āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āĻāϤ⧠āĻšāĻŦā§ āϰā§āϏā§āĻ(REST) āĻŽāĻžāύ⧠āĻāĻŋ, REST āĻŽāĻžāύ⧠āĻšāϞ Representational State Transfer āϝāĻžāϰ āĻŽāĻžāύ⧠āĻĻāĻžā§āĻžā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰāĻžāϞ āϏā§āĻāĻžāĻāϞ āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§ āϏā§āĻā§āĻ āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ āĻāϰ āĻāύā§āϝāĨ¤ āĻāĻāύ REST Api āĻšāϞ, āĻāĻ āĻĒā§āϰāĻāĻžāϰā§āϰ āĻāĻĒāĻŋāĻāĻ āĻāύāĻā§āύāĻļāύ āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§ āĻĻā§āĻāĻŋ āĻāύā§āĻĄ(āϝā§āĻŽāύāĻ āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰ) āĻāϰ āĻŽāϧā§āϝ⧠āϏā§āĻā§āĻ āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ āĻāϰāĻžāĻā§ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
āϏā§āĻā§āĻ āĻā§āϰāĻžāύā§āϏāĻĢāĻžāϰ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāϤ⧠āĻāĻŋāĻā§ āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻ HTTP Methods āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§, GET, POST, PUT, PATCH & DELETE, āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻŽā§āϝāĻžāĻĨā§āĻĄā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻžāύāϤ⧠REST Api āϏā§āĻāĻļāύ⧠āĻā§āϞāĻŋāĻ āĻāϰā§āύāĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āϰā§āϏā§āĻ āĻāĻĒāĻŋāĻāĻ
āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻā§āώāĻŽāϤāĻžāĻā§ āĻŦā§āĻāĻžā§ āϝāĻāύ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻā§āϰāĻžāĻĢāĻŋāĻā§āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻŦāĻžā§āϤ⧠āĻĨāĻžāĻā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦāϞāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§, āĻāĻāĻāĻŋ āĻā§ā§āĻŦāϏāĻžāĻāĻā§āϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāĻāύ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻž āĻšāĻā§āĻā§ āĻāĻŋāύā§āϤ⧠āĻāĻ āĻĨā§āĻā§ ā§Ģ āĻŽāĻžāϏ āĻĒāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ ā§¨ āĻā§āĻŖ āĻšā§ā§ āĻā§āϞ āϤāĻžāϰ āĻ āĻŋāĻ āĻāϰāĻ ā§Ģ āĻŽāĻžāϏ āĻĒāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ ā§Ē āĻā§āĻŖ āĻšā§ā§ āĻā§āϞ, āĻāĻāĻāĻž āϏāĻŽā§ āĻĻā§āĻāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻžāϰā§āĻāĻžāϰ āĻāϤ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āϞā§āĻĄ āύāĻŋāϤ⧠āĻĒāĻžāϰāĻā§ āύāĻž, āĻāĻ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāύā§āϝ āϏā§āĻā§āϞ āĻāϰāĻžāĻā§ āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ āĻŦāϞā§āĨ¤
āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ 2 āĻĒā§āϰāĻāĻžāϰā§āϰ, āĻāĻžāϰā§āĻāĻŋāĻāĻžāϞ āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ (Vertical Scalability) āĻāĻŦāĻ āĻšāϰāĻžāĻāĻāύā§āĻāĻžāϞ āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ (Horizontal Scalability)āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ
Database Sharding āĻšāϞ āĻā§āĻŦāĻŋāϞ āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻĒā§āĻĨāĻ āĻāϰāĻžāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ āĻŦāϞāĻž āϝāĻžā§, āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻĄā§āĻāĻž/row āϝāĻĻāĻŋ āĻŦāĻžā§āϤ⧠āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāϤ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻĄā§āĻāĻž/row āĻŦā§ā§ā§ āĻā§āϞ āϝāĻžāϰ āĻĢāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āĻŦāĻŋāϞ⧠āĻāϰ āϏā§āĻā§āϰ āĻāϰāĻž āϝāĻžā§ āύāĻž āϤāĻāύ āĻāĻŽāϰāĻž āĻĄā§āĻāĻžāĻā§āϞā§āĻā§ āĻŽā§āϞ āĻā§āĻŦāĻŋāϞ āĻĨā§āĻā§ āĻĒā§āĻĨāĻ āĻāϰ⧠āĻ āύā§āϝāĻžāύā§āϝ shard āĻā§āĻŦāĻŋāϞ⧠distribute āĻāϰ⧠āϰāĻžāĻāĻŋ āϏā§āĻāĻžāĻ Database ShardingāĨ¤ āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻļāύ āĻšāĻŦā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻĄā§āĻāĻžāĻŦā§āϏ āϏāĻžā§°ā§āĻĄāĻŋāĻ
Database Replication āĻāĻ āĻĒā§āϰāĻāĻžāϰā§āϰ Strategy, āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ Master Database āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻŋāĻāĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ Slave Database āĻĨāĻžāĻāĻŦā§āĨ¤ Master Database āĻāϰ āĻŽāϧā§āϝ⧠Insert, Delete āĻāĻŦāĻ Update āĻāϰ āĻāĻžāĻ āĻšāĻŦā§ āĻāĻŦāĻ Slave Database āĻŽāϧā§āϝ⧠Master Database āĻāϰ āĻĄā§āĻāĻžāĻā§āϞā§āϰ Copy āĻĨāĻžāĻāĻŦā§ āĻāĻŦāĻ āϤāĻžāϰ āĻŽāϧā§āϝ⧠āĻļā§āϧ⧠Read Operation āĻšāĻŦā§āĨ¤
Database Replication, SQL āĻāĻŦāĻ NoSQL āĻĻā§āĻāĻŋ āĻĄā§āĻāĻžāĻŦā§āϏ⧠āĻāϰāĻž āϝāĻžā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻĄā§āĻāĻžāĻŦā§āϏ āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύ
Caching āĻāĻāĻāĻŋ āĻā§āĻļāϞ āϝāĻž āĻĻā§āĻŦāĻžāϰāĻž āĻā§āύ Expensive Response'āĻā§ āĻā§āύ⧠āĻŽā§āĻŽā§āϰāĻŋāϤ⧠āϰāĻžāĻāĻž āĻšā§, āϝāĻžāϤ⧠āĻŦāĻžāϰ āĻŦāĻžāϰ āĻāϏāĻž āϏā§āĻ āϰā§āϏā§āĻĒāύā§āϏā§āϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻā§ āĻĻā§āϰā§āϤ āϰā§āϏāĻĒāύā§āϏāĻāĻŋ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻŽā§āϞ āϏāĻžāϰā§āĻāĻžāϰ⧠(āϝā§āĻŽāύ āĻĄāĻžāĻāĻžāĻŦā§āϏ) āĻšāĻŋāĻ āĻāϰāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻā§āϝāĻžāĻļāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ⧠āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻŦā§āĨ¤ āĻāϤ⧠āĻāϰ⧠āϝ⧠āϏā§āĻŦāĻŋāϧāĻžāĻā§āĻā§ āĻšāĻŦā§,
- Read API āϰāĻŋāĻā§ā§ā§āϏā§āĻ Fast āĻšāĻŦā§
- Latency Reduce āĻšāĻŦā§
- Fault Tolarence āĻāϰ āĻā§āĻāĻāĻŋ āĻāĻŽāĻŦā§
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻā§āϝāĻžāĻļāĻŋāĻ
Content Delivery Network āĻ āĻĨāĻŦāĻž CDN, āĻāĻāĻŋ āĻāĻāĻāĻŋ āϏāĻŋāϏā§āĻā§āĻŽ āϝā§āĻāĻžāύ⧠āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻŽāĻžāĻĻā§āϰ āĻā§āĻā§āϞāĻŋāĻ āĻāϰ āĻāϏā§āĻĒāĻžāĻļā§ āĻĨāĻžāĻā§, āϝāĻžāϤ⧠āĻāĻŽāϰāĻž āĻā§āĻŦ āĻĻā§āϰā§āϤ āĻāύā§āĻā§āύā§āĻ āĻĒā§āϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻāύā§āĻā§āύā§āĻāĻāĻŋ āĻšāϤ⧠āĻĒāĻžāϰ⧠JS, CSS, Images āĻāĻŋāĻāĻŦāĻž VideosāĨ¤
āĻāĻŽāĻžāĻĻā§āϰ CDN āϏāĻžāϰā§āĻāĻžāϰ āϝāĻĻāĻŋ India āϤ⧠āĻĨāĻžāĻā§ āĻāϰ āĻāĻŽāϰāĻž Bangladesh āĻĨā§āĻā§ content request āĻāϰāĻŋ āϤāĻžāĻšāϞ⧠āĻā§āĻŦ āϤāĻžā§āĻžāϤāĻžā§āĻŋ content āĻĒāĻžāĻŦāĨ¤ āĻāĻžāϰāĻŖ āϤāĻāύ Latency āĻāĻŽā§ āϝāĻžāĻŦā§āĨ¤ āĻāϰ āĻāĻŽāϰāĻž Bangladesh āĻĨā§āĻā§ England-āĻ āϝā§āĻāĻžāύ⧠āĻŽā§āϞ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻā§, āϏā§āĻāĻžāύ⧠āĻāύāĻā§āύā§āĻ āĻāϰ āĻāύā§āϝ request āĻāϰāϞ⧠Latency āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻāĻāĻžāĻŦā§ āĻŦā§āĻĻā§āϧāĻŋ āĻĒāĻžāĻŦā§, āϝā§āĻšā§āϤ⧠āĻĻā§āĻ āĻĻā§āĻļā§āϰ āĻĻā§āϰāϤā§āĻŦ āĻŦā§āĻļāĻŋāĨ¤
āϝ⧠āϝ⧠āϞā§āĻā§āĻļāύ⧠CDN āϏāĻžāϰā§āĻāĻžāϰ āĻāĻā§ āϏā§āĻ āϞā§āĻā§āĻļāύāĻā§āϞā§āĻā§ Point of Presence āĻŦāĻž PoP āĻŦāϞā§āĨ¤ āϝ⧠āϏāĻžāϰā§āĻāĻžāϰ PoP āĻāϰ āĻāĻŋāϤāϰ⧠āĻĨāĻžāĻā§ āϤāĻžāĻā§ Edge Server āĻŦāϞā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻāύāĻā§āύā§āĻ āĻĄā§āϞāĻŋāĻāĻžāϰāĻŋ āύā§āĻāĻā§āĻžāϰā§āĻ
Rate Limiter āĻāĻāĻāĻŋ āĻĒā§āϰāϏā§āϏ, āϝā§āĻāĻžāύ⧠āĻā§āϞāĻžā§ā§āύā§āĻ āĻĨā§āĻā§ āĻāϏāĻž āϰāĻŋāĻā§ā§ā§āϏā§āĻ āϏāĻžāϰā§āĻāĻžāϰ⧠āϝāĻžāĻā§āĻžāϰ āĻĒā§āϰā§āĻŦā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻāĻāĻŋ āĻāύā§āĻā§āϰā§āϞ āĻāϰāĻž āĻšā§āĨ¤ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽā§ā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϰāĻŋāĻā§ā§ā§āϏā§āĻ Rate Limiter āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏāĻžāϰā§āĻāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻā§āϰāĻšāĻŖ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒāϰāĻŋāĻŽāĻžāύā§āϰ āĻā§ā§ā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻŦā§āĻļāĻŋ āĻšā§ā§ āĻā§āϞ⧠Rate Limiter āϰāĻŋāĻā§ā§ā§āϏā§āĻāĻā§āϞā§āĻā§ block āĻāϰ⧠āĻĢā§āϞā§, āϝāĻžāϰ āĻĢāϞ⧠āϰāĻŋāĻā§ā§ā§āϏā§āĻāĻā§āϞ⧠āĻāϰ āϏāĻžāϰā§āĻāĻžāϰ⧠āϝā§āϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤
āĻāĻāĻžāύ⧠āĻŽā§āϞ āĻĒā§ā§āύā§āĻ ā§¨āĻāĻŋ, āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽā§ āĻāĻŦāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϰāĻŋāĻā§ā§ā§āϏā§āĻāĨ¤
āĻāĻĒāϰā§āϰ āĻāĻŦāĻŋāϤ⧠āĻĻā§āĻāĻž āϝāĻžāĻā§āĻā§, āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāĻŦāĻ āϰā§āϏā§āĻĒāύā§āϏā§āϰ āĻŽāϧā§āϝ⧠middleware āĻšāĻŋāϏā§āĻŦā§ rate limiter āĻāĻā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āϰā§āĻāĻ āϞāĻŋāĻŽāĻŋāĻāĻžāϰ
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāύāϏā§āĻĒā§āĻ āĻŦāĻž āĻĨāĻŋāĻāϰāĻŋ āϝāĻž āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āĻāĻž āϝāĻžā§, āĻāĻāĻāĻŋ Distributed System āĻ āĻāϞā§āϞāĻŋāĻāĻŋāϤ āϤāĻŋāύāĻāĻŋ āĻĒā§āϰā§āĻĒāĻžāϰā§āĻāĻŋ āĻĨā§āĻā§ āĻĻā§āĻāĻāĻŋ āĻĒā§āϰā§āĻĒāĻžāϰā§āĻāĻŋ āϏāĻŦāϏāĻŽā§ āĻŽā§āύ⧠āĻāϞāĻŦā§āĨ¤
- C āĻŽāĻžāύ⧠Consistency
- A āĻŽāĻžāύ⧠Availability
- P āĻŽāĻžāύ⧠Partition Tolerance
Consistency āĻšāĻā§āĻā§ āĻāĻāĻāĻŋ āĻā§āϰāĻžāύā§āϏā§āĻāĻļāύ (Transection) āĻļā§āώ āĻšāĻā§āĻžāϰ āĻĒāϰ āϏāĻŦ āύā§āĻĄā§ āϏāĻŦāϏāĻŽā§ consistent āĻŦāĻž āĻāĻāĻ value āĻĨāĻžāĻāĻŦā§āĨ¤
Availability āĻŽāĻžāύ⧠āĻšāĻā§āĻā§ āĻĒā§āϰāϤāĻŋāĻāĻŋ read āĻāĻŦāĻ write āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻšā§ āĻĒā§āϰāϏā§āϏ(process) āĻšāĻŦā§ āύāĻž āĻšā§ āĻā§āύ⧠message āĻĒāĻžāĻŦā§ āϝ⧠āĻ āĻĒāĻžāϰā§āĻļāύ(request) āĻĒā§āϰāϏā§āϏ(process) āĻšāĻā§āĻā§ āύāĻžāĨ¤
Partition Tolerance āĻšāĻā§āĻā§ āĻāĻāĻžāϧāĻŋāĻ āύā§āĻĄ āĻāĻā§ āĻ āĻĒāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻžāύā§āĻāĻļāύ(connection) āύāώā§āĻ āĻšāϞā§āĻ, read āĻāĻŦāĻ write āĻ āĻĒāĻžāϰā§āĻļāύ āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻĒā§āϰāϏā§āϏ āĻšāĻŦā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻā§āϝāĻžāĻĒ āĻĨāĻŋāĻāϰāĻžāĻŽ
Polling āĻŽāĻžāύ⧠āĻšāĻā§āĻā§ client regular interval āĻ server āĻā§ āĻŦāĻžāϰ āĻŦāĻžāϰ āĻĄā§āĻāĻžāϰ āĻāύā§āϝ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻŦā§āĨ¤ āϝā§āĻŽāύ, āĻā§āϞāĻžā§ā§āύā§āĻ āĻĒā§āϰāϤāĻŋ ā§Ģ āϏā§āĻā§āύā§āĻĄ āĻĒāϰ āĻĒāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻŦā§ āĻāϰ āϏāĻžāϰā§āĻāĻžāϰ āϤāĻžāϰ āϰā§āϏāĻĒāύā§āϏ āĻĻāĻŋāĻŦā§āĨ¤
Polling āĻāϰ āϏāĻŦāĻā§ā§ā§ āĻŦā§ āϏāĻŽāϏā§āϝāĻž āĻšāĻā§āĻā§ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ Bandwidth āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻā§āĻžāĨ¤
Web Socket āĻŽāĻžāύ⧠āĻšāĻā§āĻā§ Socket āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻŦāĻ āĻā§āϞāĻžā§ā§āύā§āĻ āĻāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻāĻžāύā§āĻāĻļāύ āϤā§āϰ⧠āĻšāĻŦā§ āϝāĻž āĻā§āϞāĻžā§ā§āύā§āĻ āĻŦāĻž āϏāĻžāϰā§āĻāĻžāϰ āϝāϤāĻā§āώāύ āĻĒāϰā§āϝāύā§āϤ disconnected āύāĻž āĻšāĻā§āĻā§ āϤāϤāĻā§āώāύ āĻĒāϰā§āϝāύā§āϤ āĻāĻžāύā§āĻāĻļāύ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻāĻžāύ⧠āϏāĻžāϰā§āĻāĻžāϰāĻā§ āĻŦāĻžāϰ āĻŦāĻžāϰ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻāϰāĻž āϞāĻžāĻāĻŦā§ āύāĻž, āϝā§āĻšā§āϤ⧠āĻāĻžāύā§āĻāĻļāύ āĻāĻā§ āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāϰ āĻŽāϧā§āϝ⧠āϏā§āĻšā§āϤ⧠āĻā§āύ⧠āĻĒā§āϰāĻāĻžāϰā§āϰ event āϏāĻžāϰā§āĻāĻžāϰ⧠āϏāĻāĻāĻāĻŋāϤ āĻšāϞ⧠āϏāĻžāϰā§āĻāĻžāϰ āĻāϰ āϰā§āϏāĻĒāύā§āϏ āĻā§āϞāĻžā§ā§āύā§āĻāĻā§ āĻĒāĻžāĻ āĻŋā§ā§ āĻĻāĻŋāĻŦā§āĨ¤ Web Socket āĻā§āĻāύā§āϞāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Chat Application āĻŦāĻžāύāĻžāύ⧠āϝāĻžā§āĨ¤
Web Socket āĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻŦāĻ āĻā§āϞāĻžā§ā§āύā§āĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻāĻžāύā§āĻāĻļāύ āϤā§āϰ⧠āĻšā§, āĻ āϰā§āĻĨāĻžā§ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāĻŋāϤāϰ āĻā§āϞāĻžā§ā§āύā§āĻā§āϰ āĻāĻŋāĻā§ āĻāύāĻĢāϰāĻŽā§āĻļāύ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§ āϝāĻžāϤ⧠āϏāĻžāϰā§āĻāĻžāϰ āĻā§āϞāĻžā§ā§āύā§āĻāĻā§ āĻā§āϰā§āϝāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāύā§āϝ āĻāĻāĻŋāĻā§ Stateful Architecture āĻŦāϞāĻž āĻšā§āĨ¤
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āϰāϏā§āϏ āϝā§āĻāĻžāύ⧠āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ Producer āĻĨāĻžāĻāĻŦā§, āϝāĻžāĻĻā§āϰ āĻāĻžāĻ āĻšāĻā§āĻā§ Message(āĻāĻāĻžāύ⧠message āĻŽāĻžāύ⧠āϰāĻŋāĻā§ā§ā§āϏā§āĻ) Queue āĻāϰ āĻŽāϧā§āϝ⧠send āĻāϰāĻž āĻāĻŦāĻ queue āϏā§āĻ āϰāĻŋāĻā§ā§ā§āϏā§āĻāĻā§āϞā§āĻā§ āĻĒā§āϰāϏā§āϏ āĻāϰ⧠āĻŦāĻŋāĻāĻŋāύā§āύ consumer āĻāϰ āĻāĻžāĻā§ āĻĒāĻžāĻ āĻŋā§ā§ āĻĻā§ā§āĨ¤
āϏāĻŋāϏā§āĻā§āĻŽā§āϰ Throughput āĻŦā§āĻĻā§āϧāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ Message Queue āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤
Message Queue āĻĒā§āϰāϤāĻŋāĻāĻž Task āĻā§ Asynchronously āĻĒā§āϰāϏā§āϏ āĻāϰ⧠āĻĨāĻžāĻā§, āĻŽāĻžāύ⧠āĻāĻāĻāĻŋ Task āĻĒā§āϰāϏā§āϏ āĻšā§ āϤāĻāύ āĻ āύā§āϝ task āĻāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰ⧠āύāĻžāĨ¤
āĻĒāĻĒā§āϞāĻžāϰ Streaming Service Netflix, Airbnb āĻāϤā§āϝāĻžāĻĻāĻŋ Message Queue āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ Agoda āϤāĻžāĻĻā§āϰ Analytical Data, Real-time Monitoring āĻāϰ Solution āĻāϰ āĻāύā§āϝ Message Queue āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϏāĻā§, 1.8 trillion events āĻĒā§āϰāϤāĻŋ āĻĻāĻŋāύ Message Queue āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āϰāϏā§āϏ āĻāϰ⧠āĻāϏāĻā§āĨ¤
āĻāĻŽāϰāĻž āϝ⧠āĻā§āύ⧠Food Delivery āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻāĻĨāĻž āĻāĻŋāύā§āϤāĻž āĻāϰāĻŋ āϝāĻĻāĻŋ, āϝā§āĻāĻžāύ⧠āĻāĻāĻāύ Delivery boy āĻāϰ āϞāĻžāĻāĻ āϞā§āĻā§āĻļāύ āĻāĻŽāϰāĻž āϝāĻĻāĻŋ Pooling āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ ā§Ģ āϏā§āĻā§āύā§āĻĄ āĻĒāϰ āĻĒāϰ āύāĻŋā§ā§ āĻĨāĻžāĻāĻŋ āĻāĻŦāĻ āĻā§āύ āϏāĻŽā§ā§ āĻā§āύ āϞā§āĻā§āĻļāύ⧠āĻāĻŋāϞ āϏā§āĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŽāϧā§āϝ⧠āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻāĻŋāĨ¤ āĻāĻāĻāύ āĻāĻāĻāĻžāϰ āĻāϰ āĻāύā§āϝ āĻāĻŋāύā§āϤāĻž āĻāϰāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŋāϏā§āĻā§āĻŽ āĻ āĻŋāĻāĻŽāϤ⧠āĻāĻžāĻ āĻāϰāĻŦā§, āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻāĻŦā§āĨ¤
āĻāĻŋāύā§āϤ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻāĻāύ āĻŽāĻžāύā§āώ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§ āύāĻžāĨ¤ āĻšāĻžāĻāĻžāϰ āĻšāĻžāĻāĻžāϰ Delivery boy āĻāϰ āϞāĻžāĻāĻ āϞā§āĻā§āĻļāύ āĻāĻŽāϰāĻž āϝāĻĻāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āĻā§āϰ⧠āĻāϰ⧠āϰāĻžāĻāĻŋ, āϤāĻžāĻšāϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŋāϏā§āĻā§āĻŽ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāĻŦā§āĨ¤ āĻāĻžāϰāĻŖ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ Throughput āĻāĻŽāĨ¤
āĻāĻ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻāĻŽāϰāĻž Message Queue āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦāĨ¤ ⧍ āĻāĻŋ āĻāύāĻĒā§āϰāĻŋā§ Message Queue āĻšāĻā§āĻā§,
- Kafka
- RabbitMQ
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻŽā§āϏā§āĻ āĻāĻŋāĻ
Single Sign-On āĻāĻŋāĻāĻŦāĻž SSO āĻšāϞ āĻāĻāĻāĻŋ Authentication MechanismāĨ¤ āϝāĻž user āĻā§ āĻāĻāĻžāϧāĻŋāĻ āĻĒā§āϞāĻžāĻāĻĢāϰā§āĻŽ (āĻā§āĻāϞ, āĻĢā§āĻāϏāĻŦā§āĻ, āĻā§āĻāĻāĻžāϰ) āĻĻāĻŋā§ā§ Authenticate āĻāϰ⧠āĻĻā§ā§, āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ credential āĻŽāĻžāϧā§āϝāĻŽā§āĨ¤
(āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāϞāĻŽāĻžāύ)
āĻāĻāĻŋ āĻāĻāĻāĻŋ NoSQL āĻāĻŋāϤā§āϤāĻŋāĻ āĻĄā§āĻāĻžāĻŦā§āϏāĨ¤ āĻŽā§āϞāϤ āĻāĻāĻŋāĻā§ Distributed Search āĻāĻŦāĻ Aggregation Engine āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤ Elasticsearch āĻāϰ āĻāĻŋāϤāϰ structured āĻāĻŦāĻ unstructured data āϏā§āĻā§āϰ āĻāϰ⧠āϰāĻžāĻāĻž āϝāĻžā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻāϞāĻžāϏā§āĻāĻŋāĻāϏāĻžāϰā§āĻ
Bloom Filter āĻāĻāĻāĻŋ Probabilistic Data StructureāĨ¤ Hashing āĻā§āĻāύāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻžāύ⧠āĻĄā§āĻāĻž insert āĻāϰāĻž āĻšā§āĨ¤ āĻāĻāĻŋ āĻā§āĻŦāĻ Faster āĻāĻŦāĻ āĻŽā§āĻŽā§āϰāĻŋ EfficientāĨ¤
Bloom Filter āĻāϰ āĻŦā§āϝāĻžāĻĒāĻžāϰ⧠āĻāĻžāύāĻžāϰ āĻĒā§āϰā§āĻŦā§ Hashing āĻāĻŋ āĻāĻžāύāĻž āύā§ā§āĻž āϝāĻžāĻāĨ¤ āĻāĻāĻāĻŋ Hash Function āύāĻŋāĻā§āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ⧠input āύāĻŋā§ā§ āĻĨāĻžāĻā§ āĻāĻŦāĻ āϏā§āĻ input āĻā§ āĻĒā§āϰāϏā§āϏ āĻāϰ⧠āĻāĻāĻāĻŋ āĻĢāĻŋāĻā§āϏāĻĄ length āĻāϰ unique identifier āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖ, āĻāύāĻĒā§āĻ 'david' āĻšāϞ⧠āĻāĻāĻāĻĒā§āĻ āĻšāĻŦā§ 5
// hash function
function generateHash(table_size, user) {
let index;
let user_length = user.length;
index = user_length % table_size;
return index;
}
generateHash(10, "david"); // 5
Bloom Filter Data Structure āĻ Hash function āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāϰāĻž set āĻāϰ āĻŽāϧā§āϝ⧠specific position āĻ element insert āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āϤāĻžāϰāĻĒāϰ set āĻāϰ āĻŽāϧā§āϝ⧠specific element āϏāĻžāϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
āĻāϰ āĻŽāϧā§āϝ⧠āϝāĻāύ āĻāĻŽāϰāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ element āϏāĻžāϰā§āĻ āĻāϰāĻŋ āϤāĻāύ āĻāĻŽāϰāĻž āĻĻā§āĻāĻŋ āĻāĻŋāύāĻŋāϏā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻĒāĻžāĻŦā§,
-
āĻšā§ possibly yes - āĻŽāĻžāύ⧠element, set āĻāϰ āĻŽāϧā§āϝ⧠āĻĨāĻžāĻāĻŦā§ āϤāĻŦā§ āύāĻž āĻĨāĻžāĻāĻžāϰ āϏāĻžāĻŽāĻžāύā§āϝ āĻāĻŋāĻā§ āϏāĻŽā§āĻāĻžāĻŦāύāĻž āĻāĻā§āĨ¤
-
āύāĻž āĻšā§ no - āĻŽāĻžāύ⧠element, set āĻāϰ āĻŽāϧā§āϝ⧠āύāĻžāĻāĨ¤
āĻāĻāύā§āϝ āϤāĻžāĻā§ Probabilistic Data Structure āĻŦāϞāĻž āĻšā§āĨ¤
đ āĻāϰāĻ āĻĒā§ā§āύ: āĻŦā§āϞā§āĻŽ āĻĢāĻŋāϞā§āĻāĻžāϰ
OAuth2 āĻšāϞ āĻāĻ āĻĒā§āϰāĻāĻžāϰā§āϰ Authorization Grant TechniqueāĨ¤ āĻāĻāĻŋ Google, Facebook āĻāϰ āĻŽāϤ āĻā§ā§āĻŦāϏāĻžāĻāĻ āĻĨā§āĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ information āĻāύāϤ⧠āĻĒāĻžāϰ⧠āĻā§āύ⧠āĻĒā§āϰāĻāĻžāϰā§āϰ password āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ sensitive information āĻāĻžā§āĻžāĨ¤ āĻāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ information āĻ āĻāĻāĻāĻŋ Access Token āĻĨāĻžāĻā§ āϝāĻž āĻĻā§āĻŦāĻžāϰāĻž āĻāĻŽāϰāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϰāĻŋāϏā§āϰā§āϏ(āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻā§āύ⧠āĻā§ā§āĻŦāϏāĻžāĻāĻ āĻ Login) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
āĻāĻāĻŋ āϝā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§,
āϧāϰā§āύ āĻāĻĒāύāĻŋ āĻā§āύ⧠āĻā§ā§āĻŦāϏāĻžāĻāĻā§ āϞāĻāĻāύ āĻāϰāĻā§āύāĨ¤ āϏā§āĻāύā§āϝ āĻāĻĒāύāĻŋ Continue with Google āĻŦāĻžāĻāύ āĻā§āϞāĻŋāĻ āĻāϰāϞā§āύ,
-
āĻĒā§āϰāĻĨāĻŽā§ āĻā§ā§āĻŦāϏāĻžāĻāĻ (āĻŽāĻžāύ⧠āĻā§āϞāĻžā§ā§āύā§āĻ) Google-āĻāϰ Authorization Server-āĻ āĻāĻāĻāĻŋ Authorization Request āĻĒāĻžāĻ āĻžā§āĨ¤
-
Google āĻāĻāĻāĻžāϰāĻā§ āϤāĻžāϰ āϞāĻāĻāύ āĻĒā§āĻā§ āϰāĻŋāĻĄāĻžāĻāϰā§āĻā§āĻ āĻāϰā§, āϝā§āĻāĻžāύ⧠āϏ⧠Email āĻ Password Google-āĻāϰ āĻĒā§āĻāĻā§ āĻāύāĻĒā§āĻ āĻĻā§ā§āĨ¤
-
āĻāĻāĻāĻžāϰ āϝāĻĻāĻŋ āϏāĻĢāϞāĻāĻžāĻŦā§ āϞāĻāĻāύ āĻāϰ⧠āĻāĻŦāĻ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻĻā§ā§, āϤāĻāύ Google āĻā§āϞāĻžā§ā§āύā§āĻāĻā§ āĻāĻāĻāĻŋ Authorization Code āĻĒāĻžāĻ āĻžā§āĨ¤
-
āĻā§āϞāĻžā§ā§āύā§āĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāĻ Authorization Code āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Google-āĻāϰ Authorization Server-āĻ āĻāĻāĻāĻŋ Access Token āĻāϰ āĻāύā§āϝ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĒāĻžāĻ āĻžā§āĨ¤
-
Google āĻāĻāĻāĻŋ Access Token (āĻāĻŦāĻ āϏāĻŽā§āĻāĻŦ āĻšāϞ⧠ID Token) āĻĒāĻžāĻ āĻžā§ āĻā§āϞāĻžā§ā§āύā§āĻ āϏāĻžāϰā§āĻāĻžāϰāĻā§āĨ¤
-
āĻāϰāĻĒāϰ āĻā§āϞāĻžā§ā§āύā§āĻ āĻāĻ Access Token āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Google-āĻāϰ Resource Server āĻĨā§āĻā§ āĻāĻāĻāĻžāϰā§āϰ āϤāĻĨā§āϝ (āϝā§āĻŽāύ āύāĻžāĻŽ, āĻāĻŽā§āĻāϞ) āϏāĻāĻā§āϰāĻš āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
Netflix High Availability āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŋāĻā§ āĻāĻŋāĻĒāϏ āĻļā§ā§āĻžāϰ āĻāϰā§āĻāĻŋāϞ(āϝā§āĻā§āϞ⧠āĻāϰāĻž āύāĻŋāĻā§ follow āĻāϰ⧠āĻĨāĻžāĻā§) āϝāĻž āĻāĻŽāĻžāĻĻā§āϰ āĻ āύā§āĻ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻāĻžāĻā§ āϞāĻžāĻāĻŦā§,
-
Regional deployment over global ones: Deployment āĻāĻŽāϰāĻž region by region āĻāϰāĻŦā§, āϝāĻžāϤ⧠region āĻ impact āĻāĻŋ observe āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻā§āύ⧠āĻĒā§āϰāĻāĻžāϰā§āϰ āϏāĻŽāϏā§āϝāĻž āĻšāϞ⧠āĻāĻŽāϰāĻž Rollback āĻāϰ⧠āĻĒā§āϰā§āĻŦā§āϰ āϏā§āĻā§āĻ āĻ āĻāϞ⧠āϝā§āϤ⧠āĻĒāĻžāϰāĻŦā§, āϤāĻāύ āĻ āύā§āϝ region āĻāϰ āĻāĻĒāϰ āĻā§āύ⧠āύā§āĻā§āĻāĻŋāĻ āĻāĻŽāĻĒā§āϝāĻžāĻā§āĻ āĻĒāϰāĻŦā§ āύāĻžāĨ¤
-
Use Blue/Green deployment strategy: āĻāĻ strategy āϤ⧠Deploy āĻāϰāĻžāϰ āϏāĻŽā§ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻĻā§āĻāĻŋ āĻāĻžāϰā§āϏāύ āĻĨāĻžāĻā§, Blue āĻšāϞ āĻŦāϰā§āϤāĻŽāĻžāύ āĻāĻžāϰā§āϏāύ āĻāĻŦāĻ green āĻšāϞ āύāϤā§āύ āĻāĻžāϰā§āϏāύāĨ¤ Green āĻāĻžāϰā§āϏāύ āĻā§āϏā§āĻ āĻāϰāĻž āĻšā§ā§ āĻā§āϞā§, āϏāĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻ āĻĨāĻžāĻāϞ⧠āĻāĻŽāϰāĻž Blue āĻāĻžāϰā§āϏāύ āĻĨā§āĻā§ āϏāĻŦāĻāĻŋāĻā§ Green āĻāĻžāϰā§āϏāύ⧠āύāĻŋā§ā§ āϝāĻžāĻŦāĨ¤
-
Use deployment windows: Deployment āĻāĻŽāϰāĻž office hour āĻāĻŦāĻ off-peak āĻāϰ āϏāĻŽā§ āĻāϰāĻŦāĨ¤
-
Enable Chaos Monkey: āĻāĻāĻŋ āĻāĻāĻāĻŋ Tool āϝāĻž āĻāĻŽāĻžāĻĻā§āϰ production āϏāĻžāϰā§āĻāĻžāϰāĻā§ āĻā§āϰā§āϝāĻžāĻļ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāϤ⧠āĻāϰ⧠āĻāĻŽāϰāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻšāϤ⧠āĻĒāĻžāϰāĻŦ āĻāĻŽāĻžāĻĻā§āϰ āϏāĻŋāϏā§āĻā§āĻŽāĻāĻŋ āĻāϤ resilienceāĨ¤
-
Deploy exactly what you tested to production: āϝ⧠āĻĒāĻžāϰā§āĻ āĻāϰ āĻā§āϏā§āĻāĻŋāĻ āĻāϰāĻž āĻšā§ āϏā§āĻ āĻĒāĻžāϰā§āĻ Deploy āĻāϰāĻž āĻšāĻŦā§āĨ¤
Original Post: https://netflixtechblog.medium.com/tips-for-high-availability-be0472f2599c
āĻāĻāĻāύ āĻāĻžāϞ⧠system designer āĻšāϤ⧠āĻšāϞā§, āĻāĻŽāĻžāĻĻā§āϰāĻā§ real-world āϏāĻŽāϏā§āϝāĻžāĻā§āϞā§āϰ requirements āĻāĻŦāĻ planning āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻŦā§āĻāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻŽāĻŋ āĻāĻāĻžāύ⧠āĻāĻŋāĻā§ āϏāĻŽāϏā§āϝāĻž āĻāĻŦāĻ āϏā§āĻ āϏāĻŽāϏā§āϝāĻžāĻā§āϞā§āϰ āϏāĻŽāĻžāϧāĻžāύā§āϰ āϧāĻžāϰāĻž āĻāĻŽāĻŋ āĻŦāϰā§āĻŖāύāĻž āĻāϰāĻāĻŋāĨ¤
- Design a Highly Concurrent Wordcamp Event Booking System
- Design a Highly Concurrent Wordcamp Event Booking System, with Performance and Consistency in mind
- Design a Scalable One to One and One to Many chat system
- Design a Live Streaming platform like Twitch
- Design an Image Service that supports ~5M uploads/hour (~1.39k uploads/sec)
- Design a High-Scale Unique User Counting System
- Design a Real-time Collaborative Editor
- Design a Content Delivery Network (CDN)
- Design a scalable blob storage like Amazon's S3