مشروع: خطة التعافي من الكوارث
مشروع: خطة التعافي من الكوارث
كل ما تناولناه في هذا الدرس التعليمي — اشتقاق RTO وRPO، ومعمارية النسخ الاحتياطي، والنسخ المتماثل عبر المناطق، وآليات تجاوز الفشل، والتعافي المدفوع بـ GitOps، واختبار يوم الألعاب، ونمذجة التكاليف — يتجمع هنا. يقودك هذا الدرس خلال كتابة خطة تعافٍ كاملة وبمستوى الإنتاج لنظام عملي واقعي. ستُنتج الأداتين اللتين تهمان فعلًا أثناء الحوادث الحقيقية: وثيقة استراتيجية التعافي ("ماذا ولماذا") وكتيب التشغيل ("كيف، بالضبط، الآن"). كل ما عدا ذلك تعليق.
النظام النموذجي
النظام المستهدف هو OrderFlow، منصة SaaS متعددة المستأجرين لإدارة الطلبات. مواصفاته:
- 150,000 شركة نشطة يوميًا، ذروة 80,000 طلب/ثانية عند الدفع.
- PostgreSQL 16 أساسي (
db-primary.us-east-1) مع نسختين للقراءة؛ Aurora Global Database كنسخة احتياطية عبر المناطق فيus-west-2. - Apache Kafka (MSK) لبث الأحداث — أحداث الطلبات، وتحديثات المخزون، وإشارات الدفع.
- مجموعة Redis 7 لحالة الجلسة وعدادات تحديد المعدل.
- Kubernetes 1.30 (EKS) في
us-east-1الأساسية، ومجموعة احتياطية دافئة فيus-west-2(مُعدَّة بسعة 30%؛ تُوسَّع للسعة الكاملة خلال ~8 دقائق عبر Karpenter). - بنية تحتية تُدار بـ Terraform؛ جميع بيانات K8s في مستودع GitOps (ArgoCD).
- تأثير الإيرادات: 120,000 دولار لكل دقيقة توقف عند الدفع. 2,400 دولار/دقيقة عند تراجع الأداء في غير الدفع.
الجزء الأول — وثيقة استراتيجية التعافي
القسم 1: الأهداف وتصنيف الطبقات. كل خدمة في OrderFlow مُصنَّفة بطبقة، موقَّعة من نائب رئيس الهندسة والمدير المالي:
- الطبقة 0 — الدفع والمدفوعات: RTO < 60 ثانية، RPO = 0 (كتابة أمامية متزامنة عبر Aurora Global DB). نشط-سلبي مع ترقية تلقائية.
- الطبقة 1 — واجهة برمجة قراءة الطلبات، المصادقة، المخزون: RTO < 5 دقائق، RPO < 30 ثانية. Pilot-light مع نسخ غير متزامن؛ يُرقَّى عند تنبيه PagerDuty.
- الطبقة 2 — التقارير، استيعاب التحليلات، Webhooks: RTO < 30 دقيقة، RPO < 5 دقائق. Warm standby؛ Kafka MirrorMaker 2 يجسر كلتا المنطقتين.
- الطبقة 3 — الأدوات الداخلية، دفاتر علوم البيانات: RTO < 4 ساعات، RPO < ساعة. استعادة من نسخة S3 احتياطية عبر المناطق.
القسم 2: نظرة عامة على المعمارية. يعرض الرسم البياني أدناه طوبولوجيا المنطقتين مع مسارات تدفق البيانات وحدود الترقية.
القسم 3: سيناريوهات الفشل والنطاق المُعلَن. تغطي خطة التعافي أربع فئات كوارث مُعلَنة:
- فشل منطقة التوفر — يُعالَج بتعدد مناطق التوفر داخل
us-east-1؛ لا يُطلق تجاوز فشل المنطقة. RTO: <2 دقيقة. - فشل المنطقة الكاملة —
us-east-1غير قابلة للوصول أو تنتهك SLO. يُطلق تجاوز الفشل الكامل إلىus-west-2. هذا ما يغطيه كتيب التشغيل. - تلف البيانات — تلف منطقي من نشر خاطئ أو خطأ في التطبيق. تجاوز فشل المنطقة لا يُفيد؛ الاستجابة هي الاستعادة في نقطة زمنية من نسخ Aurora الاحتياطية أو S3 المُؤرشَف بـ WAL.
- هجوم فدية / حادث أمني — عزل؛ لا تتجاوز الفشل إلى نسخة مُصابة محتملة. استعادة من نسخة S3 احتياطية غير قابلة للتغيير مع Object Lock.
الجزء الثاني — كتيب التشغيل: تجاوز فشل المنطقة الكاملة
كتيب التشغيل إجراء مُرقَّم وعلى مستوى الأوامر يُنفَّذ من قِبَل مهندس مناوب في الساعة الثالثة صباحًا تحت الضغط. كل خطوة يجب أن تكون لا لبس فيها، ومكتفية بذاتها، ومرتبطة بإجراء التراجع. فيما يلي كتيب تشغيل تجاوز فشل منطقة OrderFlow في هيكله التنفيذي الأساسي.
الشروط المسبقة (تحقق قبل إعلان التعافي):
- تم إنشاء حادث PagerDuty والإقرار به؛ تم تعيين قائد الحادث.
- تأكيد:
us-east-1غير قابلة للوصول أو تنتهك SLO لأكثر من 3 دقائق متتالية وفقًا لـ Alertmanager. - تأكيد: الفشل ليس تلفًا في البيانات (تحقق من سجلات أخطاء Aurora قبل المتابعة).
- إبلاغ الراعي التنفيذي في
#incidents-exec.
إجراءات ما بعد التجاوز لا تقل أهمية عن التجاوز نفسه. بعد تأكيد الخطوات أعلاه:
- إعلان اكتمال تجاوز الفشل في PagerDuty وSlack؛ تحديث صفحة الحالة.
- إعادة ضبط إزاحات مجموعات المستهلكين في Kafka للخدمات التي لم تتمكن من الإفراغ بنظافة — تحقق من ضمانات معالجة ازدواجية (مفاتيح الاتساق) قبل استئناف المستهلكين.
- تسخين مجموعة Redis: تُعاد عدادات تحديد المعدل إلى الصفر (مقبول)، لكن يجب إعادة ملء مفاتيح الجلسة. تحقق من أن خدمة المصادقة تتحمل فقدان الجلسة بسلاسة (إعادة تسجيل الدخول القسرية).
- مراقبة إنتاجية الكتابة في مجموعة Aurora الاحتياطية وتأخر النسخ المتماثل لنسخها الجديدة للقراءة خلال أول 30 دقيقة.
- جدولة نافذة الفشل العكسي — عادةً خارج ساعات الذروة، بعد 48 ساعة على الأقل من تأكيد استقرار استعادة المنطقة الأساسية.
الجزء الثالث — قياس الجاهزية باستمرار
خطة التعافي التي تُتحقق منها في عمليات تدقيق سنوية فقط هي وثيقة مسؤولية، وليست أداة تشغيلية. اربط هذه التنبيهات الثلاثة بـ Alertmanager الموجود لديك. تجعل هذه التنبيهات الوضع الراهن للتعافي مرئيًا كل ساعة من كل يوم دون الحاجة لفحص بشري:
التنبيه الثالث — قِدَم كتيب التشغيل — يستحق اهتمامًا خاصًا. اربطه بمقياس تُحدّثه في Prometheus (عبر push gateway أو مُصدِّر اصطناعي) في كل مرة تُكمل فيها يوم ألعاب أو تمرين تعافٍ. إذا تجاوز المقياس 90 يومًا دون تحديث، يُطلق التنبيه ويُجبر على إعادة التحقق. هذا يمنع الانجراف الصامت حيث يصف كتيب التشغيل نظامًا لم يعد موجودًا.
قائمة التحقق من خطة التعافي المكتملة
قبل أن تُعلن خطة التعافي "منجزة"، تأكد من احتوائها على جميع ما يلي. هذه هي القائمة التي يستخدمها المهندس الرئيسي في شركة التقنية الكبرى خلال مراجعة التصميم:
- RTO وRPO لكل طبقة، موقَّعان من أصحاب مصلحة الأعمال.
- مخطط معماري يُظهر مسارات النسخ المتماثل، وتجاوز فشل DNS، وحدود الترقية.
- نطاق صريح: أي سيناريوهات الفشل مُغطاة، وأيها خارج النطاق ولماذا.
- كتيب تشغيل مُرقَّم بأوامر حقيقية، ومخرجات متوقعة، وإجراءات تراجع لكل خطوة.
- مسار استعادة من تلف البيانات (إجراء PITR) منفصل عن كتيب تجاوز الفشل الإقليمي.
- تنبيهات مراقبة مستمرة مرتبطة بعتبات RTO/RPO.
- جدول يوم الألعاب (ربع سنوي كحد أدنى للطبقة 0)، مع تخزين النتائج ومقارنتها عبر الزمن.
- قوالب اتصال مُحضَّرة مسبقًا (صفحة الحالة، Slack التنفيذي، البريد الإلكتروني للعملاء).
- نموذج التكلفة: كم تكلف هذه المعمارية في الحالة المستقرة مقابل خلال DR المُعلَن؟
- المالك ودورية المراجعة: من يُحدِّث هذه الوثيقة، ومتى تنتهي صلاحيتها؟
خطة التعافي عقد حيّ بين فريق هندستك والأعمال. المعمارية وكتيب التشغيل ونتائج الاختبارات معًا تُشكّل الدليل على الوفاء بالعقد. اكتبها، واختبرها، وأتمتها، وحافظ على تحديثها — بهذا الترتيب.