الموثوقية: الأعطال، تحديد المعدل، وقابلية الملاحظة
لا تقلق إذا بدت هذه الكلمات مخيفة — سنشرح كل واحدة منها في الطريق. في هذا الدرس نتعلّم كيف نتحدّث في المقابلة عن طرق الحفاظ على استقرار النظام حتى عندما يحدث خطأ ما: timeouts (التوقّف عن انتظار الإجابة بعد وقت محدد، بدلًا من البقاء عالقين إلى الأبد)، retries (إعادة محاولة طلب فشل). سنتعرّف على circu
System Design (التخطيط لكيفية بناء برمجيات كبيرة تخدم أشخاصًا كثيرين) يشبه تخطيط مدينة: طرق ومخازن وإشارات مرور وطواقم صيانة، بحيث تستمر المدينة في العمل بسلاسة حتى في ساعة الذروة، عندما يخرج الجميع في الوقت نفسه.
- الموثوقية وقابلية الملاحظة
- الفكرة الأساسية لهذا الدرس: كيف نحافظ على موثوقية النظام (استمراره في العمل) وقدرتنا على رؤية ما يجري داخله. تشمل: متى نتوقّف عن الانتظار (timeouts)، متى نعيد المحاولة (retries)، متى نحجب مؤقتًا لمنع انهيار (circuit breakers)، كيف نحدّ من عدد الطلبات المسموح بها (rate limits)، وكيف نراقب ما يجري باستخدام metrics وlogs وtracing (تتبّع طلب).
- Trade-off
- Trade-off (مقايضة) — اختيار واعٍ تكسب فيه شيئًا وتدفع مقابله بشيء آخر، مثل اختيار الوجبات السريعة بدلًا من وجبة منزلية: توفّر الوقت لكنك تخسر بعض الجودة. في المقابلة تشرح ما الذي كسبته وما الذي كلّفك.
- مقياس تشغيلي
- مقياس تشغيلي — رقم يُظهر ما إذا كان القرار يعمل فعلًا عندما يكون النظام حيًّا ويخدم مستخدمين حقيقيين (يُسمّى هذا production). على سبيل المثال: latency (كم من الوقت يستغرق الحصول على إجابة)، error rate (نسبة الطلبات التي تفشل)، queue lag (كم مهمة تنتظر في الطابور)، cache hit ratio (كم مرة وجدنا الإجابة في الذاكرة السريعة)، وغير ذلك.