CAP Theorem
তিনটির মধ্যে দুটি - distributed system-এর fundamental constraint।
আপনার দুটি ব্যাংক branch - Dhaka ও Chittagong। প্রতি মুহূর্তে দুজনে account balance sync রাখতে চান। হঠাৎ Dhaka-Chittagong-এর internet line কেটে গেল। দুটো option:
- (1) Consistency বজায় রাখুন - যতক্ষণ sync নেই, কাজ বন্ধ। সবাই অপেক্ষা করুক।
- (2) Availability বজায় রাখুন - দুই branch আলাদা চলুক। পরে sync করব।
এটাই CAP Theorem-এর core trade-off।
CAP Theorem কী?
CAP Theorem (Brewer's theorem, ২০০০) - distributed system-এ একসাথে তিনটির মধ্যে শুধু দুটি সম্পূর্ণভাবে guarantee করা যায়:
- Consistency (C): সব node সবসময় একই data return করবে।
- Availability (A): প্রতিটি request response পাবে (success বা failure)।
- Partition Tolerance (P): Network failure হলেও system চলবে।
কেন তিনটি একসাথে impossible?
Distributed system-এ network partition হবেই (cable cut, router fail, latency spike)। অর্থাৎ P non-negotiable। তাহলে আসল choice - partition-এর সময় C না A?
Partition-এর সময়
- Node A ও Node B-এর মধ্যে network broken।
- Client A-কে কিছু লিখলো।
- Client B-কে read করল।
- Choice 1 (CP): B response দেবে না - sync নেই, তাই wait/error।
- Choice 2 (AP): B পুরাতন data return করবে - কিন্তু respond তো করবে।
CP Systems - Consistency + Partition Tolerance
Partition-এ Consistency চান, Availability ছেড়ে দিন।
উদাহরণ
- Traditional RDBMS: PostgreSQL, MySQL (synchronous replication)।
- MongoDB: Default config-এ majority write - partition-এ minority side write reject।
- HBase: Strong consistency।
- Zookeeper: Coordination service - must be consistent।
Use case
- Banking ও finance।
- E-commerce inventory।
- Booking system।
- Where stale data = harm।
AP Systems - Availability + Partition Tolerance
Partition-এ Availability চান, Consistency relax করুন।
উদাহরণ
- Cassandra: Eventually consistent (tunable)।
- DynamoDB: Default eventual consistency।
- CouchDB।
- Riak।
- DNS: Probably internet-এর সবচেয়ে বড় AP system।
Use case
- Social media feed।
- Real-time chat।
- Like/View count।
- Where availability > perfect accuracy।
CA Systems - কেন আসলে নেই?
Theory-তে CA (Consistency + Availability, no Partition) আছে - কিন্তু বাস্তবে network partition অনিবার্য। তাই pure CA system মাত্র single-node DB। Distributed হলে P আবশ্যক - তাই pick CP বা AP।
বাস্তবে - Tunable Consistency
Modern সিস্টেম strict CP/AP-এ আবদ্ধ নয়। Per-operation choose করা যায়:
Cassandra Consistency Levels
- ONE: এক replica responded → AP-leaning।
- QUORUM: Majority responded → balanced।
- ALL: সব replica → CP-like।
DynamoDB
- Eventually consistent read: Default, fast।
- Strongly consistent read: Latency বেশি।
Triangle Visualization
Real distributed system-এ আপনি বাম পাশ (CP) বা ডান পাশ (AP) - top corner (CA) reachable না।
বাস্তব উদাহরণ
- Banking transfer: CP - partition-এ better wait than wrong।
- Facebook newsfeed: AP - slight delay OK, must show something।
- Amazon shopping cart: AP - শেষে reconcile।
- Stock trading: CP - wrong price = loss।
- Booking.com: Mostly CP - double booking nay।
CAP-এর সীমাবদ্ধতা - PACELC
CAP শুধু partition-এর কথা বলে। Normal-time-এ কী? PACELC সম্পূর্ণ চিত্র দেয় - পরের chapter-এ বিস্তারিত।
সাধারণ ভুল ধারণা
- "তিনটিই একসাথে পাওয়া যায়": না - Brewer-এর প্রমাণিত theorem।
- "CAP system permanently choose": Modern DB tunable - query-level choose করা যায়।
- "P optional": না - distributed system-এ network partition অনিবার্য।
- "CP > AP": ভুল - use case dependent।
Best Practices
- Use case define - তারপর CP/AP choose।
- Tunable consistency embrace - per-operation choose।
- Application-এ inconsistency handle - UI level-এ "syncing" indicator।
- Conflict resolution strategy - CRDT, last-write-wins, vector clock।
- CAP মুখস্থ করার চেয়ে partition-এ behavior বুঝুন।
📌 চ্যাপ্টার সারমর্ম
- CAP = Consistency, Availability, Partition Tolerance - ৩-এর মধ্যে ২।
- P avoid possible না - তাই pick CP বা AP।
- CP: RDBMS, MongoDB; AP: Cassandra, DynamoDB।
- Pure CA pretty single-node-এ মাত্র।
- Modern DB tunable consistency দেয়।