🖥️ عمليات تقنية المعلومات — هندسة الموثوقية نموذج مباشر
أنت مناوب لخدمة ويب: موازن حمل أمام أسطول من النسخ، وكاش أمام قاعدة بيانات، وهدف توافر 99.9 %. في كل دقيقة يحسب النموذج تأخير الطابور والمهل المنتهية وإصابات الكاش وحمل قاعدة البيانات من معادلات الكتب الدراسية — وما تكلّفه قراراتك.
ما الذي ستتعلمه
لماذا ينفجر زمن الانتقال قرب الاستخدام الكامل (Erlang C)، ولماذا يصل التوسع التلقائي ذو تأخير الإقلاع متأخرًا دائمًا.
كيف تقرر SLO وميزانيات الأخطاء وتنبيهات معدل الاستنزاف متى يجب التراجع.
كيف يتحول الكاش البارد إلى انقطاع في قاعدة البيانات، وأي الأدوات تشتري وقتًا: الإسقاط والتدهور والتسخين.
المحاكي
الوقت 0 min
▶نسخة تخدم
⚙نسخة تُقلع
!نسخة على الإصدار السيئ
·خانة شاغرة
•الطلبات الواردة
الضوابط
أرضية الأسطول. رفعها يطلق نسخًا فورًا — وما زالت تحتاج إلى تأخير الإقلاع قبل أن تخدم.
تتبع الهدف على الاستخدام؛ لا توسع جديد ما دامت النسخ ما تزال تُقلع. معطّل = الحد الأدنى تمامًا.
أقل = هامش أكبر وتكلفة أكبر. الاستخدام المقاس لا يتجاوز 100 %، فالأسطول المشبع ينمو خطوة خطوة فقط.
TTL أطول = إصابات أكثر، لكن الإجابات قد تكون أقدم (متوسط العمر ≈ TTL/2).
يحمّل المفاتيح الساخنة لمدة 6 دقائق (+12 % من الكاش في الدقيقة) مقابل 600 استعلام إضافي لقاعدة البيانات/s.
حصة من الـ30 % منخفضة الأولوية (الجلب المسبق والدُفعات والزواحف) المرفوضة عند موازن الحمل برسالة «أعد المحاولة لاحقًا».
الميزة الثقيلة تضيف 20 ms من CPU واستعلام قاعدة بيانات واحدًا لكل طلب. معطّل = تدهور رشيق.
يعيد نشر آخر إصدار سليم على أسطول جديد (5 min، يُحاسَب مرتين)، ثم يحوّل الحركة. الضغط مجددًا يعيد التحضير من البداية؛ وإن لم يكن هناك إصدار سيئ يعمل فإنه يكلّف مالًا فقط.
المؤشرات
معدل الأخطاء
0.00%
عادي
زمن انتقال p99
342ms
عادي
ميزانية الأخطاء المتبقية (30 يومًا)
50.0%
عادي
استخدام الأسطول
52%
عادي
معدل الاستنزاف (1 h)
0.0 ×
الطلبات
1125 req/s
نسخ تخدم
10
نسخ تُقلع
0
معدل إصابات الكاش
77 %
استخدام قاعدة البيانات
19 %
حركة مُسقطة
0 %
تكلفة الأسطول
4.00 $/h
التكلفة حتى الآن
0.00 $
متوسط عمر الإجابات المخزنة في الكاش
30 s
الحركة على الإصدار السيئ
0 %
التوصيات المتاحة
100 %
الاتجاه
سيناريوهات الأزمات
المستوى 1 · إصدار سيئ
يُطلق إصدار جديد في 09:10. كان الشهر صعبًا بالفعل: لم يبقَ إلا 20 % من ميزانية الأخطاء. بعد دقائق من النشر يُطلق تنبيه معدل الاستنزاف. احمِ الميزانية.
ميزانية الأخطاء المتبقية في النهاية ≥ 18.5 %
متوسط معدل الأخطاء ≤ 0.65 % بعد النشر
تكلفة الأسطول ≤ $9.50
المستوى 2 · حشد مفاجئ
رابط إلى الخدمة ينتشر بسرعة ومن المتوقع حدوث ارتفاع في الحركة في وقت ما هذا الصباح — لا أحد يعرف متى، أو بأي حجم. تحتاج النسخ الجديدة اليوم إلى 8 دقائق للإقلاع. عندما يحدث ذلك، أبقِ الأخطاء والتأخير منخفضين دون حرق المال على سعة خاملة.
متوسط معدل الأخطاء ≤ 0.2 %
متوسط زمن انتقال p99 ≤ 400 ms
متوسط الحركة المُسقطة ≤ 5 %
التكلفة الإجمالية ≤ $21
التوصيات متاحة ≥ 85 % من الوقت
المستوى 3 · كاش بارد
عند ذروة منتصف النهار يمسح سكربت صيانة الكاش بأكمله. كل طلب يذهب الآن إلى قاعدة البيانات، التي صُمّمت لمعدل الإصابة المعتاد 85 %. أعد الخدمة دون إرهاق قاعدة البيانات.
متوسط معدل الأخطاء ≤ 1.5 %
استخدام قاعدة البيانات لا يتجاوز 90 % أبدًا بعد الدقيقة الأولى
متوسط عمر الإجابات المخزنة في الكاش ≤ 90 s في المتوسط
التكلفة الإجمالية ≤ $9
التوصيات متاحة ≥ 80 % من الوقت
متوسط الحركة المُسقطة ≤ 5 %
الأساس — النموذج وراء الأرقام
كل علاقة يستخدمها المحاكي مع مصدرها. الثوابت المعلَّمة كافتراضات هي معايرات توضيحية.
تتبع الطلبات منحنى يوميًا مع اضطرابات؛ والعدد في الدقيقة عشوائي (Poisson، تقريب طبيعي) مع قليل من التدفق المتقطع.
λ(t) = base × (1 + 0.25·sin(2π(t + clock − 6 h)/24 h)) × surge(t), clock = time of day at the start (peak at 12:00); count/min ≈ N(60λ, √(60λ)) × (1 + N(0, 0.02))[6]افتراض: أعداد العمال وأزمنة الخدمة وسعة قاعدة البيانات وحجم الكاش وسرعة الملء والأسعار ومعدل أخطاء الإصدار السيئ قيم توضيحية لخدمة ويب متوسطة الحجم.
Erlang C: احتمال أن ينتظر الطلب عاملًا حرًا في نظام M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
ذيل زمن الانتظار: احتمال الانتظار أكثر من t يتناقص أسّيًا؛ والطلبات التي ما تزال تنتظر عند مهلة 2-s تفشل. وما يتجاوز السعة يفشل.
زمن انتقال p99 من كميّات زمن الخدمة وزمن الانتظار.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]تقريب: جمع كمّيّات الخدمة والانتظار ليس هو p99 الدقيق لمجموعهما (قد يكون أعلى أو أقل قليلًا)؛ ويُعامَل الطابور على أنه مستقر خلال كل دقيقة لأن الطلبات تستغرق ميلي ثوانٍ.
قانون ليتل: العمال المشغولون = معدل الوصول × الزمن في الخدمة.
كاش TTL: مع الطلبات العشوائية يبدأ كل إخفاق فترة TTL تصيب خلالها الطلبات.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
إخفاقات الكاش تحمّل قاعدة البيانات؛ وتأخير طابورها يبطّئ كل طلب يمسّها، مما يملأ عمال التطبيق أيضًا.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]افتراض: أعداد العمال وأزمنة الخدمة وسعة قاعدة البيانات وحجم الكاش وسرعة الملء والأسعار ومعدل أخطاء الإصدار السيئ قيم توضيحية لخدمة ويب متوسطة الحجم.
SLO وميزانية الأخطاء: يخبرك معدل الاستنزاف كم مرة أسرع من المسموح تُنفق الميزانية.
budget = 1 − SLO = 0.1 %; burn = error rate / 0.1 %; Δbudget per min = burn / 43,200; burn (1 h) = mean error rate over the last 60 min / 0.1 % (window pre-filled with the opening minute)[1][2]
موسّع تلقائي يتتبع الهدف مع تأخير إقلاع وفترة تهدئة.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]افتراض: أعداد العمال وأزمنة الخدمة وسعة قاعدة البيانات وحجم الكاش وسرعة الملء والأسعار ومعدل أخطاء الإصدار السيئ قيم توضيحية لخدمة ويب متوسطة الحجم.
ثوابت تشغيل أخرى يستخدمها النموذج.
16 workers/instance · app time 50 ms (+20 ms and +1 query with the feature on) · 2 queries/request · DB 4,000 queries/s · 20,000 hot objects · cache refill τ = 30 min (slower while the DB is saturated) · warm-up job +12 %/min for 6 min, +600 queries/s · timeout 2 s · 30 % low-priority traffic · bad build +5 % errors, ×1.25 CPU · rollback 5 min · $0.40 per instance-hour · scale-in by ≤ 20 % of the fleet after 10 quiet minutes · up to 40 instancesافتراض: أعداد العمال وأزمنة الخدمة وسعة قاعدة البيانات وحجم الكاش وسرعة الملء والأسعار ومعدل أخطاء الإصدار السيئ قيم توضيحية لخدمة ويب متوسطة الحجم.
العشوائية: مولّد mulberry32 ببذرة؛ التوزيعات المستخدمة — منتظم، وأسّي (CDF العكسي)، وطبيعي (Box–Muller)، وبواسون (Knuth). تُعرض البذرة ويمكن مشاركتها.
M. Harchol-Balter — Performance Modeling and Design of Computer Systems: Queueing Theory in Action (M/M/k, server farms, capacity provisioning) — Cambridge University Press, 2013