الفكرة
داتابيز بسيطة جدًا: put(key, value) و get(key). سهلة على سيرفر واحد (hash table في الميموري). لما الداتا تكبر لازم نوزّعها — وهنا تبدأ الحكاية.
نظرية CAP
في أي سيستم موزع، مش هتقدر تضمن التلاتة مع بعض:
C — ConsistencyA — AvailabilityP — Partition tolerance
- C: الكل يشوف نفس الداتا.
- A: دايمًا فيه رد.
- P: يكمل لو الشبكة اتقطعت.
ولأن انقطاع الشبكة لازم هيحصل، الاختيار الحقيقي بيبقى بين الاتنين دول:
CP
زي نظام بنكي: أرفض أرد أحسن ما أدي رقم غلط. الاتساق أهم من إنك ترد فورًا وقت انقطاع الشبكة.
AP
أرد بداتا ممكن تكون قديمة شوية. زي كتالوج منتجات: الأحسن تشوف سعر متأخر دقيقة من إن الصفحة تقع.
المكونات الأساسية
| الموضوع | الحل بالمصري |
|---|---|
| Partitioning | Consistent hashing + virtual nodes من الفصل اللي فات |
| Replication | كل key يتنسخ على N سيرفرات (أول N سيرفرات مختلفة مع عقارب الساعة)، ويفضّل في داتا سنترز مختلفة |
| Quorum | W = كام نسخة لازم تأكد الكتابة، R = كام نسخة لازم ترد في القراية. لو W + R > N يبقى strong consistency. W=1 أو R=1 أسرع |
| Consistency | Strong، Weak، و Eventual (الأشهر في Dynamo و Cassandra: النسخ بتتفق في الآخر) |
| Vector clocks | أزواج [server, version] مع كل قيمة عشان تعرف فيه conflict ولا لأ. عيبها إنها بتكبر |
| Gossip | كل نود بيبعت heartbeat لنودز عشوائية. لو نود ماحدش سمع منه فترة، يعتبروه واقع |
| Hinted handoff | فشل مؤقت؟ نود تاني يشيل الكتابة مكانه، ولما يرجع يسلّمهاله |
| Merkle tree | فشل دايم؟ تقارن النسخ بشجرة hashes عشان تزامن الجزء المختلف بس |
طريق الكتابة والقراية
زي Cassandra: الكتابة بتمشي على الديسك بشكل مرتب عشان متفضلش تعمل disk seeks.
Write
Commit Log
Memtable
SSTableلما تتملى
Read
Memtable؟
Bloom Filter
SSTable الصح
Checklist الـ Key-Value
🧠 اختبر نفسك
١) ليه مش بنختار بين C و A و P كلهم، وبنختار بين CP و AP؟
لأن انقطاع الشبكة هيحصل، فـ P مش اختيار. الباقي إنك تفضّل الاتساق ولا الرد.
٢) N=3 و W=2 و R=2. فيه strong consistency؟
أيوه، لأن
2 + 2 > 3. القراية هتلاقي نسخة من الكتابة الأخيرة على الأقل.٣) نود وقعت دقيقتين ورجعت. أنهي آلية بتسلّمها الكتابات اللي فاتتها؟
Hinted handoff: نود تانية خزنالها الكتابات وسلّمتها لما رجعت.
٤) الـ Bloom filter قال المفتاح مش موجود. تقدر تثق؟
أيوه. الغلط بتاعه في الاتجاه التاني بس: يقول موجود وهو مش موجود.