اختبار الفوضى (حقن الأعطال)
اختبار الفوضى (حقن الأعطال)
Section titled “اختبار الفوضى (حقن الأعطال)”تستطيع كاظمه حقن الأعطال في نفسها: استدعاءات نماذج بطيئة أو فاشلة،
واستدعاءات أدوات فاشلة، وكتابات قواعد بيانات فاشلة. وُجد هذا ليُثبت أن
مسارات إعادة المحاولة وتحوّل الأعطال ومعالجة الأخطاء تعمل، على خادم
اختبار، قبل أن تختبرها أعطال حقيقية. الشيفرة في
kazma_core/chaos/__init__.py؛ ومسارات HTTP في kazma_ui/routes_chaos.py.
معطَّل ما لم تشغّله
Section titled “معطَّل ما لم تشغّله”يُشغِّل الميزةَ KAZMA_CHAOS_ENABLED=true (أو 1 أو yes أو on). بدونه
لا تُثبَّت مسارات /api/chaos، وتبقى كل نقطة حقن خامدة حتى لو سجّل شيءٌ ما
حقنًا، فلا يمكن لاستدعاء شارد أن يسبب عطلًا حقيقيًا أبدًا. المسارات للمشرفين
فقط. لا تشغّله على خادم يعتمد عليه الناس.
أين تهبط الأعطال فعلًا
Section titled “أين تهبط الأعطال فعلًا”يُسمّي الحقنُ هدفًا. ثلاثة أهداف لها نقطة حقن في شيفرة المنتج؛ والبقية موجودة في القائمة لكن لا شيء يفحصها، فالحقن الموجَّه إليها لا يغيّر شيئًا.
| الهدف | أين يهبط |
|---|---|
llm_provider | كل محاولة داخل resilient_chat: استدعاء نموذج. الخطأ المحقون 408 أو 429 أو 5xx يُعلَّم عابرًا، فيعمل عليه منطق إعادة المحاولة وتحوّل الأعطال الحقيقي |
tool_executor | UnifiedToolExecutor.execute (kazma_core/mcp/manager.py) |
database | reply_sink.upsert_reply: حفظ ردّ دردشة |
message_bus، swarm_engine، gateway_adapter، webhook_handler، cache، external_api | لا نقطة حقن: لا يحدث شيء |
أنواع الأعطال: latency، error، timeout، circuit_breaker_open،
resource_exhaustion، network_partition، data_corruption،
partial_degradation.
تجارب جاهزة
Section titled “تجارب جاهزة”كل تجربة تستمر لمدتها، ثم ينتهي مفعول حقنها.
| التجربة | الهدف | العطل | الاحتمال لكل استدعاء | تستمر لـ |
|---|---|---|---|---|
llm_high_latency | llm_provider | كمون 7.5 ثانية | 30 % | 60 ثانية |
llm_intermittent_errors | llm_provider | خطأ 500 | 10 % | 120 ثانية |
llm_timeout | llm_provider | مهلة | 5 % | 60 ثانية |
circuit_breaker_force_open | llm_provider | قاطع مفتوح | 50 % | 30 ثانية |
database_slow | database | كمون 3 ثوانٍ | 20 % | 60 ثانية |
database_errors | database | خطأ 503 | 5 % | 120 ثانية |
resource_exhaustion | database | استنزاف الموارد | 10 % | 60 ثانية |
tool_executor_failures | tool_executor | خطأ 500 | 10 % | 60 ثانية |
message_bus_partition | message_bus | انقسام | 10 % | 30 ثانية — بلا أثر (لا نقطة حقن) |
swarm_engine_degradation | swarm_engine | تدهور جزئي | 20 % | 120 ثانية — بلا أثر |
gateway_adapter_errors | gateway_adapter | خطأ 502 | 5 % | 60 ثانية — بلا أثر |
مسارات HTTP (للمشرفين، فقط عند التفعيل)
Section titled “مسارات HTTP (للمشرفين، فقط عند التفعيل)”| المسار | ما يفعله |
|---|---|
GET /api/chaos/experiments | التجارب الجاهزة |
POST /api/chaos/experiments/{name}/run | بدء تجربة |
GET /api/chaos/injections | الحقن النشطة الآن |
DELETE /api/chaos/injections/{injection_id} | إيقاف حقنة |
DELETE /api/chaos/injections | إيقاف الكل |
POST /api/chaos/injections/custom | بدء حقنة من عندك |
الحقنة المخصصة تأخذ failure_type وtarget وprobability (من 0 إلى 1)
وduration_seconds (أكبر من 0)، إضافة إلى params اختيارية: latency_ms
وerror_code وerror_message وseverity وmetadata. وأي شيء آخر يُرفض
بخطأ 400.
من Python
Section titled “من Python”chaos_experiment(...) مدير سياق غير متزامن يحقن طوال مدة كتلة،
وchaos_injection(target) هو المُزخرف الذي يجعل دالةً ما نقطةَ حقن،
وget_injector() يعطي حاقن العملية. أما run_predefined_experiment(name)
وlist_predefined_experiments() وlist_active_injections() فهي ما تستدعيه
المسارات.

