সরাসরি পর্বে যান
পর্ব ৬৪ · ৬৬-এর মধ্যে · মডিউল ১০

লিখিত ও মৌখিক (ভাইভা) প্রশ্ন — scaling, storage, distributed systems আর architecture

System Design — Written and Viva Questions: Mark-Oriented Model Answers, Exam Diagrams, Trade-off Tables and Module-Wise Oral Drills

Taught in Bangla, this page prepares written and oral exams: how to structure mark-oriented answers and draw architecture, sequence and state diagrams, 39 written questions across all case-study and theory modules with model answers, where marks are earned and lost, trade-off tables, and a viva section with a three-sentence answer pattern, a sample viva and module-wise quick-fire questions.

এই পর্বে যা শিখবেন

  • System design-এর লিখিত উত্তর নম্বর-ভাগের ক্রমে সাজানো, আর খাতায় পরিষ্কার architecture, sequence ও state diagram আঁকা
  • Scaling, load balancing, consistent hashing, storage engine, replication, sharding, isolation আর distributed transaction-এর নির্ভুল মডেল উত্তর
  • Caching, messaging, delivery semantics, clock, quorum, Raft, fencing আর Bloom filter — যাচাই করা সংখ্যাসহ
  • Microservices, resilience, rate limiting, SLO, disaster recovery, নিরাপত্তা, deployment আর case study ধাঁচের নকশার প্রশ্ন
  • ভাইভায় দুই–চার বাক্যে উত্তর, follow-up সামলানো, সাধারণ ভুল এড়ানো আর AI-এর দেওয়া উত্তর যাচাই করা

১ · উত্তর লেখার কৌশল — কাঠামো, নম্বর-ভাগ, খাতায় ছবি আর সময়

লিখিত পরীক্ষা আর ভাইভা-য় একই জ্ঞানে দুজন আলাদা নম্বর পান — যিনি ছবিতে leader আর follower আলাদা করে আঁকেন, async-এর দাম বলেন আর নিজে থেকে read-your-writes-এর সমস্যা তোলেন, তিনি বেশি পান। পরীক্ষকের হাতে থাকে একটি মার্ক-স্কিম — কোন অংশে কত নম্বর। ডাকঘরে চিঠি যেমন জেলা ধরে আলাদা খোপে সাজানো থাকলে কোনোটি হারায় না, উত্তরের অংশগুলোও আলাদা শিরোনামে সাজানো থাকলে পরীক্ষক প্রতিটি নম্বর খুঁজে পান।

পূর্ণ নম্বরের কাঠামো
সংজ্ঞা → কীভাবে কাজ করে → ছবি বা টেবিল → সংখ্যা বা উদাহরণ → trade-off ও ব্যর্থতা → উপসংহার
  1. সংজ্ঞা (এক–দুই বাক্য): নির্ভুল আর শর্তসহ। “Load balancer হলো একদল সার্ভারের সামনের একটি প্রবেশপথ, যা আসা অনুরোধ সুস্থ সার্ভারগুলোর মধ্যে ভাগ করে।”
  2. কীভাবে কাজ করে: ধাপে ধাপে, নম্বর দেওয়া তালিকায় — অনুরোধ কোথা থেকে কোথায় যায়, কে কী সিদ্ধান্ত নেয়।
  3. ছবি বা টেবিল: একটি architecture diagram, একটি sequence diagram বা তুলনার টেবিল। “পার্থক্য লিখুন” প্রশ্নে টেবিল প্রায় বাধ্যতামূলক।
  4. সংখ্যা বা উদাহরণ: ছোট, নির্দিষ্ট — “ধরা যাক সেকেন্ডে ২,০০০ অনুরোধ, গড়ে ১৫০ ms”. সূত্র → মান বসানো → একক সহ উত্তর।
  5. Trade-off ও ব্যর্থতা: এই বিষয়ের প্রাণ। কী পেলেন, কী দিলেন, কখন এটি বেছে নেবেন না, আর কোনো অংশ বিকল হলে কী ঘটে।
  6. উপসংহার: এক–দুই বাক্যে কোথায় কোনটি — “টাকা কাটায় CP, like গণনায় AP”.

নিচের প্রতিটি মডেল উত্তর এই ক্রম মেনেছে — মুখস্থ নয়, কাঠামোটি শিখুন।

প্রশ্নের ক্রিয়াপদ কী চায়

প্রশ্নে লেখাসাধারণ নম্বরযা দিতেই হবে
সংজ্ঞা দিন / কী?২–৩শর্তসহ এক বাক্য + কেন লাগে + একটি উদাহরণ
পার্থক্য লিখুন৪–৫একই মাপকাঠির সারি দিয়ে টেবিল (অন্তত চারটি সারি) + শেষে “কখন কোনটি”
তালিকা দিন, যুক্তিসহ৪–৫নম্বর দেওয়া তালিকা, প্রতিটির পাশে এক লাইনের “কারণ”
ছবিসহ ব্যাখ্যা করুন৮–১০লেবেলসহ ছবি, নম্বর দেওয়া ধাপ, একটি সংখ্যা বা উদাহরণ, trade-off
নকশা করুন১০পরিধি ও অনুমান → ছোট হিসাব → API ও data model → ছবি → দুটি deep dive → ব্যর্থতা ও trade-off
মূল্যায়ন বা সমালোচনা করুন৫–১০কোথায় ভাঙবে (SPOF, hot spot, consistency), কেন, আর কী বদলাতে হবে — দামসহ

খাতায় architecture diagram — যা থাকতেই হবে

  • ওপর থেকে নিচে, বাঁ থেকে ডানে: ওপরে client, তারপর DNS/CDN, load balancer, সার্ভিস, তারপর cache আর queue, নিচে database. অনুরোধের পথ চোখে এক দিকে বয়ে চলে।
  • আকারের প্রথা: সার্ভিস আয়তক্ষেত্র, database সিলিন্ডার, queue লম্বা চ্যাপ্টা বাক্স; একই রকম কয়েকটি কপি হলে তিনটি বাক্স বা একটি বাক্সে “×৩”।
  • প্রতিটি বাক্সে দুই লাইন: নাম আর ভূমিকা (“Cache — cache-aside, TTL”). শুধু “Redis” লিখলে পরীক্ষক জানেন না আপনি সেটি কী কাজে লাগাচ্ছেন।
  • তীরে ক্রমিক নম্বর: ১, ২, ৩… — আর ছবির পাশে বা নিচে সেই নম্বর ধরে এক লাইনের ব্যাখ্যা। লেখায় “ধাপ ৩-এ cache miss” বললেই পরীক্ষক ছবিতে খুঁজে পান।
  • দুই রকম দাগ: কঠিন দাগ মানে সাথে সাথে উত্তর (sync), ড্যাশ মানে পরে বা পেছনে (async, replication) — নিচে একটি legend.
  • পেন্সিল, রুলার, আধা পাতা: ছোট গিজগিজে ছবির চেয়ে কম বাক্সের পরিষ্কার ছবি ভালো। একটি ছবিতে ১০–১২টির বেশি বাক্স নয়; বাকিটা দ্বিতীয় ছোট ছবিতে (deep dive).
  • ব্যর্থতার জায়গা চিহ্নিত: যে অংশ একা — একটি তারা বা “SPOF?” লিখে পাশে প্রতিকার।

খাতার ধাঁচে একটি পরিষ্কার architecture diagram

Exam-style diagram of a read-heavy web service: numbered arrows, shape conventions, legend

খাতার ধাঁচে architecture diagram: client, CDN, DNS, load balancer, তিনটি app, cache, queue, DB primary, replica, worker ১ ২ ৩ ৪ ৫ ৬ ক্লায়েন্ট ফোন · ব্রাউজার CDN ছবি, JS DNS নাম → IP Load balancer L7 · দুটি কপি App ১ stateless App ২ stateless App ৩ stateless Cache cache-aside · TTL Queue ধীর কাজ পরে DB primary সব লেখা Read replica পড়া Worker email, ছবি কঠিন দাগ: সাথে সাথে উত্তর (sync) ড্যাশ: পরে বা পেছনে (async, replication) ১ LB-তে · ২ সার্ভারে ভাগ · ৩ আগে cache ৪ miss বা লেখায় DB · ৫ queue-তে · ৬ worker
ছবি ৬৪.১ — প্রতিটি বাক্সে নাম ও ভূমিকা, প্রতিটি তীরে নম্বর, আকারে প্রথা (database সিলিন্ডার), আর নিচে legend. খাতায় এর চেয়ে বেশি বাক্স লাগলে দ্বিতীয় একটি ছোট ছবি আঁকুন।

অন্য ছবিগুলো — কোন প্রশ্নে কোনটি

ছবিকোন প্রশ্নেযা প্রায়ই বাদ পড়ে
Sequence diagram (খাড়া সময়রেখা)2PC, OAuth, cache-aside-এর ক্রম, delivery-তে ackকোন বার্তার পর কোনটি ডিস্কে লেখা (fsync) হয়, আর কোন মুহূর্তে crash হলে কী
Ringconsistent hashing, virtual node, preference listঘড়ির কাঁটার দিক, key-এর তীর, নতুন node যোগে কোন অংশ সরে
State diagramcircuit breaker, Raft-এর ভূমিকা, job-এর জীবনপ্রতিটি তীরে শর্ত (“৫টি ব্যর্থতা”, “timeout শেষ”)
তুলনার টেবিলযেকোনো “পার্থক্য লিখুন”একই মাপকাঠির সারি; শেষ সারিতে “কখন কোনটি”

সময় ভাগ

নিয়মটি সরল: মোট মিনিট ÷ মোট নম্বর। ধরা যাক ১৫০ মিনিটে ৭৫ নম্বর — প্রতি নম্বরে দুই মিনিট, একটি ১০ নম্বরের প্রশ্নে কুড়ি মিনিট। শুরুতে পাঁচ মিনিট প্রশ্ন বাছাইয়ে, শেষে দশ মিনিট মেলাতে; প্রতিটি দীর্ঘ প্রশ্নে প্রথম দুই মিনিট মার্জিনে খসড়া। কোনো প্রশ্নে আটকে গেলে কাঠামো আর সূত্র লিখে এগিয়ে যান — পদ্ধতির নম্বর থাকে।

নিচের stepper-এ একটি ১০ নম্বরের প্রশ্নের উত্তর ধাপে ধাপে গড়া হয়েছে — প্রতিটি অংশ যোগ হলে নম্বর কীভাবে জমে, আর সময় কতটা যায়:

প্রতিটি অংশ যোগ করার পর
যোগ হলো
খাতায় যা লিখলেন
জমা নম্বর
খরচ হওয়া সময়
  1. পরিকল্পনা। মার্জিনে পাঁচ শব্দের খসড়া — দুই মিনিটে কাঠামো ঠিক, কোনো অংশ বাদ পড়বে না।
  2. সংজ্ঞা — ২ নম্বর। “CAP: network partition চলাকালে একটি replicated সিস্টেম একসাথে linearizable থাকতে আর প্রতিটি চালু node থেকে উত্তর দিতে পারে না।” সাথে ইতিহাস এক লাইনে: Brewer-এর অনুমান (২০০০), Gilbert ও Lynch-এর প্রমাণ (২০০২)।
  3. ছবি — আরও ২ নম্বর। দুটি বাক্স N1, N2; মাঝের link-এ ক্রস চিহ্ন; client-1 N1-এ x = 2 লেখে, client-2 N2 থেকে x পড়ে। ছবিতেই প্রশ্নটি দাঁড়ায়: N2 কী উত্তর দেবে?
  4. দুই পথ — আরও ৩ নম্বর। CP: N2 উত্তর দেয় না বা error দেয় — consistent, কিন্তু সেই অনুরোধে unavailable. AP: N2 পুরোনো x = 1 দেয় — available, কিন্তু stale; link জোড়া লাগলে মেলে। দুটির একটি করে উদাহরণ লিখুন।
  5. ভুল ধারণা — আরও ১ নম্বর। Partition আপনার বাছাই নয়, তাই “তিনের দুই” বা “CA ব্যবস্থা” ভুল ব্যাখ্যা; CAP-এর A মানে উঁচু uptime নয়; ACID-এর C আর CAP-এর C আলাদা।
  6. PACELC আর উপসংহার — শেষ ২ নম্বর। PACELC: Partition হলে A বনাম C, Else (স্বাভাবিক দিনে) Latency বনাম Consistency — শক্ত consistency মানে প্রতিটি লেখায় অন্য replica-র সাথে round trip. উপসংহার: বাছাই feature ধরে — টাকা কাটা CP, like গণনা AP. আঠারো মিনিটে দশ নম্বর।

সংখ্যার প্রশ্নে: সূত্র → মান → একক → মানে

সংখ্যা এলে চারটি জিনিস আলাদা লাইনে লিখুন: সূত্র, বসানো মান, একক সহ ফল, আর এক লাইনের “মানে কী”। প্রতিটি অনুমান শুরুতেই লিখুন (“ধরা যাক ১ দিন = ৮৬,৪০০ সেকেন্ড”)।

কোন মডিউলের প্রশ্ন কোথায়

কোর্সের মডিউলপর্বলিখিত প্রশ্নভাইভা প্রশ্ন
১ · System design-এর ভিত্তি০১–০৬অংশ ২ (ক-০১–ক-০৩)ভ-০১–ভ-০৩
২ · যোগাযোগ আর API০৭–১২অংশ ২ (ক-০৪–ক-০৫)ভ-০৪–ভ-০৭
৩ · Scaling-এর মৌলিক১৩–১৮অংশ ২ (ক-০৬–ক-০৮)ভ-০৮–ভ-১০
৪ · ডেটা স্টোরেজ১৯–২৭অংশ ৩ (খ-০১–খ-০৫)ভ-১১–ভ-১৪
৫ · Caching২৮–৩০অংশ ৪ (গ-০১–গ-০৪)ভ-১৫–ভ-১৬
৬ · Messaging আর stream৩১–৩৭অংশ ৫ (ঘ-০১–ঘ-০৪)ভ-১৭–ভ-২০
৭ · Distributed systems-এর তত্ত্ব৩৮–৪৬অংশ ১-এর stepper (CAP) আর অংশ ৬ (ঙ-০১–ঙ-০৭)ভ-২১–ভ-২৫
৮ · Architecture, reliability আর operations৪৭–৫৩অংশ ৭ (চ-০১–চ-০৬)ভ-২৬–ভ-২৮
৯ · Case study৫৪–৬১অংশ ৮ (ছ-০১–ছ-০৫)ভ-২৯–ভ-৩১

এই পাতার কোনো প্রশ্ন কোনো নির্দিষ্ট পরীক্ষা, প্রতিষ্ঠান বা কোম্পানির ইন্টারভিউ থেকে নেওয়া নয়; এ ধরনের প্রশ্ন বিশ্ববিদ্যালয়, চাকরি আর ইন্টারভিউর পরীক্ষায় প্রায়ই আসে। নম্বর আনুমানিক; প্রতিটি অনুমান প্রশ্নেই লেখা (১ দিন = ৮৬,৪০০ সেকেন্ড, ৩০ দিনের মাস); সব নকশা কাল্পনিক সেবার।

২ · অংশ ক — ভিত্তি, API আর scaling (মডিউল ১–৩)

রিভিশন: পর্ব ০২ (FR, NFR), পর্ব ০৩ (হিসাবের প্রথা), পর্ব ০৪ (percentile, Little), পর্ব ০৫ (nines, MTTR), পর্ব ০৬ (আট ধাপ), পর্ব ০৮ (idempotency), পর্ব ১০ (polling, WebSocket), পর্ব ১৩, পর্ব ১৪, পর্ব ১৫, পর্ব ১৬ আর পর্ব ১৮.

ক-০১Functional আর non-functional requirement-এর পার্থক্য উদাহরণসহ লিখুন। Availability আর durability কি এক? — ৪ নম্বর (সহজ)

সংজ্ঞা: Functional requirement বলে সিস্টেম কী করবে — এমন আচরণ, যা হ্যাঁ বা না দিয়ে যাচাই করা যায়। Non-functional requirement বলে কতটা ভালোভাবে — latency, availability, কতজন ব্যবহারকারী, খরচ, নিরাপত্তা — আর তা লিখতে হয় সংখ্যায়।

মাপকাঠিFunctionalNon-functional
প্রশ্নকী করবে?কতটা দ্রুত, কতজনের জন্য, কতটা নির্ভরযোগ্য?
উদাহরণ (কাল্পনিক ছবি-শেয়ার অ্যাপ)ছবি আপলোড, follow, feed দেখাfeed-এর p99 ৫০০ ms-এর কম; ৯৯.৯% availability; দৈনিক ১ কোটি ব্যবহারকারী
নকশায় প্রভাবAPI আর data modelarchitecture — cache, replication, sharding

Availability বনাম durability: এক নয়। Availability মানে এই মুহূর্তে সেবা পাওয়া যায় কি না; durability মানে সংরক্ষিত ডেটা হারায় কি না। এক ঘণ্টার বিভ্রাটে সেবা বন্ধ, কিন্তু একটি লেখাও হারায়নি — availability কমেছে, durability অক্ষুণ্ণ।

নম্বর কোথায়: দুটি সংজ্ঞা (১), টেবিল বা দুই জোড়া উদাহরণ (২), availability বনাম durability (১)। পর্ব ০২ · পর্ব ০৫

যেখানে নম্বর কাটে: সংখ্যা ছাড়া NFR (“দ্রুত হবে”, “scalable হবে”); ACID-এর C আর CAP-এর C এক বলে লেখা।

