أنماط الهندسة المعمارية وتصميم الأنظمة
أساسيات الأنظمة الموزعة
يجب على مهندسي السحابة فهم نظرية الأنظمة الموزعة لتصميم هندسات مرنة وقابلة للتوسع. تظهر هذه المفاهيم بشكل متكرر في مقابلات تصميم الأنظمة.
نظرية CAP
أساس اتخاذ القرار في الأنظمة الموزعة.
التعريف
يمكن للنظام الموزع ضمان اثنين فقط من ثلاث خصائص:
- الاتساق (Consistency): جميع العقد ترى نفس البيانات في نفس الوقت
- التوافر (Availability): كل طلب يتلقى استجابة (نجاح أو فشل)
- تحمل التقسيم (Partition Tolerance): النظام يستمر في العمل رغم تقسيمات الشبكة
CAP في الممارسة
| قاعدة البيانات | اختيار CAP | المقايضة |
|---|---|---|
| RDBMS التقليدية | CA | لا تتعامل مع التقسيمات جيداً |
| MongoDB | CP | قد ترفض الكتابات أثناء التقسيم |
| Cassandra | AP | قد تعيد بيانات قديمة |
| DynamoDB | قابل للتكوين | اختر لكل عملية |
| Spanner | CP (مع A عالي) | شبكة Google العالمية تقلل التقسيمات |
سؤال المقابلة: CAP في الأنظمة الحقيقية
س: "كيف يتعامل AWS DynamoDB مع مقايضات نظرية CAP؟"
ج: DynamoDB يقدم اتساقاً قابلاً للتكوين:
- القراءات المتسقة في النهاية (افتراضي): سلوك AP، توافر أعلى، تأخير أقل
- القراءات المتسقة بقوة: سلوك CP، أحدث البيانات مضمونة، تأخير أعلى
- المعاملات: اتساق قوي مع ضمانات ACID، أعلى تأخير
تأثير التصميم: استخدم القراءات المتسقة في النهاية للعمليات المكثفة للقراءة الموجهة للمستخدم، الاتساق القوي للعمليات الحرجة (المدفوعات، المخزون).
نظرية PACELC
امتداد لـ CAP لسيناريوهات التشغيل العادي.
التعريف
إذا كان هناك تقسيم (P)، اختر التوافر (A) أو الاتساق (C). وإلا (E) (التشغيل العادي)، اختر التأخير (L) أو الاتساق (C).
تصنيف PACELC
| النظام | التقسيم (A/C) | وإلا (L/C) | السلوك |
|---|---|---|---|
| DynamoDB | A | L | سريع، اتساق نهائي |
| Cassandra | A | L | اتساق قابل للضبط |
| MongoDB | C | C | اتساق قوي |
| Spanner | C | C | اتساق قوي، عالمي |
| CockroachDB | C | L | قابل للتسلسل، تأخير منخفض |
نماذج الاتساق
الاتساق النهائي
- التحديثات تنتشر بشكل غير متزامن
- القراءات قد تعيد بيانات قديمة مؤقتاً
- النظام يتقارب إلى حالة متسقة
حالات الاستخدام: موجزات وسائل التواصل الاجتماعي، كتالوجات المنتجات، بيانات الجلسة
الاتساق القوي
- القراءات تعيد دائماً آخر كتابة
- تأخير أعلى، إنتاجية أقل
- مطلوب للمعاملات المالية
حالات الاستخدام: البنوك، إدارة المخزون، مصادقة المستخدم
الاتساق السببي
- العمليات المرتبطة تحافظ على الترتيب
- العمليات المستقلة قد تكون خارج الترتيب
- توازن بين النهائي والقوي
حالات الاستخدام: التحرير التعاوني، أنظمة المراسلة
الإجماع الموزع
خوارزمية Raft
تُستخدم بواسطة: etcd، Consul، CockroachDB
كيف يعمل Raft:
- انتخاب القائد: عقدة واحدة تصبح قائداً
- نسخ السجل: القائد ينسخ الإدخالات للتابعين
- الأمان: فقط القائد بالسجل الكامل يمكن انتخابه
خوارزمية Paxos
تُستخدم بواسطة: Google Spanner، Chubby
أكثر تعقيداً من Raft، لكنها مثبتة رياضياً آمنة.
سؤال المقابلة: انتخاب القائد
س: "كيف تنفذ انتخاب القائد لمجدول مهام موزع؟"
ج: الخيارات حسب التعقيد:
| النهج | التعقيد | حالة الاستخدام |
|---|---|---|
| سحابي أصلي (أقفال DynamoDB) | منخفض | AWS فقط، بسيط |
| etcd/Consul | متوسط | أصلي لـ Kubernetes |
| Zookeeper | عالي | قديم، Kafka |
| Raft مخصص | عالي جداً | البحث/الاحتياجات المخصصة |
الموصى به: استخدم الخدمات المُدارة (DynamoDB، Consul) ما لم يكن لديك متطلبات محددة.
أنماط نسخ البيانات
النسخ المتزامن
العميل → الأساسي → النسخة1 → النسخة2 → ACK → العميل
- اتساق قوي
- تأخير أعلى
- توافر أقل أثناء الفشل
النسخ غير المتزامن
العميل → الأساسي → ACK → العميل
↓ (async)
النسخة1، النسخة2
- تأخير أقل
- اتساق نهائي
- فقدان بيانات محتمل عند فشل الأساسي
النسخ شبه المتزامن
العميل → الأساسي → النسخة1 → ACK → العميل
↓ (async)
النسخة2
- توازن بين الاتساق والتوافر
- نسخة واحدة على الأقل لديها أحدث البيانات
- شائع في قواعد البيانات الإنتاجية
استراتيجيات التجزئة
التجزئة القائمة على النطاق
المستخدمون A-M → الجزء 1
المستخدمون N-Z → الجزء 2
- جيدة لاستعلامات النطاق
- خطر النقاط الساخنة (الأحرف الشائعة)
التجزئة القائمة على التجزئة
hash(user_id) % num_shards → الجزء
- توزيع متساوٍ
- استعلامات النطاق تتطلب scatter-gather
التجزئة المتسقة
حلقة التجزئة مع العقد الافتراضية
- إعادة توزيع ضئيلة عند التوسع
- تُستخدم بواسطة DynamoDB، Cassandra
سؤال المقابلة: استراتيجية التجزئة
س: "صمم استراتيجية تجزئة لمنشورات منصة وسائل التواصل الاجتماعي."
ج: اعتبر أنماط الوصول:
- الوصول الأساسي: الحصول على منشورات المستخدم (جدول المستخدم الزمني)
- الثانوي: الحصول على المنشورات حسب الوقت (الموجز العالمي)
الاستراتيجية: مفتاح جزء مركب (user_id, created_at)
- منشورات المستخدم متجاورة
- الاستعلامات الزمنية لا تزال فعالة ضمن المستخدم
- أضف فهرساً ثانوياً للاستعلامات الزمنية العالمية
الرؤية الرئيسية: تصميم الأنظمة الموزعة يتعلق بالمقايضات. وضح دائماً ما تحسّنه وما تضحي به.
بعد ذلك، سنستكشف أنماط هندسة الخدمات الصغيرة. :::