التعمق في موازنة الحمل المرنة على AWS
التعمق في موازنة الحمل المرنة على AWS
تُعدّ خدمة AWS Elastic Load Balancing (ELB) البوابة الأمامية لحركة المرور في كل نظام إنتاجي تقريبًا على AWS. تستقبل اتصالات العملاء، وتُجري فحوصات صحة على الأهداف، وتوزّع الطلبات عبر مجموعة من الخوادم — كل ذلك دون أن تُدير أي خادم موازنة بنفسك. على نطاق الشركات الكبرى، لا يُعدّ ELB مجرد ميزة ملائمة، بل هو المكوّن الذي يُتيح النشر دون توقف، ويستوعب ارتفاعات حركة المرور، ويوفر الخط الأول لإنهاء اتصالات TLS. إن فهم آليات عمله الداخلية أمر ضروري لكل مهندس AWS جاد.
ALB مقابل NLB: اختيار الأداة الصحيحة
توفر AWS نوعين رئيسيين من موازنات الأحمال. يعمل Application Load Balancer (ALB) عند الطبقة السابعة من نموذج OSI (HTTP/HTTPS/gRPC). يقرأ طلب HTTP بالكامل — المسار، والرؤوس، واسم المضيف، ومعاملات الاستعلام — ويوجّه حركة المرور بناءً على محتوى الطلب. أما Network Load Balancer (NLB) فيعمل عند الطبقة الرابعة (TCP/UDP/TLS). يوجّه بناءً على عنوان IP والمنفذ، دون أي إدراك لمحتوى طبقة التطبيق.
- استخدم ALB حين تحتاج إلى توجيه مستند إلى اسم المضيف أو المسار، أو دعم WebSocket، أو gRPC، أو الجلسات الثابتة، أو تكامل WAF، أو مصادقة Cognito، أو أهداف Lambda. هذا هو الخيار الافتراضي للتطبيقات الويب والخدمات المصغّرة.
- استخدم NLB حين تحتاج إلى زمن استجابة منخفض جدًا (تمرير اتصالات بمستوى الميكروثانية)، أو عناوين IP ثابتة (يوفر NLB عنوان IP مرن واحد لكل منطقة توافر)، أو تمرير TCP للمصادقة المتبادلة عبر TLS، أو البروتوكولات غير المعتمدة على HTTP كـ MQTT أو TCP مخصص أو UDP عالي الحجم.
X-Forwarded-For على الهدف للحصول على عنوان IP الحقيقي للعميل.
مجموعات الأهداف
مجموعة الأهداف (Target Group) هي تجمّع الوجهات الذي يوجّه إليه قاعدة المستمع حركة المرور. يمكن أن تكون الأهداف نُسخ EC2، أو مهام ECS (بعنوان IP)، أو دوال Lambda، أو موازنات أحمال أخرى (نمط ALB خلف NLB). تمتلك كل مجموعة أهداف إعداد فحص صحة مستقل: البروتوكول، والمسار، والمنفذ، وعتبة الاتزان الصحي، وعتبة عدم الاتزان، والفاصل الزمني.
سمات مجموعة الأهداف المهمة في الإنتاج:
- تأخير إلغاء التسجيل (الافتراضي 300 ثانية): المدة التي يواصل فيها ELB إرسال الطلبات الجارية إلى هدف يجري إلغاء تسجيله. خلال عمليات النشر المتدحرج، اخفض هذه القيمة إلى 30–60 ثانية لتسريع التصريف إذا كانت طلباتك ذات مدة قصيرة.
- وضع البداية البطيئة (ALB فقط): تصعيد الهدف الجديد من 0% إلى الحِمل الكامل على مدى 30–900 ثانية، مما يمنع إغراق نُسخ JVM أو Node.js الباردة فور تشغيلها.
- خوارزمية موازنة الأحمال (ALB فقط): Round robin (الافتراضي)، أو Least outstanding requests (الأفضل لمدد طلبات متباينة)، أو Weighted random مع Least Outstanding Requests (الأحدث والأفضل للأسطح الكبيرة).
- اللزوجة (Stickiness): مستندة إلى المدة (ملف تعريف ارتباط ELB) أو مستندة إلى التطبيق (ملف تعريف ارتباطك الخاص). تجنّب اللزوجة إلا إذا كان التطبيق يحتاجها فعلًا، إذ إنها تُفسد الغرض من التوسع الأفقي.
المستمعون والقواعد
المستمع (Listener) هو نقطة نهاية ذات منفذ وبروتوكول على موازن الأحمال (مثلًا HTTPS:443). يُقيّم قائمة مرتّبة من القواعد. تحتوي كل قاعدة على شروط (ترويسة المضيف، نمط المسار، طريقة HTTP، عنوان IP المصدر، معاملات الاستعلام، ترويسات HTTP) وإجراء (التوجيه إلى مجموعة أهداف، إعادة التوجيه، إرجاع استجابة ثابتة، المصادقة عبر Cognito/OIDC). تلتقط القاعدة الافتراضية كل شيء لا تطابقه القواعد السابقة.
إعداد قاعدة ALB نموذجي لنمط بوابة API في الخدمات المصغّرة:
بالنسبة لمستمعي HTTPS يجب إرفاق شهادة ACM (AWS Certificate Manager). يدعم ALB شهادات متعددة على مستمع واحد عبر SNI؛ يختار المستمع الشهادة المطابقة لترويسة Host، مما يُمكّن ALB واحدًا من خدمة عشرات النطاقات.
إنهاء TLS
يُنهي ELB اتصال TLS عند موازن الأحمال افتراضيًا. تقيم الشهادة في ACM ولا تُدار مفاتيح خاصة أبدًا على النُّسخ. تسير الاتصالات من ALB إلى الأهداف عبر الشبكة الخاصة في VPC. في بيئات الامتثال (PCI-DSS، HIPAA) التي تشترط التشفير طوال المسار حتى الهدف، يمكنك:
- تثبيت شهادة على الهدف وتكوين بروتوكول مجموعة الأهداف كـ HTTPS (يُعيد ALB التشفير)، أو
- استخدام NLB مع مستمع TLS وتمرير TCP مباشرةً إلى الهدف (تشفير كامل من طرف إلى طرف، لا يفكّ NLB التشفير).
يُعدّ اختيار سياسة أمان TLS أمرًا بالغ الأهمية. دائمًا فضّل ELBSecurityPolicy-TLS13-1-2-2021-06 (TLS 1.3 + TLS 1.2 مع شفرات قوية فقط) لموازنات الأحمال المواجهة للإنترنت. تجنّب السياسة القديمة ELBSecurityPolicy-2016-08 التي تسمح بـ TLS 1.0/1.1 — سيُشير مدققو PCI DSS وSOC 2 إليها على الفور.
فحوصات الصحة وأوضاع الفشل
تُعدّ فحوصات صحة ELB الآلية التي تبعد حركة المرور عن الأهداف المعطوبة. يُصنَّف الهدف على أنه غير صحي بعد unhealthyThreshold من الإخفاقات المتتالية، ولا يعود صحيحًا إلا بعد healthyThreshold من النجاحات المتتالية. أبرز المشكلات الشائعة في الإنتاج:
- مسار فحص الصحة يُرجع 200 والتطبيق معطوب: نقطة نهاية
/pingسطحية تُرجع دائمًا 200 ستُبقي الهدف المعطوب في الدوران. استخدم نقطة نهاية فحص صحة عميقة (/healthz) تتحقق من اتصالية قاعدة البيانات، وتوفّر ذاكرة التخزين المؤقت، وأي تبعية حرجة. - مجموعة الأمان تحجب فحوصات صحة ELB: تنشأ فحوصات صحة ALB من عُقد ALB نفسها داخل VPC. يجب أن تسمح مجموعة أمان الهدف بحركة المرور الواردة على منفذ الفحص من مجموعة أمان ALB (لا من الإنترنت).
- تأخير إلغاء التسجيل مرتفع جدًا: القيمة الافتراضية 300 ثانية تعني أن النشر المتدحرج ينتظر 5 دقائق لكل دفعة في انتظار تصريف الاتصالات. اضبطها بما يتناسب مع مدة الطلب عند النسبة المئوية التاسعة والتسعين لديك.
drop_invalid_header_fields = true في Terraform لمنع هجمات HTTP desync (تهريب الطلبات).
موازنة الأحمال عبر المناطق
افتراضيًا، توزّع كل عُقدة ALB (واحدة لكل منطقة توافر) الطلبات فقط على الأهداف المسجّلة في منطقة التوافر الخاصة بها. عند تفعيل موازنة الأحمال عبر المناطق (افتراضية لـ ALB، اختيارية لـ NLB)، تُوزّع كل عُقدة الطلبات بالتساوي على جميع الأهداف المسجّلة في كل مناطق التوافر. وهذا يُلغي الحاجة إلى الحفاظ على عدد متساوٍ من الأهداف في كل منطقة توافر — أمر حيوي عندما تمتد مجموعات Auto Scaling عبر مناطق توافر متعددة وتكون أعداد النُّسخ غير متساوية. تُحصّل NLB رسومًا على نقل البيانات عبر مناطق التوافر عند تفعيل موازنة الأحمال عبر المناطق؛ بينما لا تفعل ذلك ALB.
إن التمكّن من ELB — ولا سيما التفاعل بين قواعد المستمع، وفحوصات صحة مجموعة الأهداف، وتأخيرات إلغاء التسجيل، واختيار سياسة TLS — هو ما يُميّز المهندسين الذين "يجعلون الأمور تعمل فحسب" عن المهندسين الذين يبنون أنظمة تصمد أمام أعطال الإنتاج الحقيقية.