ক-০২Latency, throughput আর bandwidth-এর পার্থক্য লিখুন। গড়ের বদলে p99 কেন দেখা হয়? একটি অনুরোধ ৫০টি backend-এর সবার উত্তরের অপেক্ষা করে, প্রতিটি স্বাধীনভাবে ১% সময় ধীর — কত শতাংশ অনুরোধ ধীর হবে? সেকেন্ডে ২,০০০ অনুরোধ আর গড় সময় ১৫০ ms হলে Little-এর সূত্রে গড়ে কতগুলো অনুরোধ একসাথে চলে? — ১০ নম্বর (মাঝারি)

সংজ্ঞা: latency = একটি অনুরোধের শুরু থেকে উত্তর পর্যন্ত সময় (ms); throughput = প্রতি সেকেন্ডে শেষ হওয়া কাজ (req/s); bandwidth = পথ সর্বোচ্চ কতটা বইতে পারে (Gbit/s).

Percentile: p99 মানে ১০০টি অনুরোধের ৯৯টি এর চেয়ে দ্রুত। গড় কয়েকটি খুব ধীর অনুরোধ লুকিয়ে ফেলে — সেই tail-ই ব্যবহারকারী টের পান। কয়েকটি সার্ভারের p99-এর গড় সেবার p99 নয় — histogram-এর bucket যোগ করে তারপর percentile.

Fan-out-এর হিসাব:

  1. সূত্র: P(অন্তত একটি ধীর) = 1 − (1 − p)N.
  2. মান: 1 − 0.9950 ≈ 1 − 0.605 = ০.৩৯৫, অর্থাৎ প্রায় ৩৯.৫%.

Little-এর সূত্র: L = λW = ২,০০০ × ০.১৫ = ৩০০টি অনুরোধ গড়ে একসাথে চলছে। Thread বা connection pool অন্তত এত, peak-এর জন্য আরও বাড়তি।

Trade-off: batching throughput বাড়ায় কিন্তু latency বাড়াতে পারে। ব্যস্ততা ρ বাড়লে M/M/1 মডেলে গড় সময় W = S ÷ (1 − ρ): S = ১০ ms ধরলে ρ = ০.৫-এ ২০ ms, ০.৯-এ ১০০ ms.

নম্বর কোথায়: তিন সংজ্ঞা (২), percentile-এর যুক্তি (২), fan-out সূত্র ও মান (৩), Little ও প্রয়োগ (২), utilisation বা প্রতিকার (১)। পর্ব ০৪ · পর্ব ৫০

যেখানে নম্বর কাটে: “৫০ × ১% = ৫০%” — সম্ভাবনা যোগ করা; ms-কে সেকেন্ড না করে L = ৩,০০,০০০ লেখা; percentile-এর গড় নেওয়া।

ক-০৩৯৯.৯% আর ৯৯.৯৯% availability-তে বছরে কত downtime? দুটি ৯৯.৯%-এর অংশ series আর parallel-এ সাজালে মোট availability কত? MTBF ৫০০ ঘণ্টা আর MTTR ৩০ মিনিট হলে availability কত? — ৬ নম্বর (সহজ)

সূত্র: downtime = (১ − A) × ৫,২৫,৬০০ মিনিট (৩৬৫ দিনের বছর)। প্রতিটি বাড়তি nine downtime দশ ভাগের এক ভাগ করে।

প্রশ্নসূত্রফল
৯৯.৯%০.০০১ × ৫,২৫,৬০০৫২৫.৬ মিনিট ≈ ৮ ঘণ্টা ৪৫ মিনিট
৯৯.৯৯%০.০০০১ × ৫,২৫,৬০০প্রায় ৫২.৬ মিনিট
Series (দুটিই লাগবে)A1 × A2 = ০.৯৯৯²৯৯.৮০০১% — downtime প্রায় দ্বিগুণ
Parallel (একটিই যথেষ্ট)১ − (১ − A)² = ১ − ০.০০১²৯৯.৯৯৯৯%
MTBF ৫০০ h, MTTR ০.৫ hMTBF ÷ (MTBF + MTTR)৫০০ ÷ ৫০০.৫ ≈ ৯৯.৯০%

Trade-off ও শর্ত: parallel-এর হিসাব ধরে নেয় ব্যর্থতা স্বাধীন; একই rack, একই config push বা সব কপিতে একই bug — correlated failure — হলে লাভ অনেক কম.

নম্বর কোথায়: downtime (২), series ও parallel (২), MTBF সূত্র (১), স্বাধীনতার শর্ত (১)। পর্ব ০৫

যেখানে নম্বর কাটে: parallel-এও availability গুণ করা; স্বাধীনতার শর্ত না লেখা; বছরের দিন-সংখ্যার প্রথা না বলা।

ক-০৪PUT, PATCH আর POST-এর পার্থক্য idempotency দিয়ে ব্যাখ্যা করুন। টাকা পাঠানোর একটি API-তে client timeout-এর পর retry করলে টাকা দুবার কাটা কীভাবে ঠেকাবেন? — ৫ নম্বর (মাঝারি)

সংজ্ঞা: একটি অনুরোধ idempotent যদি একবার বা বহুবার পাঠালে সার্ভারের অবস্থা একই থাকে।

MethodকাজIdempotent?
GETপড়াহ্যাঁ (নিরাপদও)
PUTপুরো রূপ বসানোহ্যাঁ
DELETEমোছাহ্যাঁ — দ্বিতীয়বার 404 এলেও অবস্থা একই
PATCHঅংশ বদলসাধারণভাবে নয় (“balance += ১০০”)
POSTতৈরি বা প্রক্রিয়ানয়

Retry নিরাপদ করা:

  1. Client প্রতিটি লেনদেনের জন্য একটি এলোমেলো Idempotency-Key বানায়; retry-তে একই key.
  2. সার্ভারে UNIQUE (client, key) সারি, সাথে body-র hash আর জমা উত্তর।
  3. একই key আর একই body → আগের উত্তর আবার, টাকা কাটে একবারই; ভিন্ন body → 422; প্রথমটি এখনো চলছে → 409.

Trade-off: প্রতি অনুরোধে একটি বাড়তি লেখা; key-এর মেয়াদ ছোট হলে দেরির retry আবার চলে।

নম্বর কোথায়: সংজ্ঞা (১), টেবিল (২), key-এর নকশা (২)। পর্ব ০৮ · পর্ব ৩৪

যেখানে নম্বর কাটে: key সার্ভারে বানানো (তাহলে retry পায় নতুন key); body না মিলিয়ে আগের উত্তর ফেরত দেওয়া।

ক-০৫Short polling, long polling, SSE আর WebSocket-এর তুলনা করুন। ১ লাখ client প্রতি ৫ সেকেন্ডে poll করলে সার্ভারে সেকেন্ডে কত অনুরোধ আসে, আর একটি নতুন খবর গড়ে কত দেরিতে পৌঁছায়? — ৫ নম্বর (মাঝারি)
পদ্ধতিদিকসংযোগদাম
Short pollingclient প্রশ্ন করেপ্রতিবার নতুন অনুরোধবেশিরভাগ উত্তর খালি; গড় দেরি I/২
Long pollingclient প্রশ্ন, সার্ভার উত্তর আটকে রাখেপ্রতিটি খবরের পর নতুন অনুরোধখোলা অনুরোধ আটকে থাকে
SSEশুধু server → client, textএকটি স্থায়ী HTTP স্রোতLast-Event-ID দিয়ে নিজেই resume
WebSocketদুই দিকে, text ও binaryএকটি স্থায়ী সংযোগack, resume, ক্রম নিজেকে বানাতে হয়

হিসাব: N ÷ I = ১,০০,০০০ ÷ ৫ = সেকেন্ডে ২০,০০০ অনুরোধ; খবর আসে দুই poll-এর মাঝে যেকোনো সময়ে, তাই গড় দেরি I/২ = ২.৫ সেকেন্ড.

Trade-off: স্থায়ী সংযোগ মানে stateful gateway, load balancer-এ দীর্ঘ বাঁধন আর gateway restart-এ reconnect-এর ঢল — প্রতিকার backoff আর full jitter. উপসংহার: স্কোর বা নোটিশের ধারায় SSE, chat-এ WebSocket, কদাচিৎ হালনাগাদে polling-ই যথেষ্ট।

নম্বর কোথায়: টেবিল (৩), হিসাব (১), trade-off (১)। পর্ব ১০

যেখানে নম্বর কাটে: SSE-কে দুই দিকের বলা; poll-এর গড় দেরি I ধরা।

ক-০৬Load balancer-এর কাজ লিখুন। L4 আর L7 load balancing-এর তুলনা করুন। Round robin, least connections আর power of two choices কখন কোনটি? Health check-এ interval ৫ সেকেন্ড, timeout ২ সেকেন্ড, পরপর ২ বার ব্যর্থ হলে সার্ভার বাদ — সবচেয়ে খারাপ ক্ষেত্রে কত সেকেন্ডে ধরা পড়ে, আর প্রতি সার্ভারে ৩০০ QPS হলে ততক্ষণে প্রায় কতগুলো অনুরোধ ব্যর্থ হতে পারে? — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা ও কাজ: একদল সার্ভারের সামনের প্রবেশপথ, চারটি কাজ — ভার ভাগ, health check দিয়ে বিকল সার্ভার লুকানো, একটিমাত্র ঠিকানা (virtual IP), আর সেবা না থামিয়ে deploy (draining).

ছবি (খাতায়): client → virtual IP → LB জোড়া (active আর standby, মাঝে heartbeat) → তিনটি সার্ভার; একটিতে ক্রস চিহ্ন, LB থেকে প্রতিটি সার্ভারে health check-এর ড্যাশ দাগ।

মাপকাঠিL4L7
যা দেখেIP, port (TCP/UDP)HTTP — host, path, header, cookie
ভাগের এককপুরো সংযোগ এক backend-এপ্রতিটি অনুরোধ আলাদা
TLSসাধারণত খোলে নাশেষ করে
ক্ষমতাকম CPU, খুব দ্রুতpath routing, retry, canary, header বসানো
দুর্বলতাHTTP/2-gRPC-র দীর্ঘ সংযোগে ভার অসমবেশি CPU, নিজেই ভারী অংশ

Algorithm: round robin — সার্ভার আর অনুরোধ সমান হলে; weighted — ক্ষমতা বিষম হলে; least connections — অনুরোধের সময় বিষম হলে; power of two choices — দুটি এলোমেলো বেছে কম ব্যস্তটি, অনেক LB আর পুরোনো তথ্যেও ভিড় জমায় না; consistent hashing — একই key একই সার্ভারে দরকার হলে।

হিসাব: ধরা পড়ার সবচেয়ে খারাপ সময় ≈ fall × interval + timeout = ২ × ৫ + ২ = ১২ সেকেন্ড; ততক্ষণে প্রায় ১২ × ৩০০ = ৩,৬০০টি অনুরোধ ব্যর্থ হতে পারে।

LB নিজেই SPOF? active-passive-এ VRRP দিয়ে virtual IP সরে; active-active-এ anycast আর ECMP.

নম্বর কোথায়: চার কাজ (১), ছবি (২), টেবিল (৩), algorithm (২), হিসাব (১), SPOF (১)। পর্ব ১৪ · পর্ব ১১

যেখানে নম্বর কাটে: হিসাবে timeout বাদ দেওয়া; L7-কে “শুধু বেশি দ্রুত” বলা; LB-কে single point of failure হিসেবে না দেখা।

ক-০৭hash(key) mod N-এর সমস্যা কী? Consistent hashing আর virtual node ছবিসহ ব্যাখ্যা করুন। ১ কোটি key ৪টি cache সার্ভারে আছে; ৫ম সার্ভার যোগ করলে দুই পদ্ধতিতে প্রায় কতগুলো key-এর ঠিকানা বদলায়? — ১০ নম্বর (মাঝারি, ছবিসহ)

সমস্যা: N থেকে N + 1 করলে N/(N + 1) ভাগ key সরে। কারণ: প্রতি N(N + 1)টি পরপর মানে k mod N আর k mod (N + 1) সমান হয় মাত্র N টিতে, তাই থাকে 1/(N + 1). ৪ → ৫-এ ৪/৫ = ৮০%, অর্থাৎ ৮০ লাখ key.

Consistent hashing: hash-এর পরিসরকে একটি বৃত্ত (ring) ধরা হয়; সার্ভার আর key একই hash-এ ring-এ বসে; key যায় ঘড়ির কাঁটার দিকে পরের সার্ভারে। নতুন সার্ভার শুধু তার ঠিক আগের অংশটুকু নেয়: গড়ে K/(N + 1) = ১ কোটি ÷ ৫ = ২০ লাখ key (২০%) — নতুন সার্ভারের ন্যায্য ভাগ, এর কম সরিয়ে কাজ হয় না।

ছবি (খাতায়): একটি বৃত্তে চারটি বিন্দু A, B, C, D; B আর C-র মাঝে নতুন E; B থেকে E পর্যন্ত বৃত্তাংশ দাগানো — “শুধু এই key-গুলো C থেকে E-তে যায়”; কয়েকটি key থেকে ঘড়ির কাঁটার দিকে তীর।

Virtual node: অল্প সার্ভারে ring-এর ভাগ খুব অসম। প্রতিটি সার্ভারকে V জায়গায় বসালে ভাগের ছড়ানো মোটামুটি 1/√V — V = ১০০-তে প্রায় ১০%. দাম: ring-এ N·V বিন্দু, lookup O(log(N·V)).

মাপকাঠিmod NRing + vnodeRendezvous
সার্ভার যোগে সরেN/(N + 1)প্রায় 1/(N + 1)প্রায় 1/(N + 1)
LookupO(1)O(log(N·V))O(N)
MemoryনেইN·V বিন্দুনেই

সীমা ও উপসংহার: এটি key-এর সংখ্যা সমান করে, চাপ নয় — একটি hot key তবু একটি সার্ভারেই পড়ে; তার প্রতিকার আলাদা (local cache, কপি)।

নম্বর কোথায়: mod N-এর সমস্যা ও ভাগ (২), ring-এর ছবি (২), সরার হিসাব (২), virtual node (২), তুলনা বা সীমা (২)। পর্ব ১৬ · পর্ব ৩০

যেখানে নম্বর কাটে: “consistent hashing-এ কোনো key সরে না”; ছবিতে দিক না দেখানো; hot key সারাতে V বাড়ানোর কথা বলা।

ক-০৮Throughput আর goodput-এর পার্থক্য কী? একটি সার্ভিস সেকেন্ডে ৪০০টি অনুরোধ সামলাতে পারে (μ), আসছে ৫০০টি (λ), client-এর timeout ৩ সেকেন্ড, queue অসীম। কত সেকেন্ড পর থেকে নতুন প্রতিটি অনুরোধ timeout হবে? Backpressure আর load shedding দিয়ে কী বদলাবেন? — ৬ নম্বর (কঠিন)

সংজ্ঞা: throughput = শেষ হওয়া কাজ; goodput = তার মধ্যে সময়মতো, কাজে লাগা উত্তর। Overload-এ প্রথমটি সর্বোচ্চ থাকলেও দ্বিতীয়টি শূন্যের দিকে নামতে পারে।

  1. Queue বাড়ে λ − μ = সেকেন্ডে ১০০টি করে।
  2. নতুন অনুরোধের অপেক্ষা = Q ÷ μ; এটি D = ৩ সেকেন্ড ছাড়ায় যখন Q > D·μ = ১,২০০.
  3. সময় t = D·μ ÷ (λ − μ) = ৩ × ৪০০ ÷ ১০০ = ১২ সেকেন্ড. তারপর সার্ভার পুরো ব্যস্ত, অথচ প্রতিটি উত্তর client ছেড়ে যাওয়ার পরে — goodput প্রায় শূন্য; retry এলে λ আরও বাড়ে।

প্রতিকার: bounded queue আর দ্রুত 503 বা 429 (fail fast); ভেতরের অংশে backpressure — উৎসকে ধীর করা (bounded channel, TCP flow control); দরজায় load shedding — অগ্রাধিকার বুঝে বাড়তি কাজ ফেরানো; মেয়াদ পেরোনো কাজ বাদ; retry budget; কম দিয়ে হলেও চালু থাকা (graceful degradation).

নম্বর কোথায়: দুই সংজ্ঞা (১), হিসাব ও যুক্তি (৩), প্রতিকার (২)। পর্ব ১৮ · পর্ব ৪৮

যেখানে নম্বর কাটে: “autoscaling করব” — তা কয়েক মিনিট দেরিতে আসে; exponential backoff-কেই যথেষ্ট বলা — টানা overload-এ মোট চেষ্টা কমে না।

৩ · অংশ খ — Storage, replication, sharding আর transaction (মডিউল ৪)

রিভিশন: পর্ব ১৯ (B-tree, LSM, WAL), পর্ব ২০, পর্ব ২১ (index), পর্ব ২২ (lag, failover), পর্ব ২৩ (shard key, ID), পর্ব ২৪ (anomaly), পর্ব ২৫ (2PC, saga, outbox), পর্ব ২৬ (erasure coding) আর পর্ব ২৭.

খ-০১B+-tree আর LSM-tree storage engine-এর তুলনা করুন। WAL কেন লাগে? Fan-out ৫০০-র তিন স্তরের B+-tree-তে সর্বোচ্চ কতগুলো key আঁটে? কোন workload-এ কোনটি বাছবেন? — ১০ নম্বর (মাঝারি)

WAL: যেকোনো বদল আগে log-এর শেষে যোগ আর fsync, তারপর আসল কাঠামোয়। Crash হলে log থেকে আবার চালানো (redo).

B+-tree: প্রতিটি node একটি page; leaf জায়গায় বদলায়। ৫০০ × ৫০০ × ৫০০ = ১২.৫ কোটি key তিন স্তরে — যেকোনো key-এ প্রায় ৩টি page, ওপরের স্তর RAM-এ থাকলে আরও কম।

