المستوى المستهدف: متوسط — يفترض إنك بتشتغل على Kubernetes وتعرف HPA و YAML بشكل أساسي.
KEDA: scale workers من صفر لـ 50 بناءً على طول طابور Redis
لو عندك 8 worker pods شغّالين 24/7 بيعالجوا 4,000 task في اليوم بس، انت بتدفع لـ Kubernetes 7,500 ساعة CPU شهريًا في الفاضي. KEDA بيخلّيهم 0 لما الطابور فاضي، و50 لما يمتلئ، بصفر تعديل في كود الـ worker.
المشكلة باختصار
الـ Horizontal Pod Autoscaler الافتراضي في Kubernetes بيقيس CPU و memory بس. مشكلة الـ async workers إن استهلاكهم للـ CPU قليل (هم بيستنّوا I/O أغلب الوقت)، وانت محتاج تعرف "في كام task مستنّي في الطابور؟" مش "البودات شغّالة قد ايه؟".
سيناريو حقيقي من إنتاج: نظام معالجة صور لتطبيق e-commerce فيه 8 workers ثابتة. متوسط 4,000 صورة في اليوم بس Black Friday بيوصل 280K. الـ 8 workers بتقع تحت الضغط، الطلبات بتاخد 14 دقيقة بدل ثانيتين، وبيوصل شكاوى من 312 عميل في يومين.
المثال التقريبي للمبتدئ: كاشير السوبر ماركت
تخيل سوبر ماركت فيه 8 كاشير شغّالين دايمًا. الساعة 3 الصبح طابور الزبائن صفر، 8 كاشير قاعدين على بعض. الساعة 8 المساء فيه 80 زبون في الطابور و 8 كاشير مش كفاية، الزبائن بتمشي قبل ما تدفع.
KEDA هو المدير الذكي اللي بيبصّ على طابور الكاشير كل 30 ثانية:
- طابور صفر؟ يصرف الكاشير كلهم وما تدفعش رواتب.
- طابور 80 زبون؟ يستدعي 50 كاشير من الباك أوفيس في دقيقة.
- الزحمة هدت؟ يبدأ يصرفهم تدريجي بعد 5 دقائق هدوء.
الفكرة دي بالظبط هي scale-to-zero و event-driven autoscaling. النقطة الأساسية إن المقياس مش "الكاشير تعبان قد ايه" (CPU)، المقياس "الطابور طوله كام" (Redis list length).
التعريف العلمي لـ KEDA
KEDA اختصار Kubernetes Event-Driven Autoscaler. مشروع CNCF حصل على Graduated status في أغسطس 2023، بدأ كشراكة بين Microsoft و Red Hat. بيعمل extend للـ HPA الأصلي بحيث يقرا metrics من 70+ مصدر خارجي: Redis, Kafka, RabbitMQ, AWS SQS, Prometheus, PostgreSQL, GitHub Actions، إلخ.
المعمارية الداخلية فيها 3 مكونات:
- KEDA Operator: controller بيراقب objects من نوع
ScaledObjectويترجمها لـ HPA objects تقليدية. - Metrics Adapter: بيقدّم metrics للـ external metrics API الخاص بـ Kubernetes، فالـ HPA بيستخدمها كأنها CPU عادي.
- Scaler: مكوّن صغير لكل مصدر، بيتكلم مع المصدر الخارجي ويرجّع رقم (طول الطابور مثلًا).
الفرق الجوهري عن HPA الافتراضي: KEDA بيقدر يعمل scale-to-zero (من 0 لـ N)، الـ HPA الأصلي حدّه الأدنى 1 pod ثابت.