الأساسيات · فصل ٦

تصميم Key-Value Store

CAP · quorum · gossip · SSTable · Merkle tree
🎯 الهدف: تفهم إزاي مخزن مفتاح-وقيمة بسيط بيبقى سيستم موزّع يكمّل حتى لو الشبكة اتقطعت.

الفكرة

داتابيز بسيطة جدًا: put(key, value) و get(key). سهلة على سيرفر واحد (hash table في الميموري). لما الداتا تكبر لازم نوزّعها — وهنا تبدأ الحكاية.

نظرية CAP

في أي سيستم موزع، مش هتقدر تضمن التلاتة مع بعض:

C — ConsistencyA — AvailabilityP — Partition tolerance
  • C: الكل يشوف نفس الداتا.
  • A: دايمًا فيه رد.
  • P: يكمل لو الشبكة اتقطعت.

ولأن انقطاع الشبكة لازم هيحصل، الاختيار الحقيقي بيبقى بين الاتنين دول:

CP

زي نظام بنكي: أرفض أرد أحسن ما أدي رقم غلط. الاتساق أهم من إنك ترد فورًا وقت انقطاع الشبكة.

AP

أرد بداتا ممكن تكون قديمة شوية. زي كتالوج منتجات: الأحسن تشوف سعر متأخر دقيقة من إن الصفحة تقع.

المكونات الأساسية

الموضوعالحل بالمصري
PartitioningConsistent hashing + virtual nodes من الفصل اللي فات
Replicationكل key يتنسخ على N سيرفرات (أول N سيرفرات مختلفة مع عقارب الساعة)، ويفضّل في داتا سنترز مختلفة
QuorumW = كام نسخة لازم تأكد الكتابة، R = كام نسخة لازم ترد في القراية. لو W + R > N يبقى strong consistency. W=1 أو R=1 أسرع
ConsistencyStrong، Weak، و Eventual (الأشهر في Dynamo و Cassandra: النسخ بتتفق في الآخر)
Vector clocksأزواج [server, version] مع كل قيمة عشان تعرف فيه conflict ولا لأ. عيبها إنها بتكبر
Gossipكل نود بيبعت heartbeat لنودز عشوائية. لو نود ماحدش سمع منه فترة، يعتبروه واقع
Hinted handoffفشل مؤقت؟ نود تاني يشيل الكتابة مكانه، ولما يرجع يسلّمهاله
Merkle treeفشل دايم؟ تقارن النسخ بشجرة hashes عشان تزامن الجزء المختلف بس

طريق الكتابة والقراية

زي Cassandra: الكتابة بتمشي على الديسك بشكل مرتب عشان متفضلش تعمل disk seeks.

Checklist الـ Key-Value

🧠 اختبر نفسك
١) ليه مش بنختار بين C و A و P كلهم، وبنختار بين CP و AP؟
لأن انقطاع الشبكة هيحصل، فـ P مش اختيار. الباقي إنك تفضّل الاتساق ولا الرد.
٢) N=3 و W=2 و R=2. فيه strong consistency؟
أيوه، لأن 2 + 2 > 3. القراية هتلاقي نسخة من الكتابة الأخيرة على الأقل.
٣) نود وقعت دقيقتين ورجعت. أنهي آلية بتسلّمها الكتابات اللي فاتتها؟
Hinted handoff: نود تانية خزنالها الكتابات وسلّمتها لما رجعت.
٤) الـ Bloom filter قال المفتاح مش موجود. تقدر تثق؟
أيوه. الغلط بتاعه في الاتجاه التاني بس: يقول موجود وهو مش موجود.