LSM-tree: লেখা যায় RAM-এর memtable-এ → ভরলে সাজানো SSTable ফাইল ডিস্কে → পেছনে compaction মেলায়। পড়ায় কয়েক স্তর দেখতে হয়; Bloom filter অপ্রয়োজনীয় ফাইল বাদ দেয়।

মাপকাঠিB+-treeLSM-tree
লেখাপ্রতিটিতে একটি random page বদলক্রমিক, দ্রুত
পড়াঅনুমানযোগ্য, অল্প pageকয়েক স্তর; Bloom filter বাঁচায়
পেছনের খরচpage split, fragmentationcompaction — write amplification
উদাহরণPostgreSQL, MySQL InnoDBRocksDB, Cassandra

Trade-off ও উপসংহার: read, update আর memory-র খরচ একসাথে কমানো যায় না (RUM). পড়া-ভারী লেনদেন আর range query-তে B+-tree; লেখা-ভারী log, metric বা time-series-এ LSM.

নম্বর কোথায়: WAL (২), দুই কাঠামো (৩), হিসাব (১), টেবিল (৩), বাছাই (১)। পর্ব ১৯ · পর্ব ২১

যেখানে নম্বর কাটে: compaction-এর দাম না বলা; WAL-কে backup বলা।

খ-০২Single-leader replication ছবিসহ ব্যাখ্যা করুন। Sync, semi-sync আর async replication-এর trade-off লিখুন। Replication lag ব্যবহারকারীর চোখে কোন তিনটি সমস্যা ঘটায়, আর প্রতিকার কী? Failover-এ কী ভুল হতে পারে? — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা: একই ডেটার কয়েকটি জীবন্ত কপি। Single-leader-এ সব লেখা leader-এ যায়; leader তার log (WAL বা সারিভিত্তিক) follower-দের পাঠায়; পড়া follower থেকেও হয়। লাভ: availability, পড়া ভাগ, কাছের কপি, durability. Replication পড়া বাড়ায়, লেখা নয়।

ছবি (খাতায়): client-এর লেখা → Leader (সিলিন্ডার) → ড্যাশ তীরে Follower ১ আর ২; পড়ার তীর follower-এ; follower-এর পাশে “lag Δt”.

মোড“OK” কখনলাভদাম
Syncfollower-দের ack-এর পরেRPO শূন্যধীর; একটি follower বন্ধ হলে লেখা আটকে
Semi-syncঅন্তত একটি follower-এর ack-এএকটি কপি নিশ্চিতমাঝামাঝি দেরি
Asyncleader নিজে লিখেইদ্রুততমleader মরলে শেষ lag-এর “OK” পাওয়া লেখাও হারাতে পারে

Lag-এর তিন সমস্যা:

  1. নিজের লেখা উধাও → read-your-writes: নিজের ডেটা leader থেকে, বা লেখার অবস্থান (LSN) পর্যন্ত পৌঁছানো replica থেকে।
  2. সময় পেছনে যাওয়া (প্রথমবার নতুন, পরে পুরোনো) → monotonic reads: একজন ব্যবহারকারীকে এক replica-তে বাঁধা।
  3. প্রশ্নের আগে উত্তর → consistent prefix: সম্পর্কিত লেখা একই partition-এ, একই ক্রমে।

Failover-এর ভুল: async-এ হারানো লেখা; পুরোনো leader ফিরে এসে লিখলে split-brain (প্রতিকার fencing বা epoch); ভুল timeout-এ অকারণ failover.

নম্বর কোথায়: সংজ্ঞা ও ছবি (২), তিন মোড (৩), lag-এর তিন সমস্যা (৩), failover (২)। পর্ব ২২ · পর্ব ৫১ · পর্ব ৪৩

যেখানে নম্বর কাটে: replication-কে backup বলা (ভুল DELETE-ও কপি হয়); “sync হলে সব সমস্যা শেষ” — দামের কথা না বলা।

খ-০৩Partitioning আর replication-এর পার্থক্য কী? Shard key বাছাইয়ের শর্ত লিখুন। Range আর hash partitioning তুলনা করুন। ২৫৬টি নির্দিষ্ট partition ৪টি node থেকে ৫টিতে নিলে কতগুলো partition সরে? কেন্দ্রীয় counter ছাড়া Snowflake-ধাঁচের 64-bit ID-র ক্ষমতা আর আয়ু হিসাব করুন। — ১০ নম্বর (কঠিন)

পার্থক্য: partitioning ডেটা ভাগ করে ক্ষমতা (বিশেষ করে লেখা) বাড়ায়; replication কপি রাখে টিকে থাকা আর পড়ার জন্য। বাস্তবে দুটো একসাথে — প্রতিটি shard-এর তিনটি কপি।

Shard key-এর চার শর্ত: অনেক ভিন্ন মান; সমান ছড়ানো; ঘন query-র ডেটা এক shard-এ; বৃদ্ধির সাথেও টেকে। পরে বদলানো খুব দামি।

মাপকাঠিRangeHash
ভাগkey-এর পরিসর ধরেhash(key) ধরে
Range scanসস্তাসব shard-এ scatter-gather
Hot spottimestamp-এর মতো ক্রমিক key-এ আজকের সব লেখা এক shard-এসমান ছড়ায়; তবু একটি hot key এক shard-এ

Rebalancing: node-এর চেয়ে অনেক বেশি নির্দিষ্ট partition বানিয়ে পুরো partition সরানো। ৫টি node-এ ন্যায্য ভাগ ২৫৬ ÷ ৫ = ৫১.২, তাই নতুন node অন্যদের থেকে ৫১টি partition নেয় — প্রায় ২০%; hash mod N-এ সরত প্রায় ৮০% key.

Snowflake-ধাঁচের ID: ১ চিহ্ন-bit + ৪১-bit millisecond timestamp + ১০-bit worker + ১২-bit sequence.

  1. প্রতি worker প্রতি ms-এ ২১২ = ৪,০৯৬টি ID; worker ২১০ = ১,০২৪টি।
  2. আয়ু ২৪১ ms ≈ ৬৯.৭ বছর, নিজের বেছে নেওয়া epoch থেকে।

নম্বর কোথায়: পার্থক্য (১), শর্ত (২), টেবিল (২), rebalancing (২), ID-র নকশা ও হিসাব (৩)। পর্ব ২৩ · পর্ব ১৬

যেখানে নম্বর কাটে: hot key ভুলে যাওয়া; ID-র আয়ু “চিরকাল” বলা; worker ID কে, কীভাবে পাবে তা না ভাবা।

খ-০৪ACID-এর চারটি অক্ষর ব্যাখ্যা করুন। Dirty read, lost update, read skew আর write skew-এর উদাহরণ দিন, আর কোন isolation level কোনটি ঠেকায় তার টেবিল দিন। একটি ওয়ালেট থেকে একসাথে দুটি টাকা তোলায় lost update কীভাবে ঠেকাবেন? — ১০ নম্বর (কঠিন)

ACID: A — ব্যর্থ হলে সব বা কিছুই না; C — অ্যাপের নিয়ম (invariant) রক্ষা, CAP-এর C নয়; I — একসাথে চলা কাজ একে অপরকে কতটা দেখে; D — commit-এর পরে crash-এও টেকে।

Anomaly:

  • Dirty read — অন্যের commit-না-হওয়া বদল পড়া; পরে rollback হলে ভুল তথ্যে সিদ্ধান্ত।
  • Lost update — balance ৫০০; দুজন একসাথে পড়েন; একজন ৩০০ তুলে ২০০ লেখেন, অন্যজন ৪০০ তুলে ১০০ লেখেন। প্রথম লেখা হারাল, অথচ ৫০০ টাকার ওয়ালেট থেকে বেরোল ৭০০।
  • Read skew — দুটি অ্যাকাউন্ট আলাদা মুহূর্তে পড়ায় রিপোর্টে এমন মোট, যা কখনো ছিল না।
  • Write skew — “অন্তত একজন on-call থাকবেন” দেখে দুজন ডাক্তার একসাথে ছুটি নেন; দুজনই আলাদা সারি লেখেন।
LevelDirty readLost updateRead skewWrite skew
READ COMMITTEDঠেকায়পারে নাপারে নাপারে না
Snapshot isolationঠেকায়ঠেকায় (একটি abort)ঠেকায়পারে না
SERIALIZABLEঠেকায়ঠেকায়ঠেকায়ঠেকায়

নামের ফাঁদ: PostgreSQL-এর REPEATABLE READ আসলে snapshot isolation, আর MySQL InnoDB-এর একই নামের level আলাদা আচরণ করে — নাম নয়, আচরণ যাচাই করুন।

ওয়ালেটের প্রতিকার: (১) শর্তসহ atomic লেখা — UPDATE wallet SET bal = bal - 300 WHERE id = 7 AND bal >= 300; ০ সারি মানে টাকা নেই। (২) SELECT … FOR UPDATE. (৩) version কলামে optimistic লেখা। (৪) SERIALIZABLE আর retry.

নম্বর কোথায়: ACID (২), চার anomaly (৩), টেবিল (৩), প্রতিকার (২)। পর্ব ২৪ · DBMS কোর্সে MVCC

যেখানে নম্বর কাটে: ACID-এর C-কে CAP-এর C বলা; SERIALIZABLE-এ abort আর retry-র কথা না বলা।

খ-০৫Two-phase commit-এর দুই ধাপ sequence diagram-সহ ব্যাখ্যা করুন; commit point কোনটি, আর coordinator মরলে কী হয়? Saga আর outbox pattern কোন সমস্যার সমাধান? ধরা যাক RTT ১ ms, প্রতিটি fsync ৪ ms, ৩ জন participant — commit point পর্যন্ত কত সময়, কতগুলো বার্তা আর forced write? — ১০ নম্বর (কঠিন, ছবিসহ)

2PC:

  1. Prepare: coordinator সবাইকে PREPARE পাঠায়; প্রত্যেকে কাজ করে, lock ধরে, PREPARED record ডিস্কে force করে YES (বা NO) বলে।
  2. Commit: সব YES হলে coordinator COMMIT record force করে — এটিই commit point, এর পরে আর abort নেই; তারপর সবাইকে COMMIT, তারা force করে ack দেয়। একটি NO বা timeout হলে ABORT.

ছবি (খাতায়): চারটি খাড়া সময়রেখা C, P1, P2, P3; PREPARE-এর তীর ডানে, YES বাঁয়ে; C-র রেখায় তারা চিহ্ন “COMMIT force”; তারপর COMMIT আর ACK.

হিসাব: commit point = r + ২f = ১ + ৮ = ৯ ms (এক RTT, participant-এর PREPARED fsync আর coordinator-এর COMMIT fsync); পুরো প্রোটোকল ২r + ৩f = ২ + ১২ = ১৪ ms. বার্তা ৪N = ১২টি; forced write ২N + ১ = ৭টি.

Blocking: coordinator মরলে PREPARED participant নিজে সিদ্ধান্ত নিতে পারে না — lock ধরে অপেক্ষা করে। বাস্তবের প্রতিকার coordinator-এর সিদ্ধান্ত Raft বা Paxos দিয়ে replicated রাখা।

Saga: local transaction-এর শিকল, প্রতিটির একটি compensation; ব্যবসায়িক ব্যর্থতায় উল্টো ক্রমে compensation (টিকিট বাতিল → টাকা ফেরত), ক্ষণিকের ত্রুটিতে retry. Isolation নেই, তাই “pending” অবস্থা লাগে।

Outbox: database-এ লেখা আর broker-এ publish (dual write) মাঝপথে ভাঙে। Event একই local transaction-এ outbox টেবিলে, relay পরে পাঠায় — হারায় না, তবে দুবার যেতে পারে, তাই consumer idempotent.

নম্বর কোথায়: দুই ধাপ ও ছবি (৩), commit point ও blocking (২), হিসাব (২), saga ও outbox (৩)। পর্ব ২৫ · পর্ব ৩৪

যেখানে নম্বর কাটে: 2PC-কে consensus বলা; compensation-এর ক্রম উল্টো না রাখা; outbox-কে exactly-once বলা।

৪ · অংশ গ — Caching (মডিউল ৫)

রিভিশন: পর্ব ২৮ (কৌশল, race), পর্ব ২৯ (LRU, TTL, stampede) আর পর্ব ৩০ (shard, hot key). CDN-এর cache পর্ব ১৭-এ।

গ-০১Cache-aside, read-through, write-through, write-behind আর write-around তুলনা করুন। Cache-এ ০.৫ ms, database-এ ১০ ms লাগে; hit ratio ৮০% থেকে ৯৫% করলে গড় latency আর সেকেন্ডে ১০,০০০ পড়ায় database-এর চাপ কত বদলায়? লেখার পরে cache update না করে delete কেন? — ১০ নম্বর (মাঝারি)
কৌশলকে কী করেলাভদাম
Cache-asideapp cache দেখে, miss-এ database থেকে এনে বসায়সহজ; শুধু চাওয়া ডেটাপ্রথম পড়া ধীর; race
Read-throughmiss-এ cache-এর loader আনেapp-এর কোড সরলcache-স্তরকে database চিনতে হয়
Write-throughলেখা cache আর database-এ একসাথেcache টাটকাপ্রতি লেখা ধীর
Write-behindআগে cache, পরে batch-এ databaseদ্রুততম লেখাflush-এর আগে cache বিকল হলে লেখা হারায়
Write-aroundশুধু database, cache-এ deleteএকবার-লেখা ডেটায় cache নষ্ট হয় নাপরের পড়ায় miss

হিসাব: গড় = tc + (১ − h) × tdb (miss-এও cache দেখার সময় যোগ হয়)। h = ০.৮: ০.৫ + ০.২ × ১০ = ২.৫ ms; h = ০.৯৫: ০.৫ + ০.০৫ × ১০ = ১.০ ms. Database-এর চাপ R(১ − h): সেকেন্ডে ২,০০০ থেকে ৫০০ — চার গুণ কম।

Delete কেন: delete idempotent আর ক্রম-নিরপেক্ষ, retry নিরাপদ; দুই লেখকের update উল্টো ক্রমে পৌঁছালে cache-এ পুরোনো মান থেকে যায়। তবু একটি race থাকে: পুরোনো মান পড়ে রাখা পাঠক লেখকের delete-এর পরে সেটি বসালে cache ভুল — প্রতিকার COMMIT-এর পরে delete, প্রতিটি key-এ TTL, আর lease বা version.

নম্বর কোথায়: টেবিল (৪), হিসাব (২), delete ও race (৪)। পর্ব ২৮

যেখানে নম্বর কাটে: miss-এ cache-এর সময় বাদ দেওয়া; write-behind-এর ক্ষতির জানালা না বলা।

গ-০২O(1)-এ get আর put করে এমন LRU cache কীভাবে বানাবেন? TTL-এ jitter কেন — ১ লাখ key একসাথে ৩,৬০০ সেকেন্ডের TTL পেলে আর ±১০% jitter দিলে কী বদলায়? — ৫ নম্বর (মাঝারি)

LRU-এর কাঠামো: hash map (key → list-এর node) + doubly linked list (মাথায় সবচেয়ে সাম্প্রতিক, লেজে সবচেয়ে পুরোনো)।

  1. get: map-এ node খোঁজা, list থেকে খুলে মাথায় বসানো — O(1).
  2. put: নতুন node মাথায়; ভরা হলে লেজের node মোছা, map থেকেও — O(1).
  3. Doubly কেন: মাঝের node খুলতে আগের node লাগে।

দুর্বলতা: একবার-পড়া বড় scan LRU-কে ধুয়ে দেয় — তখন SLRU, ARC বা W-TinyLFU.

Jitter: একসাথে মেয়াদ মানে এক সেকেন্ডে ১ লাখ miss (avalanche). ±১০%-এ মেয়াদ ৩,২৪০ থেকে ৩,৯৬০ সেকেন্ডে, ৭২০ সেকেন্ডের জানালায় ছড়ায় — গড়ে সেকেন্ডে প্রায় ১৩৯টি।

নম্বর কোথায়: কাঠামো ও O(1)-এর যুক্তি (৩), jitter ও হিসাব (২)। পর্ব ২৯

যেখানে নম্বর কাটে: শুধু linked list (তাহলে খোঁজা O(n)); singly linked list বলা।

গ-০৩Cache stampede, cache penetration আর cache avalanche-এর পার্থক্য আর প্রতিকার লিখুন। সেকেন্ডে ৫,০০০ অনুরোধের একটি hot key-এর মেয়াদ শেষ হলো, database থেকে আবার আনতে ৪০ ms লাগে — কোনো প্রতিকার না থাকলে প্রায় কতগুলো একই query database-এ যায়? — ৫ নম্বর (মাঝারি)

হিসাব: আবার আনার সময়ে আসা অনুরোধ = ৫,০০০ × ০.০৪ = ২০০টি একই query.

সমস্যাকী ঘটেপ্রতিকার
Stampedeএকটি hot key-এর মেয়াদ শেষে একসাথে বহু missএকজনই আনে, বাকিরা অপেক্ষা করে (request coalescing); soft TTL-এ পুরোনো মান দিয়ে পেছনে নবায়ন; আগেভাগে নবায়ন
Penetrationঅস্তিত্বহীন key-এর ঢল, প্রতিটি সরাসরি database-এ“নেই” উত্তরও অল্প TTL-এ cache; Bloom filter; ইনপুট যাচাই ও rate limit
Avalancheবহু key একসাথে মেয়াদ শেষ, বা cache node বিকলTTL jitter, replica, ধীরে warming, database-এর সামনে সীমা

নম্বর কোথায়: তিন সংজ্ঞা (২), হিসাব (১), প্রতিকার (২)। পর্ব ২৯ · পর্ব ০৬

যেখানে নম্বর কাটে: তিনটিকে এক বলা; Bloom filter-কে stampede-এর প্রতিকার বলা।

