فك تشفير التوفر العالي للخدمات المصغرة: استكشاف استراتيجيات حوكمة API باستخدام Apache APISIX
March 29, 2024
مقدمة
أصبحت بنية الخدمات الصغيرة الخيار السائد في تصميم البنية التحتية لتكنولوجيا المعلومات في الوقت الحالي. إن مرونتها وقابليتها للتوسع تجعل من السهل على الشركات التعامل مع المتطلبات التجارية سريعة التغير. ومع ذلك، أصبح ضمان التوفر العالي للخدمات الصغيرة قضية رئيسية في تصميم البنية التحتية. في هذا السياق، تعتبر الاستراتيجيات الثلاث الأساسية في إدارة خدمات API — تحديد معدل الطلبات، وكسر الدائرة، والتخفيض — ذات أهمية خاصة.
باعتبارها مكونًا أساسيًا في بنية الخدمات الصغيرة، تلعب بوابة API دورًا حاسمًا في إدارة الخدمات. Apache APISIX، كبوابة API سحابية من الجيل الجديد، لا تتمتع فقط بأداء عالي وقدرات أمان قوية، ولكنها توفر أيضًا وظائف غنية لإدارة حركة المرور. في المناقشة التالية، سنتعمق في "النهج الثلاثي" لإدارة خدمات API ونقدم رؤى مفصلة حول كيفية تطبيق هذه الاستراتيجيات في APISIX لضمان التوفر العالي لخدماتنا.
استراتيجيات إدارة API
تحديد معدل الطلبات
تحديد معدل الطلبات، كما يوحي الاسم، هو آلية تقييد يتم تطبيقها على حركة المرور. يكمن مبدأها الأساسي في منع زيادة الحمل على النظام أو حتى انهياره بسبب حركة المرور المفرطة. تكمن الفكرة الأساسية في تنظيم حجم الطلبات ضمن فترات زمنية محددة، مما يسمح فقط للطلبات التي تلبي قيودًا معينة بالوصول إلى النظام، وبالتالي ضمان التشغيل المستقر للخدمات الصغيرة والنظام بأكمله. في سيناريوهات الحياة الواقعية، يمكن ملاحظة مفهوم تحديد معدل الطلبات أيضًا. على سبيل المثال، خلال ساعات الذروة في محطات المترو، يتم إعداد بوابات متعددة للفحص الأمني لتوجيه الطابور بشكل منظم وسلس.
يمكن تنفيذ تحديد معدل الطلبات بطرق مختلفة، بما في ذلك:
-
بناءً على عدد الطلبات: تتبع عدد الطلبات ضمن كل فترة زمنية وتقييدها ضمن حد معين. على سبيل المثال، معالجة ما يصل إلى 100 طلب في الثانية.
-
بناءً على تردد الطلبات: تقييد تردد الطلبات لكل عميل أو عنوان IP لمنع عدد كبير من الطلبات. على سبيل المثال، السماح بما يصل إلى 10 طلبات في الدقيقة.
-
بناءً على عدد الاتصالات: تقييد عدد الاتصالات المتزامنة لتجنب استهلاك موارد النظام المفرطة. على سبيل المثال، السماح بما يصل إلى 100 اتصال متزامن.
تمكننا استراتيجيات تحديد معدل الطلبات المختلفة من التعامل مع متطلبات السيناريوهات المختلفة. على سبيل المثال، بالنسبة لموارد API القيمة، يمكننا تحديد عدد الطلبات إلى 10 في الدقيقة. أو لتعزيز توفر الخدمة، يمكننا تحديد عدد الطلبات المتزامنة لتقليل وقت استجابة الخدمة، من بين سيناريوهات أخرى. يمكن أن تساعد التنفيذ الصحيح لهذه الاستراتيجيات في ضمان التشغيل الطبيعي للخدمات تحت الحمل العالي وزيادة حركة المرور المفاجئة.
كسر الدائرة
في بنية الخدمات الصغيرة، قد تكون هناك حالات حيث تتداخل الخدمات مع بعضها البعض. بمجرد فشل خدمة واحدة، قد تؤثر على خدمات أخرى، أو حتى تؤدي إلى انهيار النظام بأكمله، وهي ظاهرة تُعرف باسم "الفشل المتتالي" أو "تأثير الانهيار الجليدي". تعتبر آلية كسر الدائرة كإجراء وقائي ضد الفشل المتتالي في الخدمات الصغيرة، حيث تُستخدم لمنع انتشار الفشل. عندما تواجه خدمة صغيرة مشاكل أو تأخيرات، يتم تشغيل كسر الدائرة بسرعة عن طريق حظر الطلبات إلى تلك الخدمة مؤقتًا، وبالتالي ضمان عدم تعرض استقرار النظام بأكمله للخطر.
يكمن المبدأ الأساسي لآلية كسر الدائرة في مراقبة وقت استجابة الخدمة أو معدلات الخطأ في الوقت الفعلي. بمجرد تجاوز هذه المقاييس العتبات المحددة مسبقًا، يتم تشغيل كسر الدائرة تلقائيًا، مما يوقف الطلبات إلى الخدمة المعطوبة بسرعة حتى تعود إلى التشغيل الطبيعي. بعد استقرار الخدمة، يتم إغلاق كسر الدائرة تلقائيًا، واستئناف الوصول إلى الخدمة. تشبه هذه الآلية المقاومة في الدائرة الكهربائية. عندما يتجاوز الجهد نطاق تحمله، يتم فصل المقاومة تلقائيًا لمنع التيار المفرط من إتلاف المكونات الإلكترونية الأخرى. بعد فحص وإصلاح الدائرة، يتم إغلاق المقاومة مرة أخرى، وتعود الدائرة إلى التشغيل الطبيعي.
من خلال إدخال آليات كسر الدائرة، يمكن لبنية الخدمات الصغيرة التعامل بشكل أفضل مع مشاكل الفشل المتتالي المحتملة الناتجة عن التداخل بين الخدمات، مما يضمن استقرار وموثوقية النظام، خاصة في السيناريوهات عالية الضغط.
التخفيض
يعتبر التخفيض استراتيجية فعالة للتعامل مع الأحمال العالية على النظام، حيث يتضمن تعطيل بعض الوظائف غير الحرجة مؤقتًا أو تقليل جودة بعض الخدمات بشكل معتدل لضمان التشغيل المستقر للنظام بأكمله. في بنية الخدمات الصغيرة، يمكن لتطبيق آليات التخفيض أن يحجب بعض الوظائف غير الأساسية أو التي يمكن الاستغناء عنها مؤقتًا بشكل ذكي، مما يضمن استمرارية واستقرار الوظائف الأساسية. على سبيل المثال، في تطبيق مؤتمرات الفيديو، عندما تكون عرض النطاق الترددي للشبكة محدودًا، يمكننا تقليل جودة نقل الفيديو أو تعطيل وظيفة الفيديو مؤقتًا لضمان مكالمات صوتية واضحة ومستقرة، وبالتالي تلبية احتياجات الاتصال الأساسية للاجتماع.
تشمل الاستراتيجيات الشائعة:
-
تخفيض الوظائف: تعطيل أو تقييد الوصول إلى بعض الوظائف مؤقتًا لضمان التشغيل الطبيعي للخدمات الأساسية. على سبيل المثال، قد يقوم تطبيق وسائل التواصل الاجتماعي بتعطيل وظائف "الإعجاب" أو "التعليق" خلال ساعات الذروة لضمان تصفح المستخدمين للمحتوى بشكل طبيعي.
-
تخفيض الجودة: خلال الأحمال العالية على النظام، يتم تخفيض متطلبات الجودة لبعض الخدمات أو الوظائف. على سبيل المثال، كما ذكرنا سابقًا، تقليل وضوح الفيديو أو معدل الإطارات لضمان اتصال سلس.
تحديد معدل الطلبات، كسر الدائرة، والتخفيض في APISIX
كيف يمكننا استخدام الاستراتيجيات الثلاث المذكورة أعلاه والمتاحة في APISIX لتعزيز التوفر العالي للخدمات الصغيرة؟ فيما يلي بعض الأمثلة الشائعة للتوضيح.
تحديد معدل الطلبات باستخدام مكون limit-count
يوفر APISIX العديد من مكونات إدارة حركة المرور المدمجة مثل limit-count
، وlimit-req
، وlimit-conn
. بناءً على الاحتياجات الفعلية، يمكننا اختيار الطريقة المناسبة للتحكم في حركة المرور. على سبيل المثال، مكون limit-count
يحدد العدد الإجمالي للطلبات ضمن فترة زمنية محددة ويعيد عدد الطلبات المتبقية في رأس HTTP.
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/get",
"plugins": {
"limit-count": {
"count": 3,
"time_window": 60,
"rejected_code": 429,
"key_type": "var",
"key": "remote_addr"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
كسر الدائرة باستخدام مكون api-breaker
يقوم مكون api-breaker
في APISIX بتشغيل آليات كسر الدائرة تلقائيًا بناءً على العتبات المحددة مسبقًا لمنع الفشل المتتالي. على سبيل المثال، يمكن أن يبدأ كسر الدائرة عندما تعيد الخدمات الأعلى 3 رموز حالة 500 أو 503 متتالية ويستأنف الوصول عند استلام رمز حالة 200.
curl "http://127.0.0.1:9180/apisix/admin/routes/1" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"api-breaker": {
"break_response_code": 502,
"unhealthy": {
"http_statuses": [500, 503],
"failures": 3
},
"healthy": {
"http_statuses": [200],
"successes": 1
}
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
},
"uri": "/get",
}'
التخفيض باستخدام مكون fault-injection
تدعم مكونات fault-injection
وmocking
في APISIX تعيين استراتيجيات التخفيض لتعطيل بعض الوظائف مؤقتًا أو إرجاع بيانات محددة مسبقًا خلال الأحمال العالية على النظام، مما يضمن استقرار النظام. على سبيل المثال، يمكن لمكون fault-injection
إرجاع رموز حالة HTTP وقيم الجسم المحددة مباشرة إلى العملاء.
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"fault-injection": {
"abort": {
"http_status": 200,
"body": "Fault Injection!"
}
}
},
"upstream": {
"nodes": {
"httpbin.org:80": 1
},
"type": "roundrobin"
},
"uri": "/get"
}'
الخاتمة
تعتبر تحديد معدل الطلبات، وكسر الدائرة، والتخفيض إجراءات حاسمة في إدارة الخدمات في بنية الخدمات الصغيرة، حيث تلعب دورًا لا يمكن الاستغناء عنه في تعزيز التوفر العالي للخدمات الصغيرة. تعمل هذه الاستراتيجيات كدرع قوي، تحمي بنية الخدمات الصغيرة من المخاطر والتحديات المحتملة المختلفة. في مواجهة السيناريوهات التجارية المتنوعة، يجب علينا تطبيق هذه الإجراءات بحذر ومرونة لضمان الحفاظ على استقرار وموثوقية بنية الخدمات الصغيرة بشكل مثالي.