تكرار السؤال: …
الإجابة المختصرة
تتحقق الـ Liveness من أن العملية ما زالت حية وغير متجمدة (وإلا أعيد تشغيلها)، بينما تتحقق الـ Readiness من جاهزية التطبيق لاستقبال الطلبات (مثل اكتمال الاتصال بقاعدة البيانات).
الشرح
إذا فشل فحص الـ Liveness (مثلاً حدث Deadlock جمد الـ Event Loop)، يقوم Kubernetes بإعادة تشغيل الحاوية فوراً. أما إذا فشل فحص الـ Readiness (مثلاً أثناء تحميل بيانات أولية ضخمة أو تعطل قاعدة البيانات مؤقتاً)، يقوم Kubernetes بعزل الحاوية والتوقف عن توجيه الزيارات إليها دون قتل العملية، حتى تعود للجاهزية وتستأنف الخدمة.
مثال بالكود
// مسار الجاهزية يفحص اتصال قاعدة البيانات
app.get("/health/ready", async (req, res) => {
const isDbOk = await db.ping();
if (isDbOk) res.status(200).send("READY");
else res.status(503).send("DB_DOWN");
});أخطاء شائعة
- ربط فحص الـ Liveness بقاعدة بيانات خارجية؛ فإذا سقطت قاعدة البيانات، سيعيد Kubernetes قتل وإعادة تشغيل كل خوادم Node.js عبثاً.