গ-০৪৮টি shard-এর একটি distributed cache-এ hit ratio ৯৬%; একটি shard বিকল হলে database-এর চাপ কত গুণ হয়? সূত্র বের করুন, আর এই ঝুঁকি কমানোর তিনটি উপায় লিখুন। Hot key কীভাবে সামলাবেন? — ৫ নম্বর (কঠিন)

সূত্র: স্বাভাবিকে database-এ R(১ − h). একটি shard বিকল হলে তার ভাগ R/N-এর আগের hit-গুলোও miss: নতুন চাপ = R(১ − h) + (R/N)·h. অনুপাত = ১ + h ÷ (N(১ − h)) = ১ + ০.৯৬ ÷ (৮ × ০.০৪) = ১ + ৩ = ৪ গুণ.

তিন উপায়: প্রতিটি shard-এর replica আর দ্রুত failover; gutter pool — বিকল shard-এর key সাময়িক একটি ছোট pool-এ অল্প TTL-এ; database-এর সামনে concurrency সীমা আর request coalescing.

Hot key: sampling বা top-k দিয়ে চেনা; অল্প TTL-এর L1 (app-এর memory-তে); কয়েকটি shard-এ কপি (key#1 … key#k); coalescing. Virtual node বাড়িয়ে লাভ নেই — একটি key ভাগ হয় না।

নম্বর কোথায়: সূত্র ও মান (২), তিন উপায় (২), hot key (১)। পর্ব ৩০

যেখানে নম্বর কাটে: “চাপ ১/N বাড়ে” — hit ratio-র প্রভাব ভুলে যাওয়া।

৫ · অংশ ঘ — Messaging আর stream (মডিউল ৬)

রিভিশন: পর্ব ৩১ (ack, DLQ), পর্ব ৩২ (fan-out), পর্ব ৩৩ (partition, offset), পর্ব ৩৪, পর্ব ৩৫, পর্ব ৩৬ (window, watermark) আর পর্ব ৩৭.

ঘ-০১Point-to-point queue, pub/sub topic আর log-ভিত্তিক stream (Kafka-ধাঁচ)-এর তুলনা করুন। সেকেন্ডে ৫০০টি event, ৬টি subscription, প্রতিটি event ১ KB — সেকেন্ডে কতগুলো delivery আর কত bandwidth? একটি consumer group-এ ১২টি partition আর ১৬ জন consumer থাকলে কী হয়? — ১০ নম্বর (মাঝারি)
মাপকাঠিQueuePub/subLog stream
একটি বার্তা পায়একজন কর্মীপ্রতিটি subscription নিজের কপিপ্রতিটি consumer group, নিজের offset থেকে
পড়ার পরেack হলে মোছেsubscription-এর কপি ack-এ মোছেমোছে না — retention পর্যন্ত থাকে, আবার পড়া যায়
ক্রমসাধারণত নিশ্চিত নয়সাধারণত নিশ্চিত নয়শুধু একটি partition-এর ভেতরে
ব্যবহারকাজ ভাগ — email, ছবি ছোট করাএক ঘটনার বহু শ্রোতাevent history, CDC, replay, stream processing

হিসাব: delivery = E × N = ৫০০ × ৬ = সেকেন্ডে ৩,০০০; × ১ KB = বাইরে যায় সেকেন্ডে প্রায় ৩ MB. Fan-out গুণফলে বাড়ে — subscription দ্বিগুণ মানে খরচও দ্বিগুণ।

Consumer group: একটি group-এ প্রতিটি partition ঠিক একজন consumer পড়েন — ১২ জন কাজ করেন, ৪ জন অলস। সমান্তরালতার ছাদ partition-এর সংখ্যা; কেউ এলে বা গেলে rebalance. যাদের ক্রম জরুরি, তাদের একই key দিন — একই partition-এ যাবে।

লাভ ও দাম: producer আর consumer সময়, গতি আর ব্যর্থতায় আলাদা; ভিড় শোষণ (load levelling). দাম — eventual consistency, duplicate, ক্রম আর debugging.

নম্বর কোথায়: টেবিল (৪), হিসাব (২), consumer group (২), লাভ-দাম (২)। পর্ব ৩১ · পর্ব ৩২ · পর্ব ৩৩

যেখানে নম্বর কাটে: “Kafka পুরো topic-এ ক্রম দেয়”; partition না বাড়িয়ে consumer বাড়ালেই throughput বাড়বে বলা।

ঘ-০২At-most-once, at-least-once আর exactly-once delivery ব্যাখ্যা করুন। Exactly-once delivery কেন অসম্ভব, আর effectively-once কীভাবে পাওয়া যায়? Offset কাজের আগে না পরে commit করলে কী হয়? সেকেন্ডে ২,০০০ বার্তা, ২৪ ঘণ্টার dedup window আর প্রতি entry ৪০ byte হলে dedup-এর memory কত? — ১০ নম্বর (কঠিন)

মূল সত্য: timeout মানে “জানি না” — বার্তা হারাল, নাকি কাজ হয়ে শুধু ack হারাল, প্রেরক আলাদা করতে পারে না।

নিশ্চয়তাকতবারকীভাবে আসেঝুঁকি
At-most-once০ বা ১কাজের আগে ack বা commit, retry নেইcrash-এ হারায়
At-least-once১ বা বেশিকাজের পরে ack, retryduplicate
Effectively-onceপ্রভাব ঠিক ১ বারat-least-once + idempotent প্রক্রিয়াdedup-এর খরচ

কেন অসম্ভব: ack না এলে প্রেরকের সামনে দুটিই পথ — আবার পাঠানো (duplicate-এর ঝুঁকি) বা না পাঠানো (হারানোর ঝুঁকি); অজানা অবস্থা থেকে বেরোনোর তৃতীয় পথ নেই। তাই “exactly-once” বাস্তবে মানে প্রভাব একবার।

Effectively-once-এর ধাপ:

  1. প্রতিটি বার্তায় একটি অনন্য id.
  2. Consumer effect আর “দেখা হয়েছে” চিহ্ন (inbox টেবিল বা offset) একই local transaction-এ লেখে।
  3. Duplicate এলে চিহ্ন দেখে বাদ।
  4. বাইরের সেবায় (payment, email) তাদের নিজস্ব idempotency key.

Offset commit: আগে করলে crash-এ বার্তা হারায় (at-most-once); পরে করলে কয়েকটি দুবার আসে (at-least-once).

হিসাব: ২,০০০ × ৮৬,৪০০ × ৪০ byte = ৬.৯১ × ১০৯ byte ≈ ৬.৯ GB. Window ছোট হলে পুরোনো duplicate (redrive, replay) ঢুকে পড়ে; বিকল্প per-producer sequence number — অনেক সস্তা।

নম্বর কোথায়: টেবিল (৩), অসম্ভবতার যুক্তি (২), effectively-once (২), offset (১), হিসাব (২)। পর্ব ৩৪ · পর্ব ৩৩

যেখানে নম্বর কাটে: “broker exactly-once দেয়, তাই চিন্তা নেই”; dedup window-এর আকার যুক্তি ছাড়া।

ঘ-০৩Event sourcing আর CQRS কী? দুটি কি একই? একটি stream-এ ২,৩৪০টি event, প্রতি ৫০০টিতে একটি snapshot — বর্তমান অবস্থা বানাতে কতগুলো event replay করতে হয়? — ৫ নম্বর (মাঝারি)

Event sourcing: শুধু বর্তমান অবস্থা নয়, প্রতিটি ঘটনা রাখা; অবস্থা = ঘটনাগুলোর fold — মুদি দোকানের খাতার মতো, শেষ লাইনের বাকি নয়, প্রতিটি লেনদেন। Event store শুধু যোগ করে; লেখায় “আমি version ৪ দেখে লিখছি” — optimistic concurrency.

CQRS: লেখার মডেল (নিয়ম যাচাই) আর পড়ার মডেল (প্রতিটি পাতার মাপে সাজানো) আলাদা; projector event পড়ে read model বানায়, যা একটু পিছিয়ে থাকে।

এক নয়: event sourcing ছাড়া CQRS আর CQRS ছাড়া event sourcing — দুটোই সম্ভব।

হিসাব: শেষ snapshot version ২,০০০-এ (৫০০-এর গুণিতক); বাকি ২,৩৪০ − ২,০০০ = ৩৪০টি event replay.

Trade-off: লাভ audit, অতীতের যেকোনো মুহূর্তে ফেরা আর নতুন read model; দাম জটিলতা, event-এর schema চিরকাল বহন (upcasting) আর মুছে ফেলার কঠিন প্রশ্ন। বেশিরভাগ CRUD অংশে লাগে না।

নম্বর কোথায়: দুই সংজ্ঞা (২), পার্থক্য (১), হিসাব (১), trade-off (১)। পর্ব ৩৫

যেখানে নম্বর কাটে: দুটিকে সমার্থক বলা; read model তাৎক্ষণিক ধরে নেওয়া।

ঘ-০৪Batch আর stream processing-এর পার্থক্য লিখুন। Event time আর processing time কী? Watermark আর allowed lateness দিয়ে দেরিতে আসা ডেটা কীভাবে সামলানো হয়? — ৫ নম্বর (মাঝারি)

পার্থক্য: batch সীমিত (bounded) ডেটায় কাজ করে — গতকালের সব log; দাম দেরি। Stream অসীম (unbounded) ধারায় — যা এখনো আসছে; দাম অসম্পূর্ণতা।

দুই সময়: event time = ঘটনা কখন ঘটেছে (ফোনের timestamp); processing time = processor কখন দেখল। নেটওয়ার্কহীন ফোন পরে পাঠালে দুটি অনেক আলাদা; ব্যবসার প্রশ্নে event time.

Watermark: processor-এর অনুমান — “এর চেয়ে পুরোনো ঘটনা আর আসবে না”; তখন window-এর ফল দেওয়া হয়। উদাহরণ: ১০:০০–১০:০১-এর window; watermark ১০:০১ পেরোলে প্রথম ফল; allowed lateness ২ মিনিট হলে watermark ১০:০৩ পেরোনো পর্যন্ত দেরির ঘটনা ফল সংশোধন করে (sink-এ upsert); তারপর আলাদা পথে (side output) বা বাদ।

নম্বর কোথায়: পার্থক্য (১), দুই সময় (১), watermark ও lateness (২), উদাহরণ (১)। পর্ব ৩৬

যেখানে নম্বর কাটে: watermark-কে নিশ্চয়তা বলা — এটি অনুমান; processing time ধরে ব্যবসার হিসাব।

৬ · অংশ ঙ — Distributed systems-এর তত্ত্ব (মডিউল ৭)

রিভিশন: পর্ব ৩৮ (partial failure, system model), পর্ব ৩৯ (clock), পর্ব ৪০ (CAP, PACELC — পূর্ণ ১০ নম্বরের উত্তর অংশ ১-এর stepper-এ), পর্ব ৪১, পর্ব ৪২, পর্ব ৪৩, পর্ব ৪৪, পর্ব ৪৫ আর পর্ব ৪৬. এই অংশে প্রমাণ আর গণনার নম্বর বেশি — ধাপ বাদ দেবেন না।

ঙ-০১Distributed system-এ partial failure কী? Timeout পেরোলে কী সিদ্ধান্ত নেওয়া যায়, আর কী যায় না? সময় আর ব্যর্থতার system model লিখুন। ৫ node-এর একটি cluster ৩ আর ২-এ ভাগ হলে কোন পক্ষ লেখা নেবে? — ৫ নম্বর (মাঝারি)

Partial failure: কিছু অংশ চলে, কিছু থামে, আর একটি call-এর ফল অজানা থাকতে পারে; এক যন্ত্রে সাধারণত সব বা কিছুই না।

Timeout: request হারানো, reply হারানো আর ধীর node — বাইরে থেকে তিনটি এক। বলা যায় শুধু “উত্তর আসেনি”; কাজ হয়েছে কি না অজানা — তাই retry কেবল idempotent কাজে।

মডেলধরন
সময়synchronous (দেরির সীমা জানা) · partially synchronous (বেশিরভাগ সময় সীমার ভেতরে) · asynchronous (কোনো সীমা নেই)
ব্যর্থতাcrash-stop · crash-recovery · Byzantine (মিথ্যা বা এলোমেলো আচরণ)

ডেটা সেন্টারের বেশিরভাগ সিস্টেম ধরে partial synchrony আর crash-recovery (system model).

৩ | ২ partition: majority (৩) পক্ষ এগোয়; ২-এর পক্ষ থামে — নইলে দুই পক্ষই লিখে split-brain.

নম্বর কোথায়: partial failure (১), timeout (১), model (২), partition (১)। পর্ব ৩৮

যেখানে নম্বর কাটে: “timeout মানে node মৃত”।

ঙ-০২আলাদা যন্ত্রের wall clock দিয়ে ঘটনার ক্রম ঠিক করা যায় না কেন? Lamport clock আর vector clock-এর নিয়ম লিখুন। এই তিনটি process-এর ঘটনায় দুটিরই মান বের করুন আর b ও c-র সম্পর্ক বলুন: P1-এ a (local), তারপর b (P2-কে বার্তা পাঠায়); P2-এ c (local), তারপর d (P1-এর বার্তা গ্রহণ), তারপর e (P3-কে বার্তা পাঠায়); P3-এ f (local), তারপর g (P2-এর বার্তা গ্রহণ)। — ১০ নম্বর (মাঝারি, ছবিসহ)

Wall clock-এর সমস্যা: quartz ঘড়ি সরে (২০ ppm মানে দিনে প্রায় ১.৭ সেকেন্ড), NTP-র পরে লাফায়। ঘড়ির পার্থক্যের চেয়ে কাছাকাছি দুটি ঘটনা উল্টো ক্রমে দেখা যায়।

Lamport-এর নিয়ম: প্রতিটি ঘটনায় L = L + ১; পাঠানোর সময় L সাথে যায়; গ্রহণে L = max(L, Lবার্তা) + ১. গুণ: a → b হলে L(a) < L(b); উল্টোটা সত্য নয়।

Vector-এর নিয়ম: প্রতিটি process-এর একটি ঘর; নিজের ঘটনায় নিজের ঘর + ১; পাঠানোয় পুরো vector যায়; গ্রহণে ঘর ধরে max, তারপর নিজের ঘর + ১. সব ঘরে ≤ আর অন্তত একটিতে < হলে আগে; নইলে concurrent.

ছবি (খাতায়): তিনটি আনুভূমিক সময়রেখা P1, P2, P3; b থেকে d-তে আর e থেকে g-তে তির্যক তীর; প্রতিটি বিন্দুর পাশে L আর vector.

ঘটনাLamportVector [P1, P2, P3]
a (P1)১[1,0,0]
b (P1, পাঠায়)২[2,0,0]
c (P2)১[0,1,0]
d (P2, গ্রহণ)max(১, ২) + ১ = ৩[2,2,0]
e (P2, পাঠায়)৪[2,3,0]
f (P3)১[0,0,1]
g (P3, গ্রহণ)max(১, ৪) + ১ = ৫[2,3,2]

b ও c: L(c) = ১ < L(b) = ২, তবু c → b নয়। Vector [0,1,0] আর [2,0,0] — একটির প্রথম ঘর বড়, অন্যটির দ্বিতীয় — তাই concurrent. Lamport একটি ক্রম দেয়, কিন্তু concurrency চেনে না।

নম্বর কোথায়: wall clock-এর সমস্যা (১), দুই নিয়ম (২), ছবি (২), টেবিল (৩), সম্পর্ক ও সীমা (২)। পর্ব ৩৯ · পর্ব ৪৬

যেখানে নম্বর কাটে: গ্রহণের পরে + ১ ভুলে যাওয়া; Lamport-এর মান দেখে concurrency নিয়ে দাবি।

ঙ-০৩Linearizable, sequential, causal আর eventual consistency-র পার্থক্য উদাহরণসহ লিখুন। Serializability আর linearizability কি এক? — ৫ নম্বর (মাঝারি)
মডেলপ্রতিশ্রুতিকোথায়
Linearizableএক কপির ভ্রম, বাস্তব সময় মেনে: একটি লেখা শেষ হওয়ার পরে শুরু হওয়া প্রতিটি পড়া নতুন মান দেখেশেষ সিট, টাকা কাটা, leader lock
Sequentialসবাই একই একটি ক্রম দেখে, কিন্তু তা বাস্তব সময়ের সাথে মিলতে হবে নাকিছু memory model
Causalকারণ আগে, ফল পরে — প্রশ্নের আগে উত্তর দেখা যাবে না; concurrent লেখার ক্রম যেকোনোcomment thread, chat
Eventualনতুন লেখা থামলে শেষে সব কপি মিলবে; কতক্ষণে, তার কোনো সীমা নেইlike গণনা, view count

Serializability বনাম linearizability: এক নয়। প্রথমটি বহু object-এর transaction — ফল কোনো একটি ক্রমিক ক্রমের মতো, যেকোনো ক্রম; দ্বিতীয়টি একটি object-এর বাস্তব সময়ের ক্রম। দুটি একসাথে strict serializability.

নম্বর কোথায়: চার মডেল (৩), পার্থক্য (২)। পর্ব ৪০ · পর্ব ২৪

যেখানে নম্বর কাটে: “eventual মানে কয়েক সেকেন্ডে নিশ্চিত”; sequential আর linearizable এক বলা।

ঙ-০৪Leaderless replication-এ R + W > N হলে কেন পড়া সর্বশেষ সম্পন্ন লেখা দেখে — প্রমাণ করুন। N = ৩, (W, R) = (২, ২) আর N = ৫, (W, R) = (৩, ৩)-এ কয়টি replica বিকল সহ্য হয়? Quorum থাকলেও পুরোনো বা হারানো মান আসতে পারে এমন তিনটি ক্ষেত্র লিখুন। Read repair আর hinted handoff কী? — ১০ নম্বর (কঠিন)

প্রমাণ: লেখা পৌঁছায় W টি replica-র সেট SW-এ, পড়া উত্তর নেয় R টির সেট SR থেকে। |SW ∪ SR| ≤ N, তাই |SW ∩ SR| = W + R − |SW ∪ SR| ≥ W + R − N ≥ ১. সেই অন্তত একটি replica সর্বশেষ সম্পন্ন লেখা রাখে, আর পড়া সব উত্তরের মধ্যে সবচেয়ে নতুন version নেয়। ∎

NWRন্যূনতম overlapলেখা টেকেপড়া টেকে
৩২২১১টি বিকলে১টি বিকলে
৫৩৩১২টি বিকলে২টি বিকলে

Quorum তবু ঠকায়:

  1. চলমান লেখা: কিছু replica নতুন, কিছু পুরোনো — পরপর দুটি পড়া উল্টো ফল দেখতে পারে।
  2. ব্যর্থ আংশিক লেখা: W পূরণ হয়নি, কিন্তু যেখানে পৌঁছেছে সেখানে থেকে যায় — rollback নেই।
  3. Sloppy quorum: নিজের তালিকার বাইরের node-এর ack W-এ গোনা — overlap হারায়।
  4. Concurrent লেখা আর LWW: একটি নিঃশব্দে হারায়।

Linearizable পড়া-লেখা দরকার হলে উত্তর ফেরানোর আগে blocking read repair (তবু compare-and-set-এ নয়), নয়তো consensus.

মেরামত: read repair — পড়ায় পুরোনো replica পেলে নতুন মান লিখে দেওয়া; hinted handoff — বন্ধ replica-র লেখা আরেকজন “hint”-সহ রেখে পরে পৌঁছে দেয়; anti-entropy — Merkle tree দিয়ে পেছনে মিলানো।

নম্বর কোথায়: প্রমাণ (৩), টেবিল (২), তিন ক্ষেত্র (৩), মেরামত (২)। পর্ব ৪১ · পর্ব ৬১

যেখানে নম্বর কাটে: প্রমাণের জায়গায় শুধু উদাহরণ; “R + W > N মানেই linearizable”.

ঙ-০৫Raft-এ leader election আর log replication ব্যাখ্যা করুন। ৫টি সার্ভারের cluster কতগুলো crash সহ্য করে? ৪টিতে কি বেশি সহ্য হয়? Randomized election timeout কেন? একটি entry কখন committed? — ১০ নম্বর (মাঝারি, ছবিসহ)

সংজ্ঞা: Consensus মানে কয়েকটি সার্ভারের একটি log-এর ক্রমে একমত হওয়া — agreement, validity আর termination.

State diagram (খাতায়): তিনটি বৃত্ত — follower → (timeout) → candidate → (majority ভোট) → leader; candidate থেকে follower-এ তীর “বড় term বা বৈধ leader দেখলে”; leader থেকে follower-এ “বড় term দেখলে”।

Election:

  1. Follower নির্দিষ্ট সময়ে heartbeat না পেলে term + ১ করে, নিজে ভোট দেয়, সবাইকে RequestVote পাঠায়।
  2. প্রতি term-এ প্রত্যেকে একটিই ভোট দেয় — শুধু সেই candidate-কে, যার log অন্তত ভোটদাতার মতো হালনাগাদ (আগে শেষ entry-র term, তারপর দৈর্ঘ্য)।
  3. Majority পেলে leader. Election timeout এলোমেলো (Raft paper-এর উদাহরণে ১৫০–৩০০ ms), যাতে সবাই একসাথে candidate হয়ে ভোট ভাগ (split vote) না করে।

Log replication: client-এর command leader-এর log-এ; AppendEntries-এ prevLogIndex আর prevLogTerm — না মিললে follower প্রত্যাখ্যান করে, leader পেছনে গিয়ে মেলায়। Entry majority-তে পৌঁছালে committed, তারপর state machine-এ প্রয়োগ আর client-কে উত্তর। Leader কপি গুনে commit করে শুধু নিজের term-এর entry; আগেরগুলো তার সাথে পরোক্ষে।

সহনশীলতা: ২f + ১টি সার্ভার f টি crash সয়। ৫ → majority ৩, সয় ২টি; ৪ → majority ৩, সয় মাত্র ১টি — জোড় সংখ্যায় লাভ নেই। যেকোনো দুটি majority অন্তত একজনে মেলে, তাই committed entry নতুন leader-এর চোখ এড়ায় না।

নম্বর কোথায়: state diagram (২), election (৩), replication ও commit (৩), সহনশীলতা (২)। পর্ব ৪২

যেখানে নম্বর কাটে: “৪টিতে ২টি সয়”; split vote-এর কারণ না বলা; আগের term-এর entry কপি গুনেই commit বলা।

ঙ-০৬Lease-ভিত্তিক distributed lock-এ দুজন একসাথে ধারক কীভাবে হতে পারে? Fencing token দিয়ে কীভাবে ঠেকানো হয় — timeline দিয়ে দেখান। — ৫ নম্বর (মাঝারি, ছবিসহ)

Timeline (খাতায় দুটি সময়রেখা, client A আর B, নিচে storage):

  1. A lock পায়, token ৩৩, lease ১০ সেকেন্ড।
  2. A-র process GC-বিরতিতে ১৫ সেকেন্ড থেমে থাকে — নিজে জানে না।
  3. Lease ফুরায়; B lock পায়, token ৩৪, storage-এ লেখে।
  4. A জেগে নিজেকে এখনো ধারক ভেবে token ৩৩ নিয়ে লেখে।
  5. Storage আগেই ৩৪ দেখেছে; ৩৩ < ৩৪ → প্রত্যাখ্যান।

শর্ত: fencing token একঘেয়েভাবে বাড়তে থাকা নম্বর (UUID নয় — তাতে ছোট-বড় নেই), আর যাচাই করে storage নিজে, lock সেবা নয়।

বিকল্প: অনেক সময় lock-ই লাগে না — শর্তসহ লেখা (compare-and-set, version), idempotency, বা প্রতিটি key-এর একজনই লেখক।

নম্বর কোথায়: সমস্যার কারণ (১), timeline (২), শর্ত (১), বিকল্প (১)। পর্ব ৪৩

যেখানে নম্বর কাটে: “TTL বাড়ালেই হবে”; যাচাই lock সেবায় বলা।

ঙ-০৭Bloom filter কীভাবে কাজ করে? False-positive হারের সূত্র লিখে সেরা k বের করুন। ১ কোটি key-এ ১% false positive চাইলে কত memory আর কয়টি hash? ভুল কোন দিকে হয়, আর এটি কোথায় ব্যবহার করা নিরাপদ? — ৬ নম্বর (কঠিন)

কাজ: Bloom filter-এ m bit-এর array আর k টি hash. যোগ: k টি bit ১; খোঁজ: k টির সব ১ হলে “হয়তো আছে”, একটি ০ হলেও “নিশ্চিত নেই”।

সূত্র: n টি key আর k টি hash-এর পরে একটি bit ০ থাকার সম্ভাবনা ≈ e−kn/m; false positive p ≈ (১ − e−kn/m)k. সেরা k = (m/n) ln 2 — তখন অর্ধেক bit ১, আর m/n = −ln p ÷ (ln 2)².

হিসাব: p = ০.০১ → m/n ≈ ৯.৫৯ bit; m ≈ ৯.৫৯ × ১০৭ bit ≈ ১২ MB; k ≈ ৯.৫৯ × ০.৬৯৩ ≈ ৬.৬৪ → ৭টি hash. (০.১%-এ প্রায় ১৪.৪ bit আর ১০টি hash.)

ভুলের দিক: শুধু false positive; false negative নেই, যদি মোছা না হয়। মুছতে হলে counting Bloom বা cuckoo filter. নিরাপদ জায়গা: LSM-এ অপ্রয়োজনীয় SSTable বাদ, cache penetration ঠেকানো — ভুল মানে সামান্য বাড়তি কাজ। চূড়ান্ত সিদ্ধান্তে (বিল, duplicate বাদ) নয়।

নম্বর কোথায়: কাজ (১), সূত্র ও k (২), হিসাব (২), ভুলের দিক ও ব্যবহার (১)। পর্ব ৪৫ · পর্ব ১৯

যেখানে নম্বর কাটে: bit-কে byte ধরে প্রায় ৯৬ MB লেখা; false negative আছে বলা।

৭ · অংশ চ — Architecture, reliability আর operations (মডিউল ৮)

রিভিশন: পর্ব ৪৭, পর্ব ৪৮ (retry, circuit breaker), পর্ব ৪৯, পর্ব ৫০ (SLO, burn rate), পর্ব ৫১ (RPO-RTO), পর্ব ৫২ (OAuth, PKCE) আর পর্ব ৫৩.

চ-০১Monolith, modular monolith আর microservices-এর তুলনা করুন। ৯৯.৯% availability-র ১৫টি সেবা একটি অনুরোধের পথে পরপর লাগলে সম্মিলিত availability কত? Service boundary কীভাবে ঠিক করবেন, আর distributed monolith-এর চিহ্ন কী? — ১০ নম্বর (মাঝারি)

সংজ্ঞা: Monolith — পুরো অ্যাপ একটি প্রোগ্রাম, একসাথে deploy. Microservices-এর দুটি সংজ্ঞাগত শর্ত: প্রতিটি সেবা আলাদাভাবে deploy করা যায়, আর নিজের ডেটার একমাত্র মালিক।

মাপকাঠিMonolithModular monolithMicroservices
Deployএকসাথেএকসাথে, ভেতরে কড়া module-সীমাপ্রতিটি আলাদা
ডেটাএকটি databaseএকটি database, module-প্রতি schemaপ্রতি সেবায় নিজের
Callfunction callfunction callnetwork call — latency আর ব্যর্থতা
Operationsসরলসরলdiscovery, tracing, mesh, প্রতি সেবায় CI/CD

হিসাব: ০.৯৯৯১৫ ≈ ৯৮.৫১% — বছরে প্রায় ১৩০ ঘণ্টা কোনো না কোনো সেবা বিকল।

Boundary: ব্যবসার ভাষায় — bounded context আর aggregate (অর্ডার, পেমেন্ট, ক্যাটালগ); টেবিল বা কোডের স্তর (controller, DAO) দিয়ে নয়। যা একসাথে বদলায়, তা একসাথে থাকে।

Distributed monolith-এর চিহ্ন: একটি অনুরোধে ডজনখানেক বাচাল call; কয়েক সেবা একই টেবিলে লেখে; সবাইকে একসাথে deploy করতে হয়।

উপসংহার: নতুন সিস্টেমে modular monolith দিয়ে শুরু; দল আর চাপ বাড়লে মাপা কারণে একটি একটি অংশ কেটে আলাদা (strangler fig).

নম্বর কোথায়: টেবিল (৪), হিসাব (২), boundary (২), distributed monolith (২)। পর্ব ৪৭

যেখানে নম্বর কাটে: “microservices সবসময় বেশি scalable”; network-এর দাম বাদ দেওয়া।

চ-০২ধীর dependency কেন মৃত dependency-র চেয়ে খারাপ? Timeout, retry, exponential backoff ও jitter, circuit breaker আর bulkhead ব্যাখ্যা করুন; circuit breaker-এর state diagram আঁকুন। তিনটি স্তরের প্রতিটি ৩ বার চেষ্টা করলে সবচেয়ে নিচের বিকল সেবা কতগুলো চেষ্টা পায়? — ১০ নম্বর (মাঝারি, ছবিসহ)

ধীর বনাম মৃত: মৃত সেবা ১ ms-এ “না” বলে; ধীর সেবা প্রতিটি thread কয়েক সেকেন্ড আটকে রাখে। Little-এর সূত্রে সেকেন্ডে ২০০টি call-এ W ১০০ ms থেকে ৫ সেকেন্ড হলে একসাথে চলা call ২০ থেকে ১,০০০ — ধরা যাক ২০০-র pool ফুরায়, সুস্থ কাজও থামে: cascading failure.

  1. Timeout প্রতিটি call-এ, আর পুরো অনুরোধে একটি deadline, যা নিচের সব call-এ পৌঁছায়।
  2. Retry শুধু ক্ষণিকের ত্রুটিতে আর idempotent কাজে; exponential backoff-এ অপেক্ষা = min(cap, base × ২k), আর full jitter-এ তার ০ থেকে পুরো মানের মধ্যে এলোমেলো — একসাথে ব্যর্থ ক্লায়েন্টদের ঢেউ ভাঙে।
  3. Circuit breaker: closed (সব যায়, ব্যর্থতা গোনে) → ব্যর্থতার হার সীমা ছাড়ালে open (কিছুই যায় না, সাথে সাথে fallback) → cooldown শেষে half-open (অল্প কয়েকটি পরীক্ষা) → সফলে closed, ব্যর্থে আবার open.
  4. Bulkhead: প্রতিটি dependency-র আলাদা thread pool বা connection সীমা — জাহাজের খোপের মতো, একটিতে পানি ঢুকলেও বাকিরা ভাসে।

ছবি (খাতায়): তিনটি বৃত্ত closed, open, half-open; তীরে শর্ত — “ব্যর্থতা ≥ সীমা”, “cooldown শেষ”, “পরীক্ষা সফল”, “পরীক্ষা ব্যর্থ”।

হিসাব: ৩ × ৩ × ৩ = ২৭টি চেষ্টা একটি মূল অনুরোধে — retry নিজেই overload. প্রতিকার: শুধু একটি স্তরে retry, আর retry budget.

নম্বর কোথায়: ধীর বনাম মৃত (২), timeout ও retry (৩), state diagram (২), bulkhead (১), হিসাব (২)। পর্ব ৪৮ · পর্ব ১৮

যেখানে নম্বর কাটে: state diagram-এ half-open বাদ; “retry বাড়ালেই reliability বাড়ে”।

চ-০৩Token bucket, leaky bucket, fixed window, sliding window log আর sliding window counter তুলনা করুন। Token bucket-এ r = সেকেন্ডে ১০, b = ৫০ হলে যেকোনো ১০ সেকেন্ডে সর্বোচ্চ কতটি অনুরোধ যায়? মিনিটে ১০০-র sliding window counter-এ আগের মিনিটে ৮০টি, এই মিনিটের ১৫ সেকেন্ডে ৩০টি — আনুমানিক গণনা কত? বহু gateway-তে সীমা ঠিক রাখবেন কীভাবে? — ৬ নম্বর (মাঝারি)
AlgorithmধারণাBurstদুর্বলতা
Token bucketr হারে token জমে, সর্বোচ্চ b; প্রতি অনুরোধে একটিb পর্যন্তburst ইচ্ছাকৃত
Leaky bucket (queue)সমান হারে বেরোয়মসৃণ, বাড়তিটা অপেক্ষায়অপেক্ষা বাড়ে
Fixed windowমিনিট ধরে counterসীমানায় দ্বিগুণ — ২ সেকেন্ডে ২০০সীমানার ফাঁক
Sliding logপ্রতিটি অনুরোধের সময় রাখানিখুঁতmemory-খেকো
Sliding counterআগের × (১ − f) + এখনকাছাকাছিআগের window সমান ছড়ানো ধরে

হিসাব: token bucket-এ যেকোনো T সেকেন্ডে সর্বোচ্চ b + r·T = ৫০ + ১০ × ১০ = ১৫০. Sliding counter-এ f = ১৫ ÷ ৬০ = ০.২৫, গণনা = ৮০ × ০.৭৫ + ৩০ = ৯০ < ১০০ — অনুরোধ যায়।

বহু gateway: ভাগ করা store-এ atomic INCR বা একটি script — “আগে পড়া, পরে লেখা”-র race-এ সীমা ফুটো হয়; বিকল্প প্রতিটি gateway-তে সীমার একটি ভাগ (অসম ভাগে ভুল)। উত্তরে 429 আর Retry-After; client-এ backoff ও jitter.

নম্বর কোথায়: টেবিল (৩), দুই হিসাব (২), বহু gateway (১)। পর্ব ৪৯ · পর্ব ১১

যেখানে নম্বর কাটে: rate limit আর load shedding এক বলা; burst-এর b বাদ দিয়ে ১০০ লেখা।

চ-০৪SLI, SLO আর SLA-র পার্থক্য লিখুন। ৩০ দিনে ৯৯.৯% SLO-তে error budget কত মিনিট, আর সেকেন্ডে ৫০০ অনুরোধে কতগুলো ব্যর্থ অনুরোধের অনুমতি? Burn rate ১৪.৪-এর alert কেন? — ৫ নম্বর (মাঝারি)

সংজ্ঞা: SLI = মাপা সংকেত (সফল অনুরোধের অনুপাত, p99 latency); SLO = লক্ষ্য (৩০ দিনে ৯৯.৯% সফল); SLA = চুক্তি, ভাঙলে ক্ষতিপূরণ — সাধারণত SLO-র চেয়ে ঢিলা।

Error budget: (১ − ০.৯৯৯) × ৪৩,২০০ মিনিট = ৪৩.২ মিনিট. অনুরোধে: ৫০০ × ২৫,৯২,০০০ সেকেন্ড × ০.০০১ = ১২,৯৬,০০০টি.

Burn rate: এখনকার error ratio ÷ (১ − SLO). ১৪.৪-এ এক ঘণ্টায় বাজেটের ১৪.৪ ÷ ৭২০ = ২% শেষ, আর এই গতিতে ৫০ ঘণ্টায় পুরো মাসের বাজেট — মানুষ জাগানোর মতো জরুরি। দুই জানালা (১ ঘণ্টা আর ৫ মিনিট) দুটিতেই সীমা ছাড়ালে alert — দ্রুত ধরা, আর সমস্যা মিটলে দ্রুত থামা।

নম্বর কোথায়: সংজ্ঞা (২), budget হিসাব (২), burn rate (১)। পর্ব ৫০

যেখানে নম্বর কাটে: SLA আর SLO এক বলা; CPU-র মতো কারণে alert, ব্যবহারকারীর লক্ষণে নয়।

চ-০৫RPO আর RTO কী? Replication থাকলে backup কেন লাগে? চারটি DR কৌশলের তুলনা দিন। প্রতি ৬ ঘণ্টায় একটি পূর্ণ backup, ডেটা ২ TB, restore-এর গতি ২০০ MB/s হলে সবচেয়ে খারাপ RPO আর শুধু কপি ফেরানোর সময় কত? — ৫ নম্বর (মাঝারি)

সংজ্ঞা: RPO — সর্বোচ্চ কত সময়ের ডেটা হারানো চলে (অতীতের দিকে); RTO — সর্বোচ্চ কতক্ষণ বন্ধ থাকা চলে (ভবিষ্যতের দিকে)। Replication ভুল DELETE, corruption আর ransomware-ও কপি করে; backup অতীতের নির্দিষ্ট মুহূর্তে ফেরায়।

কৌশলRPO-RTO (মোটামুটি মাত্রা)খরচ ও জটিলতা
Backup & restoreঘণ্টা থেকে দিনসবচেয়ে কম
Pilot lightমিনিট থেকে ঘণ্টামূল ডেটা replicate, compute বন্ধ
Warm standbyমিনিটছোট মাপে সব চালু
Active-activeপ্রায় শূন্যসবচেয়ে বেশি; conflict সামলাতে হয়

হিসাব: backup-এর ঠিক আগে বিপর্যয় হলে RPO = ৬ ঘণ্টা. কপি ফেরানো = ২ × ১০১২ ÷ ২ × ১০৮ = ১০,০০০ সেকেন্ড ≈ ২.৭৮ ঘণ্টা; যাচাই, log replay আর traffic সরানো যোগ হলে আসল RTO আরও বেশি — তা মাপা যায় শুধু restore-মহড়ায়।

নম্বর কোথায়: সংজ্ঞা (১), backup-এর কারণ (১), টেবিল (২), হিসাব (১)। পর্ব ৫১

যেখানে নম্বর কাটে: RPO আর RTO উল্টে বলা; কপি ফেরানোর সময়কেই RTO ধরা।

চ-০৬Authentication আর authorization-এর পার্থক্য লিখুন (401 বনাম 403). ব্রাউজার বা মোবাইল অ্যাপে OAuth 2.0 authorization code flow + PKCE-র ধাপ লিখুন; PKCE কোন সমস্যা মেটায়? Envelope encryption কী? — ৫ নম্বর (মাঝারি)

পার্থক্য: authentication — “আপনি কে” (না পারলে 401); authorization — “এটি পারেন কি না” (না পারলে 403). প্রতিটি সেবা প্রতিটি বস্তুতে মালিকানা যাচাই করে — এর অভাবই BOLA.

  1. অ্যাপ একটি এলোমেলো code_verifier বানায়, তার SHA-256 hash হলো code_challenge.
  2. ব্যবহারকারীকে authorization server-এ পাঠায়, challenge-সহ।
  3. লগইন ও সম্মতির পর redirect-এ একটি অল্পমেয়াদি authorization code.
  4. অ্যাপ code আর verifier দিয়ে token নেয় — access token (API-র জন্য), আর OIDC-তে ID token (client-এর জন্য)।
  5. Server verifier-এর hash মিলিয়ে দেখে।

PKCE-এর কাজ: পথে চুরি যাওয়া code, verifier ছাড়া token-এ ভাঙানো যায় না। পুরোনো implicit flow নয়।

Envelope encryption: প্রতিটি ফাইল নিজের DEK দিয়ে encrypt; DEK-কে KMS-এর KEK দিয়ে মুড়ে ফাইলের পাশে রাখা; KEK কখনো KMS-এর বাইরে আসে না। Rotation-এ শুধু ছোট DEK আবার মোড়ানো; ফাঁস হলে ক্ষতি এক ফাইলে সীমিত।

নম্বর কোথায়: পার্থক্য (১), PKCE-র ধাপ (২), envelope (২)। পর্ব ৫২

যেখানে নম্বর কাটে: OAuth 2.0-কে পরিচয় যাচাইয়ের protocol বলা (পরিচয় দেয় OIDC); password encrypt করে রাখা — রাখতে হয় ধীর, salt দেওয়া hash-এ।

৮ · অংশ ছ — Case study ধাঁচের নকশার প্রশ্ন (মডিউল ৯)

লিখিত পরীক্ষায় “নকশা করুন” প্রশ্নে পুরো ইন্টারভিউর মতো আলোচনা হয় না — পরীক্ষক খোঁজেন অনুমান, ছোট হিসাব, আধা পাতার লেবেলসহ ছবি আর দুটি-তিনটি মূল সিদ্ধান্তের যুক্তি। পূর্ণ walkthrough পর্ব ৬৬-এ, বড় হিসাবের অনুশীলন পর্ব ৬২-এ। রিভিশন: পর্ব ৫৪–পর্ব ৬১. সব সেবা কাল্পনিক। Video (পর্ব ৫৯)-এর মূল কথা নিচের ভাইভায় (ভ-৩০); notification (পর্ব ৫৭) আর ride-sharing (পর্ব ৫৮)-এর হিসাব পর্ব ৬৩-এর MCQ-তে।

ছ-০১একটি URL shortener নকশা করুন: ধরা যাক দিনে ১ কোটি নতুন link, পড়া আর লেখার অনুপাত ১০০:১, peak গড়ের ৩ গুণ। Peak QPS হিসাব করুন, ৭ অক্ষরের base62 code কীভাবে বানাবেন, 301 না 302, আর analytics redirect-এর পথ থেকে কেন আলাদা — ছবিসহ লিখুন। — ১০ নম্বর (মাঝারি, ছবিসহ)

পরিধি: লম্বা URL → ছোট code; code → redirect; মেয়াদ; click analytics. NFR: redirect-এর p99 কম, উঁচু availability.

হিসাব: লেখা ১ কোটি ÷ ৮৬,৪০০ ≈ সেকেন্ডে ১১৬, peak ≈ ৩৪৭; পড়া ১০০ কোটি ÷ ৮৬,৪০০ ≈ ১১,৫৭৪, peak ≈ ৩৪,৭২২. চাপ পড়ায়। ৫ বছরে ১,৮২৫ কোটি link; পর্ব ৫৪-এর অনুমানে তিন কপিতে প্রায় ২৭ TB.

API: POST /v1/links → 201 আর code; GET /{code} → 302 আর Location.

ছবি (খাতায়): client → CDN/edge → LB → redirect service → cache → key-value store; লেখার পথে ID generator; redirect service থেকে ড্যাশ তীরে click event → stream → analytics.

Code: (ক) counter বা Snowflake + base62 — collision নেই, কিন্তু code অনুমান করা যায়। (খ) random বা hash-এর ৭ অক্ষর — ৬২৭ ≈ ৩.৫২ লাখ কোটি সম্ভাব্য code, তবু birthday-র অঙ্কে ১ কোটি link-এ গড়ে n² ÷ (২M) ≈ ১৪টি collision — তাই লেখা শর্তসাপেক্ষ (না থাকলে তবেই), collision-এ নতুন code.

301 বনাম 302: 301 browser cache করে — পরের click আর সার্ভারে আসে না; analytics আর খারাপ link বন্ধের ক্ষমতা হারায়। তাই 302 বা 307.

Analytics আলাদা কেন: redirect-এর latency-তে লেখা যোগ না করা; event at-least-once, তাই event id দিয়ে dedup; unique visitor HyperLogLog-এ; analytics ভাঙলেও redirect চলে।

নম্বর কোথায়: পরিধি ও হিসাব (২), API (১), ছবি (২), code ও collision (২), 301/302 (১), analytics ও cache (২)। পর্ব ৫৪ · পর্ব ২৩ · পর্ব ৪৫

যেখানে নম্বর কাটে: “MD5-এর প্রথম ৭ অক্ষর” — collision-এর ব্যবস্থা ছাড়া; 301 লিখে analytics-ও দাবি; সংখ্যা ছাড়া “Kafka, Redis”.

ছ-০২একটি chat সেবায় বার্তার ক্রম, duplicate আর অফলাইন ডিভাইস কীভাবে সামলাবেন? ধরা যাক দিনে ২০০ কোটি বার্তা আর peak গড়ের ৫ গুণ — peak-এ সেকেন্ডে কতটি লেখা? দুই ব্যবহারকারী আলাদা gateway সার্ভারে যুক্ত থাকলে একটি বার্তার পথ sequence আকারে লিখুন। — ১০ নম্বর (কঠিন, ছবিসহ)

হিসাব: ২০০ কোটি ÷ ৮৬,৪০০ ≈ সেকেন্ডে ২৩,১৪৮; peak × ৫ ≈ ১,১৫,৭৪১টি লেখা. ডিভাইসে পৌঁছানো কপি এর বহু গুণ (group আর একাধিক ডিভাইস) — পর্ব ৫৫-এর অনুমানে সেকেন্ডে ১৩ লাখের বেশি।

Sequence (খাতায় চারটি খাড়া রেখা: A-র ফোন, G1, chat service, G2 ও B):

  1. A-র ফোন বার্তায় নিজের client id দেয় (retry নিরাপদ), WebSocket-এ gateway G1-এ পাঠায়।
  2. Chat service কথোপকথনের পরের seq (যেমন ১০৪) দিয়ে conversation log-এ একবার লেখে; durable হলে A পায় ack — “sent”.
  3. Registry দেখে B আছে G2-তে; pub/sub-এ G2-এর channel-এ publish.
  4. G2 B-র socket-এ পাঠায়; B-র ফোন জানায় delivered_upto = ১০৪.
  5. B অফলাইন হলে push notification; ফিরলে নিজের cursor (শেষ দেখা seq) থেকে sync.

ক্রম ও duplicate: ক্রম দেয় সার্ভারের প্রতি-কথোপকথন seq, ফোনের ঘড়ি নয়; ফাঁক দেখলে ফোন টেনে আনে। Delivery at-least-once; client id-তে সার্ভার dedup, seq দেখে ফোন duplicate ফেলে — প্রভাব একবার।

ব্যর্থতা ও trade-off: একটি gateway মরলে তার হাজারো client একসাথে ফেরে — backoff, full jitter আর প্রথম চেষ্টাও ছড়ানো; registry-র entry TTL-এ মোছে।

নম্বর কোথায়: হিসাব (১), sequence ও ছবি (৩), ক্রম ও duplicate (৩), অফলাইন (২), ব্যর্থতা (১)। পর্ব ৫৫ · পর্ব ১০ · পর্ব ৩৪

যেখানে নম্বর কাটে: ফোনের ঘড়ি দিয়ে ক্রম; “WebSocket দিলেই delivery নিশ্চিত”; অফলাইন ডিভাইস ভুলে যাওয়া।

ছ-০৩News feed-এ fan-out on write আর fan-out on read-এর তুলনা করুন। ১ কোটি follower-এর একজন লেখক পোস্ট করলে push-এ কতগুলো timeline লেখা, আর fan-out worker-রা মোট সেকেন্ডে ১ লাখ লেখা পারলে কত সময়? Hybrid নকশা লিখুন। — ১০ নম্বর (মাঝারি)
মাপকাঠিOn write (push)On read (pull)
কাজ কখনপোস্টের সময় প্রত্যেক follower-এর timeline-এ ID বসানোfeed খোলার সময় সবার সাম্প্রতিক পোস্ট টেনে মেলানো
পড়াদ্রুত — একটি তালিকাধীর — অনেক উৎস মেলাতে হয়
লেখাfollower-সংখ্যার সমানএকটি
দুর্বলতাবিখ্যাত লেখকে বিপুল লেখা; অনুপস্থিতদের জন্য অপচয়প্রতিটি পড়া ভারী, tail latency

হিসাব: ১ কোটি timeline লেখা; ১ কোটি ÷ ১ লাখ = ১০০ সেকেন্ড — এই সময়ে অন্যদের পোস্টও সারিতে আটকে থাকে।

Hybrid: follower-এর একটি সীমা (ধরা যাক ১০ হাজার) ছাড়ানো লেখকদের পোস্ট push হয় না; feed খোলার সময় তাঁদের সাম্প্রতিক পোস্ট টেনে এনে নিজের timeline-এর সাথে মেশানো হয়; বাকিদের push. সীমার দাম পড়ার সময়ে, তাই সীমা বাছতে হয় মেপে।

খুঁটিনাটি: timeline-এ শুধু ID, সীমিত দৈর্ঘ্য; লেখা, ছবি আর গণনা আলাদা করে (hydration); অনুপস্থিতদের timeline রাখা হয় না, ফিরলে আবার বানানো; নিজের পোস্ট সাথে সাথে নিজের feed-এ; মোছা আর block পড়ার মুহূর্তে ছাঁকা।

নম্বর কোথায়: টেবিল (৩), হিসাব (২), hybrid (৩), খুঁটিনাটি (২)। পর্ব ৫৬ · পর্ব ৩২

যেখানে নম্বর কাটে: পুরো পোস্ট timeline-এ কপি করা; “push দ্রুত” বলে লম্বা লেজের কথা না তোলা।

ছ-০৪একটি কাল্পনিক বাসের টিকিট বিক্রির সেবায় ঈদের আগের ভিড়ে একই সিট দুজনের কাছে বিক্রি হওয়া কীভাবে ঠেকাবেন? Hold, payment timeout আর ledger-সহ নকশা লিখুন। Database সেকেন্ডে ২,০০০ transaction সামলায় আর প্রতিটি কেনায় ৪টি লাগে — waiting room সেকেন্ডে সর্বোচ্চ কতজনকে ঢোকাবে? — ১০ নম্বর (কঠিন)

Double booking: সত্য এক জায়গায় — seat database-এ শর্তসহ লেখা: UPDATE seats SET status = 'held' … WHERE seat = ? AND status = 'available'; ০ সারি মানে আগেই নেওয়া। বা প্রতি-সিট version কলাম। Redis-lock বা app-এর memory নয় — lock রাখলেও তা শুধু অকারণ চেষ্টা কমায়, সঠিকতা দেয় না।

  1. Waiting room (edge-এ): স্বাক্ষর-করা token-সহ সারি; ভর্তির হার database-এর সামর্থ্য থেকে — ২,০০০ ÷ ৪ = সেকেন্ডে ৫০০ জন, নিরাপত্তার জন্য আরও কিছু কম।
  2. Hold: শর্তসহ UPDATE, মেয়াদসহ (ধরা যাক ১০ মিনিট)।
  3. Payment: idempotency key-সহ; state machine-এ PENDING → SUCCEEDED বা FAILED, আর timeout-এ UNKNOWN — সরাসরি retry নয়, একই key-তে খোঁজ।
  4. সফল হলে: hold → sold, টিকিট issue (outbox → notification).
  5. মেয়াদ বা ব্যর্থতায়: hold ছেড়ে দেওয়া — compensation.
  6. দিনশেষে: payment gateway-এর রিপোর্টের সাথে reconciliation.

Ledger: double-entry — প্রতিটি লেনদেনের লাইনগুলোর যোগফল শূন্য (যাত্রীর হিসাবে −৮০০, কোম্পানির প্রাপ্য হিসাবে +৮০০); entry শুধু যোগ হয়; ভুল শোধরায় উল্টো entry; টাকা পয়সায় পূর্ণসংখ্যা।

Trade-off: hold-এর মেয়াদ ছোট হলে টাকা দেওয়ার মাঝে সিট হারায়; বড় হলে না-কেনা মানুষের hold সিট আটকে রাখে।

নম্বর কোথায়: double booking (৩), প্রবাহ (৩), payment timeout (১), ledger (২), হিসাব (১)। পর্ব ৬০ · পর্ব ২৪ · পর্ব ২৫

যেখানে নম্বর কাটে: “Redis lock দেব”; “autoscaling করব” — database এভাবে বাড়ে না; balance কলাম সরাসরি বদলানো।

ছ-০৫Dynamo-ধাঁচের একটি distributed key-value store-এর মূল অংশগুলো লিখুন। N = ৩, W = ২, R = ২-এ কয়টি বিকল সহ্য হয়? দুটি vector clock {A:2} আর {A:1, B:1}-এর সম্পর্ক কী, store তখন কী করে? Sloppy quorum কী কেনে, কী হারায়? — ১০ নম্বর (কঠিন)
অংশকৌশলকেন
Partitioningconsistent hashing + virtual nodenode যোগে শুধু নতুন node-এর ন্যায্য অংশ সরে; ভার সমান
ReplicationN = ৩, preference list-এর পরের তিনটি ভিন্ন nodeএকটি node হারালেও ডেটা
Consistencyপ্রতি অনুরোধে R, W বাছাই (QUORUM = ২)দরকারমতো দ্রুত বা নির্ভুল
Versioningvector clock, siblingconcurrent লেখা হারায় না
ক্ষণিকের ব্যর্থতাsloppy quorum + hinted handoffলেখা চলতে থাকে
স্থায়ী ব্যর্থতাread repair + Merkle anti-entropyপেছনে মিলানো

সহনশীলতা: লেখায় N − W = ১, পড়ায় N − R = ১; একটি বিকলে বাকি দুটিরই অপেক্ষা করতে হয়, তাই p99 বাড়ে (পর্ব ৬১-এর simulator-এ put-এর p99 ৪.৬ থেকে ৬১.৩ ms).

Vector clock: A-ঘরে প্রথমটি বড় (২ > ১), B-ঘরে দ্বিতীয়টি (১ > ০) — কোনোটি অন্যটির সব ঘরে ≥ নয়, তাই concurrent. Store দুটিই sibling হিসেবে রাখে, get দুটিই ফেরত দেয়, client মিলিয়ে নতুন context-সহ put করে (cart-এ union — মোছা জিনিস ফিরে আসতে পারে)। LWW হলে একটি নিঃশব্দে হারাত।

Sloppy quorum: preference list-এর বাইরের node-এর ack W-এ গোনা — লেখার availability কেনে (পর্ব ৬১-এ ৯৩.২৯% থেকে ১০০%), কিন্তু hint পৌঁছানো পর্যন্ত R + W > N-এর overlap হারায় — কিছু stale read. শর্তসাপেক্ষ লেখা বা অনন্যতা লাগলে প্রতি shard-এ Raft.

নম্বর কোথায়: অংশগুলো (৩), সহনশীলতা (১), vector clock ও sibling (৩), sloppy quorum (২), বিকল্প (১)। পর্ব ৬১ · পর্ব ৪১ · পর্ব ৪৬

যেখানে নম্বর কাটে: “একটি তৈরি NoSQL নিন” বলে অংশের নাম না দেওয়া; LWW-কে নিরাপদ default বলা।

৯ · ভাইভা — মুখে উত্তরের কৌশল, নমুনা ভাইভা আর মডিউলভিত্তিক কুইকফায়ার

ভাইভায় পরীক্ষক আপনার উত্তর শুনেই পরের প্রশ্ন বানান (follow-up প্রশ্ন); তাই প্রথম উত্তর এমনভাবে দিন, যাতে পরের প্রশ্ন আপনার চেনা পথে আসে।

তিন বাক্যের কাঠামো

কী (এক বাক্যের সংজ্ঞা) → কেন বা কীভাবে (কারণ বা একটি সংখ্যা) → দাম বা সীমা

“Circuit breaker কী?” — “বারবার ব্যর্থ হওয়া একটি dependency-কে কিছুক্ষণ ডাকা বন্ধ রাখার সুইচ (কী)। ব্যর্থতার হার সীমা ছাড়ালে open হয়, সব call সাথে সাথে fallback পায়, আর cooldown-এর পরে half-open-এ কয়েকটি পরীক্ষা চলে (কীভাবে)। সীমা খুব নিচু হলে ক্ষণিকের ঝাঁকুনিতেই সেবা বন্ধ হয় (দাম)।” তৃতীয় বাক্যটিই পরের প্রশ্নের দরজা খোলে।

দুটি অভ্যাস যা নম্বর এনে দেয়

  • সংখ্যায় কথা বলুন: “দ্রুত” নয়, “cache-এ প্রায় ১ ms, database-এ ১০ ms”; “বেশি” নয়, “৪ থেকে ৫ সার্ভারে ৮০% key সরে”। হিসাবের পথ মুখে বলুন — ছোট ভুলেও পদ্ধতির নম্বর থাকে।
  • Trade-off নিজে থেকেই বলুন: প্রতিটি “হ্যাঁ”-র পরে “কিন্তু দাম হলো…”। পরীক্ষক ঠিক এটিই শুনতে চান।

যে প্রশ্নের উত্তর জানেন না — সৎভাবে সামলানো

  1. স্বীকার করুন: “পুরো নিশ্চিত নই” বলা দুর্বলতা নয়; ভুল কথা জোর দিয়ে বললে বাকি উত্তরেও সন্দেহ জাগে।
  2. বানাবেন না: কোনো product-এর সীমা, দাম বা সংস্করণ মনে না থাকলে তা বলুন, আর যাচাইয়ের পথ (official documentation, ছোট load test) জানান।

একটি নমুনা ভাইভা — follow-up কীভাবে গভীরে নামে

একটি কাল্পনিক ভাইভা, replication দিয়ে শুরু — প্রতিটি উত্তরের শেষ অংশ থেকেই পরের প্রশ্ন আসে।

প্রতিটি প্রশ্ন-উত্তরের পর
পরীক্ষক
প্রার্থী (মূল কথা)
কেন ভালো উত্তর
জোড়া পর্ব
  1. শুরু। চার লাভ আর একটি সীমা — “লেখা বাড়ে না”।
  2. দুই দিকের দাম। প্রতিটির দাম, আর মাঝামাঝি পথের নাম।
  3. উপসর্গ থেকে কারণ। replication lag, তারপর প্রতিকার।
  4. ধাপ গুনে বলা। নিজে থেকে split-brain-এর ঝুঁকি তোলা।
  5. মডিউল বদল। replication থেকে consensus.
  6. শেষ ধাপ। fencing token, আর যাচাই করে storage.

ভাইভা কুইকফায়ার — দ্রুত প্রশ্ন, ছোট উত্তর

জোরে উত্তর বলুন, তারপর প্রশ্নে চেপে মেলান — প্রতিটিতে ৩০–৬০ সেকেন্ডের বেশি নয়। “তারপর পরীক্ষক জিজ্ঞেস করতে পারেন…” লাইনে সম্ভাব্য পরের প্রশ্ন আর তার এক লাইনের উত্তর।

মডিউল ১ — ভিত্তি (পর্ব ০১–০৬)

ভ-০১High-level design আর low-level design-এর পার্থক্য কী? (সহজ)

High-level design পুরো সেবার উপাদান, তাদের সংযোগ, ডেটার পথ আর ব্যর্থতায় আচরণ ঠিক করে; low-level design একটি সার্ভিসের ভেতরের class, interface আর pattern. এই কোর্স প্রথমটি নিয়ে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… কোনটি আগে? — high-level; কোন সেবা কোন ডেটার মালিক না জেনে class বানানো অর্থহীন। পর্ব ০১

ভ-০২গড় latency-র বদলে p99 কেন দেখা হয়? (সহজ)

গড় ধীরতম অনুরোধগুলো লুকায়; p99 বলে ১০০টির ৯৯টি এর চেয়ে দ্রুত। আর fan-out-এ একটি ধীর উত্তরই পুরো অনুরোধ ধীর করে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… তিন সার্ভারের p99-এর গড় কি সেবার p99? — না; histogram-এর bucket যোগ করে তারপর percentile. পর্ব ০৪ · পর্ব ৫০

ভ-০৩একটি নকশার প্রশ্নে কোন ক্রমে এগোবেন? (সহজ)

আট ধাপ: পরিধি ও requirement, হিসাব, API, data model, high-level design, deep dive, failure ও trade-off, wrap-up — দরকারে পেছনে ফিরে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… হিসাব কেন API-র আগে? — সংখ্যাই বলে চাপ কোথায় (পড়া না লেখা), তাই কোন অংশে গভীরে যাবেন। পর্ব ০৬

মডিউল ২ — যোগাযোগ আর API (পর্ব ০৭–১২)

ভ-০৪নতুন HTTPS সংযোগে প্রথম উত্তর পেতে কত round trip লাগে? (মাঝারি)

TCP ১ + TLS 1.3 ১ + অনুরোধ ১ = ৩ RTT (TLS 1.2-এ ৪, QUIC-এ ২); DNS আলাদা। RTT ১৫০ ms হলে শুধু এতেই প্রায় ৪৫০ ms.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… কমাবেন কীভাবে? — keep-alive আর connection pool, HTTP/2-এর multiplexing, কাছের edge — আলোর গতি কোডে কমে না। পর্ব ০৭

ভ-০৫API gateway আর load balancer কি একই? (সহজ)

Load balancer মূলত ভার ভাগ করে; API gateway L7-এ API-র নীতি প্রয়োগ করে — token যাচাই, quota, transformation, version routing. একই software দুটো কাজই পারে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… gateway নিজেই SPOF হলে? — কয়েকটি stateless instance, কয়েকটি zone, সামনে L4 LB বা anycast. পর্ব ১১

ভ-০৬REST, gRPC আর GraphQL — কখন কোনটি? (মাঝারি)

পাবলিক আর HTTP caching-নির্ভর API-তে REST; ভেতরের দ্রুত, টাইপ-করা call আর streaming-এ gRPC; বহু ক্লায়েন্টের ভিন্ন ভিন্ন ডেটা চাহিদায় GraphQL বা BFF.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… GraphQL-এ N+1 কী? — প্রতিটি parent-এর জন্য child-এর আলাদা query; key জমিয়ে এক batch-এ আনা (DataLoader-ধাঁচ)। পর্ব ০৯

ভ-০৭JSON API-তে 64-bit ID কেন string হিসেবে পাঠানো ভালো? (মাঝারি)

JavaScript-এর number একটি double; ২৫৩-এর ওপরে সব পূর্ণসংখ্যা হুবহু রাখতে পারে না, তাই Snowflake-ধাঁচের ID নিঃশব্দে বদলে যায়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… Protobuf-এ মুছে ফেলা field number আবার ব্যবহার করা যায় না কেন? — পুরোনো ডেটা আর পুরোনো কোড সেটিকে আগের অর্থে পড়বে; reserved দিয়ে আটকান। পর্ব ১২

মডিউল ৩ — Scaling (পর্ব ১৩–১৮)

ভ-০৮Vertical আর horizontal scaling-এর পার্থক্য? (সহজ)

Vertical মানে বড় যন্ত্র — সহজ, কিন্তু ছাদ, দামের বাঁক আর single point of failure; horizontal মানে বেশি যন্ত্র — লাগে load balancer, stateless নকশা আর সমন্বয়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… ৫% কাজ serial হলে সর্বোচ্চ কত গুণ? — Amdahl-এ ১ ÷ ০.০৫ = ২০ গুণ, যত যন্ত্রই দিন। পর্ব ১৩

ভ-০৯CDN-এর hit ratio ৯০% থেকে ৯৯% হলে origin-এর চাপ কত কমে? (মাঝারি)

চাপ = R(১ − h); miss ০.১ থেকে ০.০১ — দশ গুণ কম। প্রতিটি বাড়তি “নয়” আবার দশ গুণ।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… তাহলে CDN বিকল হলে? — ৯৯% hit-এর সাইটে origin-এ হঠাৎ ১০০ গুণ চাপ; তাই origin shield, request collapsing আর origin-এর সামনে সীমা। পর্ব ১৭

ভ-১০gRPC সার্ভিসে নতুন pod যোগ করেও সেটি ভার পাচ্ছে না — কেন? (কঠিন)

HTTP/2-এর সংযোগ দীর্ঘজীবী আর multiplexed; L4 load balancer শুধু নতুন সংযোগ ভাগ করে, তাই পুরোনো সংযোগের সব call পুরোনো pod-এই যায়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… সমাধান? — L7 proxy, client-side load balancing, বা সংযোগের সর্বোচ্চ বয়স বেঁধে দেওয়া। পর্ব ১৪ · পর্ব ০৯

মডিউল ৪ — ডেটা স্টোরেজ (পর্ব ১৯–২৭)

ভ-১১ACID-এর C আর CAP-এর C কি এক? (সহজ)

না। ACID-এর C মানে অ্যাপের নিয়ম আর constraint রক্ষা (“balance শূন্যের নিচে নয়”); CAP-এর C মানে linearizability — সব কপি মিলে যেন একটিই কপি।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… ACID-এর I আর CAP-এর C-র সম্পর্ক? — I বহু object-এর transaction-এর ক্রম (serializability), CAP-এর C একটি object-এর বাস্তব সময়ের ক্রম; দুটি মিলে strict serializability. পর্ব ২৪ · পর্ব ৪০

ভ-১২Replication আর partitioning-এর পার্থক্য এক লাইনে? (সহজ)

Replication একই ডেটার কপি বাড়ায় — টিকে থাকা আর পড়া; partitioning ডেটা ভাগ করে — ক্ষমতা আর লেখা। বাস্তবে দুটো একসাথে চলে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… Replication কি লেখার ক্ষমতা বাড়ায়? — না; প্রতিটি লেখা প্রতিটি কপিতে যায়। পর্ব ২২ · পর্ব ২৩

ভ-১৩Inverted index কী, B-tree index থেকে কোথায় আলাদা? (মাঝারি)

Inverted index হলো শব্দ → ডকুমেন্টের সাজানো তালিকা; লেখার মাঝের শব্দেও দ্রুত খোঁজে আর ranking (BM25) করা যায়। B-tree পুরো মান বা তার শুরু দিয়ে খোঁজে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… LIKE '%x%' কেন সার্চ নয়? — প্রতিটি খোঁজে সব সারি পড়ে, শব্দ বোঝে না, আর কোনটি বেশি মানানসই জানে না। পর্ব ২৭

ভ-১৪Snapshot isolation কোন anomaly ঠেকায় না? (কঠিন)

Write skew — দুটি transaction একই শর্ত পড়ে আলাদা সারি লেখে, যেমন দুজন on-call ডাক্তারই ছুটি নেন। Snapshot isolation শুধু একই সারিতে দুজনের লেখা দেখে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… ঠেকাবেন কীভাবে? — SERIALIZABLE (SSI), শর্তের সারিতে SELECT … FOR UPDATE, বা সংঘাতকে একটি সারিতে আনা। পর্ব ২৪

মডিউল ৫ — Caching (পর্ব ২৮–৩০)

ভ-১৫Write-behind cache-এ ঝুঁকি কী, তবু কোথায় চলে? (মাঝারি)

লেখা আগে cache-এ, পরে batch-এ database-এ; flush-এর আগে cache বিকল হলে সেই লেখা হারায় — ক্ষতির জানালা flush-এর ব্যবধান। View count বা like-এর মতো counter-এ চলে, টাকায় নয়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… ক্ষতি কমাবেন কীভাবে? — ছোট flush ব্যবধান, cache-এ replica বা append-only log. পর্ব ২৮

ভ-১৬কয়েক স্তরের cache-এ (browser → CDN → app-এর L1 → Redis) সবচেয়ে খারাপ staleness কত? (মাঝারি)

Invalidation না থাকলে সব স্তরের TTL-এর যোগফল — প্রতিটি স্তর আগের স্তরের পুরোনো কপি আবার নিজের পুরো TTL ধরে রাখতে পারে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… কমাবেন কীভাবে? — L1-এ pub/sub দিয়ে invalidation আর ছোট TTL; TTL থাকে নিরাপত্তা-জাল হিসেবে। পর্ব ৩০

মডিউল ৬ — Messaging আর stream (পর্ব ৩১–৩৭)

ভ-১৭Visibility timeout কী, ছোট রাখলে কী হয়? (মাঝারি)

গ্রহণের পরে বার্তা অন্যদের থেকে লুকানোর সময় (visibility timeout). কাজের চেয়ে ছোট হলে কাজ চলাকালেই আরেকজন একই বার্তা পায় — duplicate, এমনকি সুস্থ বার্তাও DLQ-তে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… লম্বা কাজে? — heartbeat দিয়ে মেয়াদ বাড়ানো, আর কাজ idempotent. পর্ব ৩১ · পর্ব ৩৭

ভ-১৮Poison message আর dead letter queue কী? (সহজ)

যে বার্তা বারবার ব্যর্থ হয়, সে poison message; সর্বোচ্চ receive count (যেমন ৩) পেরোলে তাকে DLQ-তে আলাদা করা হয়, যাতে বাকিরা আটকে না থাকে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… DLQ-তে গেলে তারপর? — alert, কারণ ঠিক করে আবার পাঠানো (redrive); alert না থাকলে DLQ একটি কবরস্থান। পর্ব ৩১

ভ-১৯Log compaction কী, কোথায় লাগে? (মাঝারি)

Log compaction-এ log প্রতিটি key-এর শুধু শেষ মান রাখে, offset বদলায় না; CDC বা একটি টেবিলের অবস্থা নতুন consumer-কে শুরু থেকে ফেরাতে কাজে লাগে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… acks=all কি একাই যথেষ্ট? — না; replication factor ৩ আর min.insync.replicas ≥ ২ সাথে লাগে, নইলে ISR ছোট হয়ে একটি কপিতেই “OK”. পর্ব ৩৩

ভ-২০Choreography আর orchestration — কখন কোনটি? (মাঝারি)

Choreography-তে প্রতিটি সেবা event শুনে নিজের কাজ করে, কেন্দ্র নেই; orchestration-এ একজন orchestrator ধাপগুলো ডাকে। প্রবাহ লম্বা আর compensation জটিল হলে orchestration.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… choreography-র বড় বিপদ? — পুরো অবস্থা কেউ জানে না; timeout আর debugging কঠিন। পর্ব ৩২ · পর্ব ২৫

মডিউল ৭ — Distributed systems-এর তত্ত্ব (পর্ব ৩৮–৪৬)

ভ-২১FLP কী বলে? (কঠিন)

পুরোপুরি asynchronous model-এ একটি process-ও crash করতে পারলে কোনো deterministic consensus algorithm সব ক্ষেত্রে শেষ হওয়ার নিশ্চয়তা দিতে পারে না (FLP — Fischer, Lynch ও Paterson, ১৯৮৫)।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… তাহলে Raft চলে কীভাবে? — safety সবসময় রাখে; liveness পায় partial synchrony আর randomized timeout-এ। পর্ব ৩৮ · পর্ব ৪২

ভ-২২Split-brain কী? (সহজ)

Partition বা ভুল failover-এ দুটি node নিজেকে leader ভেবে দুজনই লেখা নেয় — ডেটা দুই দিকে চলে যায়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… ঠেকাবেন কীভাবে? — majority quorum (সংখ্যালঘু পক্ষ থামে), আর fencing token বা epoch দিয়ে পুরোনো leader-এর লেখা প্রত্যাখ্যান। পর্ব ৩৮ · পর্ব ৪৩

ভ-২৩Timeout বা latency মাপতে কোন ঘড়ি ব্যবহার করবেন? (মাঝারি)

Monotonic clock; wall clock NTP-র সংশোধনে বা leap second-এ পেছাতে বা লাফাতে পারে, তাতে সময়কাল ঋণাত্মকও দেখাতে পারে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… Spanner commit-wait কেন করে? — TrueTime-এর অনিশ্চয়তার সীমা পার হওয়া পর্যন্ত অপেক্ষা, যাতে timestamp-এর ক্রম বাস্তব সময়ের ক্রম মানে। পর্ব ৩৯

ভ-২৪কয়েকটি সার্ভারের HyperLogLog থেকে মোট আলাদা ব্যবহারকারী কীভাবে বের করবেন? (কঠিন)

একই p আর একই hash-এর sketch-গুলোর register ঘর ধরে max, তারপর একবার গণনা; আলাদা অনুমান যোগ করা চলে না — একই মানুষ দুবার গোনা হয়। m = ১৬,৩৮৪-এ ভুল প্রায় ০.৮১%, memory প্রায় ১২ KB.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… Count-min sketch কেন কখনো কম দেখায় না? — প্রতিটি ঘরে আসল গণনা আর collision, শুধু যোগ হয়; সর্বনিম্নও তাই আসলের সমান বা বেশি। পর্ব ৪৫

ভ-২৫G-Counter CRDT-তে merge কেন max, যোগ নয়? (কঠিন)

প্রতিটি replica-র ঘর শুধু বাড়ে; max সবচেয়ে নতুন মান দেয়, আর একই অবস্থা দুবার মেলালেও ফল একই (idempotent). যোগ করলে duplicate দুবার গোনা হয়। {A:3, B:1} আর {A:2, B:4} মিলে {A:3, B:4}, মোট ৭.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… CRDT দিয়ে ব্যাংক ব্যালান্স রাখবেন? — শুধু CRDT নয়; “শূন্যের নিচে নয়” রক্ষায় coordination লাগে। পর্ব ৪৬

মডিউল ৮ — Architecture, reliability আর operations (পর্ব ৪৭–৫৩)

ভ-২৬Liveness probe-এ database যাচাই কেন ভুল? (মাঝারি)

Database-এর সমস্যায় সব pod একসাথে restart হয় — তাতে কিছুই সারে না, বরং reconnect-এর ঢল আসে। Liveness শুধু process নিজে আটকে আছে কি না দেখবে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… তাহলে readiness? — readiness শুধু traffic নেওয়া বন্ধ করে, restart করে না; সেখানেও যাচাই অগভীর রাখা। পর্ব ৪৮ · পর্ব ৫৩

ভ-২৭Deploy আর release-এর পার্থক্য কী? (সহজ)

Deploy মানে কোড সার্ভারে পৌঁছানো, release মানে ব্যবহারকারীর জন্য feature খোলা; feature flag দুটিকে আলাদা করে আর এক ক্লিকে বন্ধের সুইচ দেয়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… image tag-এর বদলে digest কেন? — tag সরানো যায়, digest বিষয়বস্তুর hash; সব যন্ত্রে আর rollback-এ ঠিক একই bytes. পর্ব ৫৩

ভ-২৮Metric-এ user_id label রাখা যায় না কেন? (মাঝারি)

প্রতিটি মান একটি নতুন time series — cardinality বিস্ফোরণ, memory আর খরচ লাফিয়ে বাড়ে; user_id log বা trace-এর attribute.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… head আর tail sampling? — শুরুতেই এলোমেলো বাছাই (সস্তা, বিরল error হারায়) বনাম trace শেষে বাছাই (error রাখে, কিন্তু trace id ধরে collector-এ routing লাগে)। পর্ব ৫০

মডিউল ৯ — Case study (পর্ব ৫৪–৬১)

ভ-২৯URL shortener-এ 301 না 302? (সহজ)

301 স্থায়ী — browser cache করে, পরের click আর সার্ভারে আসে না; analytics আর খারাপ link বন্ধের ক্ষমতা হারায়। তাই সাধারণত 302 বা 307.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… ৭ অক্ষরের random code-এ collision কত? — ৬২৭ ≈ ৩.৫২ লাখ কোটি, তবু ১ কোটি link-এ গড়ে প্রায় ১৪টি; তাই শর্তসাপেক্ষ লেখা। পর্ব ৫৪

ভ-৩০Video streaming-এ পুরো MP4 না পাঠিয়ে segment আর manifest কেন? (মাঝারি)

কয়েক সেকেন্ডের ছোট segment CDN-এ cache হয়, দেখা দ্রুত শুরু হয়, আর player গতি দেখে মাঝপথে মান বদলাতে পারে (adaptive bitrate).
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… transcoding সমান্তরাল কীভাবে? — keyframe-এ টুকরো, প্রতিটি টুকরো প্রতিটি মানে আলাদা কাজ — একটি DAG, প্রতিটি কাজ idempotent. পর্ব ৫৯

ভ-৩১যেকোনো case study-তে পরীক্ষক “এটি দশ গুণ বড় হলে?” জিজ্ঞেস করলে কীভাবে উত্তর দেবেন? (মাঝারি)

আগে সংখ্যাগুলো দশ গুণ করে দেখুন কোন স্তর প্রথম ভাঙে — সাধারণত database-এর লেখা বা একটি hot key; তারপর শুধু সেই স্তরে বদল (sharding, cache, async) — সব একসাথে নয়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… আর একশো গুণ? — একাধিক region, cell-ভিত্তিক ভাগ, আর কোন ডেটায় শক্ত consistency সত্যিই লাগে তা নতুন করে বাছাই। পর্ব ০৬ · পর্ব ০১

১০ · যেসব ভুলে নম্বর কাটে — আর AI-কে কড়া পরীক্ষক বানান

প্রতিটি প্রশ্নের নিচে “যেখানে নম্বর কাটে” আছে; সব অংশে ঘুরে ঘুরে আসা ভুলগুলো এক জায়গায় — জমা দেওয়ার আগের দশ মিনিটে মিলিয়ে নিন।

ভুলসঠিকপর্ব
প্রযুক্তির নামের তালিকা, সংখ্যা ছাড়াআগে হিসাব — চাপ কোথায়; তারপর অংশ, ভূমিকা আর বিকল্প০৬
NFR-এ “দ্রুত”, “scalable”মাপা যায় এমন: “p99 < ৫০০ ms”০২
bit আর byte, দিন আর সেকেন্ড গুলিয়ে ফেলা; peak ভুলে যাওয়াপ্রথা প্রথম লাইনে; একক সহ প্রতিটি ধাপ০৩
ACID-এর C আর CAP-এর C এক বলা; CAP-কে “তিনের দুই”invariant বনাম linearizability; partition হলে C না A২৪, ৪০
“Exactly-once delivery”, “R + W > N মানেই linearizable”effectively-once; quorum-এর ব্যতিক্রমগুলো বলা৩৪, ৪১
Trade-off বা ব্যর্থতার কোনো কথা নেইপ্রতিটি সিদ্ধান্তের দাম, আর কোন অংশ বিকল হলে কীসব
ছবিতে লেবেল, তীরের নম্বর বা legend নেইনাম + ভূমিকা, ক্রমিক নম্বর, sync আর async আলাদা দাগঅংশ ১

এবার AI. AI-কে উত্তরদাতা নয়, পরীক্ষক বানান: নিজে লিখে নম্বর দিতে বলুন, follow-up-এর উত্তর মুখে দিন। তবে এই বিষয়ে AI-এর সাধারণ ভুলগুলো নিচের টেবিলে — সাথে ছোট সমস্যায় অকারণ বড় নকশা।

একটি prompt, যা AI-কে কড়া পরীক্ষক বানায় আর নিজের হিসাব দেখাতে বাধ্য করে:

তুমি একজন কড়া system design পরীক্ষক। আমি নিচে একটি লিখিত প্রশ্ন আর আমার উত্তর দিচ্ছি। ১. প্রথমে প্রশ্নের জন্য একটি নম্বর-ভাগ বানাও (সংজ্ঞা, কীভাবে কাজ করে, ছবি বা টেবিল, সংখ্যা বা উদাহরণ, trade-off ও ব্যর্থতা, উপসংহার — কোন অংশে কত)। ২. আমার উত্তর সেই ভাগ ধরে নম্বর দাও; প্রতিটি কাটা নম্বরের কারণ এক লাইনে। ৩. সংখ্যা থাকলে নিজের হিসাব ধাপে ধাপে দেখাও — সূত্র, বসানো মান, একক — আর কোন অনুমান ধরেছ (দিনে কত সেকেন্ড, peak factor, bit না byte) তা স্পষ্ট লেখো। ৪. "consistency" শব্দটি এলে বলো সেটি ACID-এর অর্থে না CAP-এর অর্থে। ৫. কোনো product-এর সীমা, দাম বা সংস্করণ বললে নিশ্চিত না হলে "নিশ্চিত নই" লেখো; বানিয়ে বলবে না। ৬. আমার নকশায় অন্তত দুটি failure mode আর একটি অপ্রয়োজনীয় জটিলতা খুঁজে বের করো। ৭. শেষে আমাকে তিনটি follow-up ভাইভা প্রশ্ন করো, একটি একটি করে, আমার উত্তরের অপেক্ষা করে। প্রশ্ন: ... আমার উত্তর: ...

System design নিয়ে AI-এর উত্তরে যেসব ভুল প্রায়ই থাকে

ভুলফলকীভাবে ধরবেন
সংখ্যা ছাড়া প্রযুক্তির তালিকানকশার যুক্তি নেই, নম্বর নেই (ছ-০১)জিজ্ঞেস করুন: peak QPS কত, কোন স্তরে প্রথম চাপ?
হিসাবে × ১,০০০ বা × ৮ হারানোসার্ভার বা storage হাজার বা আট গুণ ভুলপ্রতিটি ধাপ একক সহ নিজে আবার গুনুন, বা ছোট script-এ
Quorum বা Raft-এর সহনশীলতা ভুল“৪ node ২টি সয়” (ঙ-০৫)W + R − N আর ২f + ১ নিজে বসান
ACID আর CAP-এর consistency মেশানোভুল সংজ্ঞা, ভুল তুলনা (ভ-১১)প্রতিটি “consistency”-র অর্থ লিখিয়ে নিন
Product-এর সীমা বা দাম বানানোভুল তথ্য মুখস্থofficial documentation; “লেখার সময়ে” বলে hedge
ব্যর্থতার কথা নেইtrade-off-এর নম্বর হারানোপ্রতিটি বাক্সে জিজ্ঞেস করুন: এটি মরলে কী হয়?

AI-এর উত্তর মেনে নেওয়ার আগে — চেকলিস্ট

নিজেকে যাচাই করুন

প্রথমে একটি ক্রম সাজানোর প্রশ্ন, তারপর লিখিত আর ভাইভার মূল তথ্য নিয়ে বারোটি MCQ. ভুল হলে কারণসহ ব্যাখ্যা পাবেন।

ক্রমএকটি ১০ নম্বরের “নকশা করুন” উত্তরের অংশগুলো ঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. পরিধি আর অনুমান লেখা
  2. ছোট হিসাব — peak QPS, storage
  3. API আর data model
  4. লেবেলসহ architecture diagram
  5. দুটি অংশে deep dive
  6. ব্যর্থতা, trade-off আর উপসংহার

(সহজ) একটি সেবার availability ৯৯.৯৯%. ৩৬৫ দিনের এক বছরে সর্বোচ্চ downtime প্রায় কত?

  • প্রায় ৫২.৬ মিনিট
  • প্রায় ৮ ঘণ্টা ৪৫ মিনিট
  • প্রায় ৫.২৬ মিনিট
  • প্রায় ৪.৩২ মিনিট

(মাঝারি) একটি অনুরোধ ৫০টি backend-এর সবার উত্তরের অপেক্ষা করে; প্রতিটি backend স্বাধীনভাবে ১% সময় ধীর। প্রায় কত শতাংশ অনুরোধ অন্তত একটি ধীর উত্তরে আটকায়?

  • ৫০%
  • প্রায় ৩৯.৫%
  • ১%
  • প্রায় ৬৩.৪%

(সহজ) একটি সেবায় সেকেন্ডে ২,০০০ অনুরোধ আসে, প্রতিটির গড় সময় ১৫০ ms. গড়ে কতগুলো অনুরোধ একসাথে চলছে?

  • ৩,০০,০০০
  • প্রায় ১৩.৩
  • ৩০০
  • ২,১৫০

(সহজ) ১ কোটি key hash(key) mod N দিয়ে ৪টি সার্ভারে ভাগ করা। ৫ম সার্ভার যোগ করলে মোটামুটি কতগুলো key-এর সার্ভার বদলায়?

  • প্রায় ২০ লাখ
  • প্রায় ২৫ লাখ
  • একটিও নয়
  • প্রায় ৮০ লাখ

(মাঝারি) একটি leaderless store-এ N = ৫, W = ৩, R = ৩. লেখা আর পড়া প্রত্যেকে সর্বোচ্চ কয়টি বিকল replica সহ্য করে, আর লেখা ও পড়ার দলের ন্যূনতম overlap কত?

  • ২ আর ২, overlap ১
  • ৩ আর ৩, overlap ১
  • ২ আর ২, overlap ০
  • ১ আর ১, overlap ১

(মাঝারি) ৫টি সার্ভারের একটি Raft cluster network partition-এ ৩ আর ২-এ ভাগ হলো; পুরোনো leader ২-এর দিকে। কী ঘটে?

  • দুই দিকই লেখা commit করে, পরে মিলিয়ে নেয়
  • ৩-এর দিকে নতুন leader বাছাই হয়ে কাজ চলে; ২-এর দিকে কিছুই commit হয় না
  • জোড়া লাগা পর্যন্ত পুরো cluster থেমে থাকে
  • ২-এর দিকের পুরোনো leader-ই চালিয়ে যায়, কারণ তার log সবচেয়ে নতুন

(মাঝারি) ১ কোটি key-এর জন্য ১% false-positive হারের Bloom filter-এ সেরা নকশায় মোটামুটি কত memory আর কয়টি hash লাগে?

  • প্রায় ৯৬ MB, ৭টি hash
  • প্রায় ১২ MB, ১টি hash
  • প্রায় ১২ MB, ৭টি hash
  • প্রায় ১৮ MB, ১০টি hash

(সহজ) ৩০ দিনের জানালায় ৯৯.৯৫% availability SLO-তে error budget কত মিনিট?

  • ৪৩.২ মিনিট
  • ৪.৩২ মিনিট
  • ২৬২.৮ মিনিট
  • ২১.৬ মিনিট

(মাঝারি) একটি token bucket-এ refill r = সেকেন্ডে ১০টি token, ধারণক্ষমতা b = ৫০, শুরুতে বালতি ভরা। যেকোনো ১০ সেকেন্ডে সর্বোচ্চ কতটি অনুরোধ ছাড়া পায়?

  • ১৫০
  • ১০০
  • ৫০
  • ৫০০

(মাঝারি) Snapshot isolation (যেমন PostgreSQL-এর REPEATABLE READ) কোন anomaly ঠেকায় না?

  • Dirty read
  • Write skew
  • Read skew
  • Lost update

(সহজ) একটি consumer প্রতিটি বার্তা প্রক্রিয়া করার আগেই offset commit করে। Crash হলে কোন নিশ্চয়তা মেলে?

  • Exactly-once
  • At-least-once
  • At-most-once
  • কোনো বার্তা হারায় না, শুধু ক্রম বদলায়

(মাঝারি) “একটি URL shortener নকশা করুন” — ১০ নম্বরের লিখিত উত্তরে কোনটি পূর্ণ নম্বরের সবচেয়ে কাছে?

  • Kafka, Redis আর microservices-এর একটি বড় ছবি, কোনো সংখ্যা ছাড়া
  • MD5-এর প্রথম ৭ অক্ষর, 301 redirect, প্রতিটি click-এ database-এ counter
  • নিখুঁত হিসাব আর API, কিন্তু ছবি বা ব্যর্থতার কোনো কথা নেই
  • হিসাব (peak প্রায় ৩৫ হাজার পড়া), API, লেবেলসহ ছবি, collision-সহ code, 302-এর কারণ আর async analytics

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:

মনে রাখুন

  1. কাঠামোয় নম্বর: সংজ্ঞা → কীভাবে কাজ করে → ছবি বা টেবিল → সংখ্যা বা উদাহরণ → trade-off ও ব্যর্থতা → উপসংহার; ২ নম্বরে দুই–তিন বাক্য, ৫ নম্বরে একটি ছবি বা টেবিল, ১০ নম্বরে দুটি আর একটি হিসাব।
  2. ছবিতে প্রথা: ওপর থেকে নিচে অনুরোধের পথ, database সিলিন্ডার, বাক্সে নাম আর ভূমিকা, তীরে ক্রমিক নম্বর, sync কঠিন আর async ড্যাশ দাগ, নিচে legend.
  3. সংখ্যায় অনুমান আর একক: ১ দিন = ৮৬,৪০০ সেকেন্ড, bit না byte, গড় না peak — প্রশ্নে বা উত্তরের প্রথম লাইনে লিখে দিন; সূত্র → মান → একক → মানে।
  4. Trade-off ছাড়া পূর্ণ নম্বর নেই: প্রতিটি সিদ্ধান্তের দাম, কখন বেছে নেবেন না, আর কোনো অংশ বিকল হলে কী — আর ACID-এর C বনাম CAP-এর C-র মতো সংজ্ঞার পার্থক্য স্পষ্ট।
  5. ভাইভায়: তিন বাক্য — কী, কেন বা কীভাবে, দাম; সংখ্যায় কথা, trade-off নিজে থেকে, আর না জানলে সৎ থেকে যাচাইয়ের পথ বলা।

পরের পর্বে (পর্ব ৬৫): লিখিত আর ভাইভা হলো। এবার ইন্টারভিউর ধাঁচ — ধারণাভিত্তিক প্রশ্ন, যেখানে একটি উত্তরের পরে follow-up আসতেই থাকে, আর মূল্য পায় trade-off-এর যুক্তি।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান