اختبار الثبات
1) المفاهيم والأهداف الأساسية
الموثوقية - احتمال الأداء ؛ المرونة - السلوك أثناء وبعد الفشل.
المكتب الإقليمي لأفريقيا/الميزانية الخاطئة: معايير «مقبولية» التدهور.
فرضية الحالة الثابتة: التوقع الرسمي للمقاييس المستقرة (على سبيل المثال p95 <200 mm، معدل الخطأ <0. 5%). تعتبر التجربة ناجحة إذا استمرت الفرضية.
أنواع الفشل: الشبكة (زمن الوصول، الخسارة/التكرار، الفواصل)، الحاسوبية (وحدة المعالجة المركزية، الذاكرة)، التخزين (التشغيل/التشغيل، استنفاد القرص)، التبعيات (5xx، المهلة، حد المعدل)، المنطقية (الحوادث الجزئية، «التدهور البطيء»)، التشغيل (الإطلاق، التهيئة)، «الظلام» (انقسام الدماغ، نوبات الساعة).
2) هرم الاستدامة
1. اختبارات الوحدة لفشل المنطق (retrays, idempotency, timeouts).
2. محولات المكونات بحقن الصدع (Testcontainers/tc-netem).
3. التكامل/النظام مع الشبكة/قاعدة البيانات/المخابئ والموجزات الواقعية.
4. تجارب الفوضى في الدفع المسبق (ثم محدودة في الدفع) على كتب التشغيل.
5. يوم اللعبة - تمارين سيناريو الفريق (الأشخاص + الأدوات).
3) إمكانية الرصد كأساس
SLI: p50/p95/p99 زمن الوصول، معدل الخطأ، التشبع (وحدة المعالجة المركزية/كومة/FD/IOPS)، الإسقاط/المهلة، عمق قائمة الانتظار.
الآثار: للعثور على الاختناقات تحت الفشل.
مقاييس المرونة الدلالية: معدل النجاح المتدهور الرشيق، معدل الطلب المتساقط، معدل الشفاء الذاتي (MTTR).
تجارب التصنيف: الفوضى. experiment_id'، «المرحلة = حقن/استرداد» في الأحداث/جذوع الأشجار.
4) فهرس حقن الأعطال
الشبكة: تأخير/نفث، فقدان/تكرار/إعادة ترتيب، تحديد عرض النطاق الترددي، انفجار العواصف، فواصل TLS.
المضيف: حد وحدة المعالجة المركزية، تسريبات/حدود الذاكرة، توقف GC مؤقتًا، استنفاد الوصف، «انحراف الساعة».
التخزين: زيادة زمن الوصول، EROFS، ENOSPC، تحلل النسخ المقلدة، فقدان القائد.
التبعيات: 5xx/429، التباطؤ، رفرفة DNS، الشهادات القديمة، حد السعر، «الردود الجزئية».
البيانات: اكتب الفساد، «الثقوب» في التدفقات، تكرار الأحداث، تعارض الإصدارات.
العمليات: الإفراج غير الناجح، العلم المميز، الانجراف، الخطأ اليدوي (كجزء من المحاكاة).
5) أنماط الاستقرار (ما يجب التحقق منه)
يتراجع Jitter ويتأخر في كل RPC.
قاطع الدائرة (فتح/نصف فتح، استرداد أسي).
الحواجز (عزل البرك/الطوابير إلى المجالات الحرجة).
Load Shedding (إعادة ضبط الطلبات ذات الأولوية المنخفضة عند التشبع).
الضغط الخلفي (يشير إلى أعلى السلسلة، حدود التزامن).
الخصوصية (مفاتيح الخصوصية على «الآثار الجانبية»).
التخزين المؤقت والأكوام في حالة تدهور المصدر.
التحلل الرشيق (استجابات خفيفة الوزن، بيانات قديمة، ميزات تعطيل).
ميزانية المهلة.
Atomicity/compensation (Saga/Outbox/Transactional Inbox).
النصاب القانوني والتكرار (النصاب القانوني للنصاب العام، تدهور الاتساق من أجل التوافر).
مضاد للإنتروبيا/إعادة التشغيل (استعادة من ثقوب الأحداث).
6) وصفات الحقن والتوقعات (الكود الكاذب)
أعد طرحه بالنفخ والكسر
for attempt in 1..N:
if breaker. open(): return fallback()
res = call(dep, timeout = base 0. 8)
if res. ok: return res sleep(exp_backoff(attempt) jitter(0. 5..1. 5))
if attempt == N: breaker. trip()
return fallback()
التظليل والظهر
if queue. depth() > HIGH cpu. load() > 0. 85:
if request. priority < HIGH: return 503_SHED limiter. acquire () # constrain concurrency
الخصوصية
key = hash("payout:"+external_id)
if store. exists(key): return store. get(key)
result = do_side_effect()
store. put(key, result, ttl=30d)
return result
7) التجارب: السيناريوهات والفرضيات
7. 1 «التبعية البطيئة»
الحقن: + 400 مللي ثانية p95 إلى واجهة برمجة التطبيقات الخارجية.
الانتظار: نمو المهلة ≤ X٪، فتح الكسر، الاستجابات الاحتياطية، توفير خدمة p99 <SLA، عدم وجود سلسلة تعاقبية أثناء إعادة التصوير.
7. 2 «خسارة مخبأ جزئي»
الحقن: فشل 50٪ من عقد Redis/Cache shard.
الانتظار: تفويت متزايد، ولكن بدون انهيار جليدي للمصدر (اطلب الاندماج/TTL غير القابل للتغيير)، والإحماء التلقائي والتعافي.
7. 3 «انقسام الدماغ في قاعدة البيانات»
الحقن: فقدان القائد، التحول إلى نسخة طبق الأصل.
الانتظار: رفض السجلات على المدى القصير، اقرأ من النصاب القانوني، لا فقدان البيانات، Outbox لا يفقد الرسائل.
7. 4 «ENOSPC/disk flow»
الحقن: 95-100٪ قرص.
الانتظار: تدوير جذوع الأشجار في حالات الطوارئ، وفشل الميزات غير المحظورة، وسلامة السجلات الحرجة (WAL)، والتنبيهات والذاتية.
7. 5 «انفجار المرور»
الحقن: × 3 RPS إلى نقطة النهاية الساخنة 10 دقائق.
التوقعات: تظليل منخفض الأولوية، استقرار p95 للمسارات «النووية»، نمو قائمة الانتظار ضمن الحدود، عدم حدوث عواصف DLQ.
7. 6 «انحراف الساعة»
الحقن: تحول وقت العقدة بمقدار +/ − 2 دقيقة.
الانتظار: TTL/التوقيعات الصحيحة (فسحة)، مؤقتات رتيبة في إعادة التصوير، رموز صالحة مع انجراف مقبول.
8) البيئات وسلامة التجارب
ابدأ بالبيانات الاصطناعية، والتكوينات/الطوبولوجيا في أقرب وقت ممكن من المنتج.
في المبيعات - النوافذ التي يتم التحكم فيها فقط، تتميز بالأعلام، والسعة خطوة بخطوة، والتراجع التلقائي، «الزر الأحمر».
حواجز الحماية: حدود RPS/الأخطاء، حراس SLO، يمنعون الإصدارات أثناء الحوادث الخطيرة.
مطلوب كتاب تشغيل: كيفية التراجع، ومن يتصل، وأين يبحث.
9) التشغيل الآلي و CI/CD
فهرس التجارب كرمز (YAML/DSL): الأهداف، الحقن، المقاييس، العتبات، التراجع «الأزرار».
فوضى الدخان في كل إطلاق: حقن قصيرة (على سبيل المثال 2 دقيقة + 200 مللي ثانية للإدمان) في المرحلة.
تشغيل المصفوفة الليلي - أوضاع الخدمات × الفشل
بوابة الإصدار: حظر الانتشار إذا كان الاستقرار أقل من العتبة (على سبيل المثال، «التغطية الاحتياطية <95٪» تحت «التبعية البطيئة»).
10) البيانات والاتساق
تعويض الفحص (Saga): يجب نقل العمليات المنفذة جزئيًا إلى حالة متفق عليها.
إعادة الاختبار/تكرار الأحداث، والتسليم خارج الطلب، والثقوب والإعادة.
التحقق من ثوابت المجال بعد الفشل: الرصيد ليس سلبيًا، والمعاملات لا تتعثر، ولا يتم انتهاك الحدود.
11) الأنماط المضادة
اختبر فقط المسار السعيد والتحميل دون إخفاقات.
Retrai بدون نفحة → عاصفة تحت التدهور.
لا توجد ميزانية مهلة عالمية → فترات زمنية متتالية.
مجمع واحد لجميع المهام → لا عزل (حواجز).
قوائم الانتظار «اللانهائية» → زيادة في زمن الانتظار/PDE.
عدم وجود قياس عن بعد للتجارب → ممارسات الفوضى «العمياء».
الفوضى في البيع دون التراجع/الحدود/المالك المسؤول.
12) قائمة مراجعة المهندس المعماري
1. فرضية الحالة الثابتة وتعريف SLO ؟
2. كل RPC لديه مهلات، تراجعات نفضية، قواطع ؟
3. تم تنفيذ حواجز، محددات، ضغط خلفي، تسريح الأحمال ؟
4. ذاكرة التخزين المؤقت ثابتة: الاندماج، الحماية من العواصف المخبأة، الإحماء ؟
5. Outbox/Saga للآثار الجانبية والمفاتيح الغبية ؟
6. النصاب/النسخ/التلف تم اختباره ؟
7. هل هناك كتالوج من التجارب والفوضى الليلية والبوابات في CI/CD ؟
8. المقاييس/الآثار علامات التجارب، هل هناك لوحات القيادة ؟
9. Runbook 'و «الزر الأحمر» جاهزان، مسؤولية محددة ؟
10. أيام اللعبة العادية التي تضم Dev/SRE/Support ؟
13) الأدوات الصغيرة وسيناريوهات العينة (رسومات YAML)
الشبكة (tc/netem)
yaml experiment: add-latency target: svc:payments inject:
netem:
delay_ms: 300 jitter_ms: 50 loss: 2%
duration: 10m guardrails:
error_rate: "< 1%"
p95_latency: "< 400ms"
وحدة المعالجة المركزية/كومة
yaml inject:
cpu_burn: { cores: 2, duration: 5m }
heap_fill: { mb: 512 }
التبعية
yaml inject:
dependency:
name: currency-api mode: slow p95_add_ms: 500 fallback_expectation: "serve stale rates ≤ 15m old"
استنتاج
اختبار المرونة ليس «خدعة فوضى»، ولكنه انضباط يجعل النظام متوقعًا في ظل الثغرات. الفرضيات الواضحة، القياس عن بعد، كتالوج من التجارب الخاضعة للرقابة والأنماط المضمنة في البنية (المهلات، القواطع، العزلة، الفراغ) تحول الحوادث المحتملة إلى سيناريوهات خاضعة للرقابة. يثق الفريق في الإصدارات، ويحصل المستخدمون على خدمة مستقرة حتى في ظروف الفشل.