هل تؤثر الطلبات البطيئة في API Gateway على الطلبات الأخرى؟

December 30, 2023

Technology

من القضايا التي يتم مناقشتها بشكل متكرر في عالم بوابات API هي القدرة على التعامل بكفاءة مع عدد كبير من الطلبات المتزامنة. على وجه التحديد، يطرح السؤال التالي: هل ستزيد الطلبات البطيئة بشكل كبير من وقت استجابة الطلبات العادية الأخرى في بوابة API؟

الجواب هو أن APISIX تتفوق في هذا الصدد، حيث تظهر أن الطلبات البطيئة لا تؤثر سلبًا على الطلبات العادية الأخرى. ومع ذلك، بالنسبة لمنتجات بوابات API المبنية على لغات وبنى برمجية مختلفة، قد لا يكون الأداء بنفس الجودة.

تظهر لغات البرمجة المختلفة درجات متفاوتة من التوافق مع بنى البرمجيات المتزامنة. اللغات البرمجية القديمة مثل C وFortran، المصممة في الأصل لأنظمة ذات معالج واحد، تمتلك دعمًا محدودًا للتزامن. ومع ظهور البيئات متعددة المعالجات والخيوط، فإن اللغات الأحدث مثل Java وPython تتضمن قدرات أقوى للتزامن والمعالجة المتوازية. تم تصميم لغات مثل Go مع مراعاة التزامن، حيث تم دمج نماذج التزامن بشكل وثيق مع ميزات اللغة. إن دعم التزامن في لغة البرمجة لا يعكس فقط البيئة التكنولوجية خلال نشأتها، بل يتوقع أيضًا سيناريوهات التطبيق المقصودة.

الروتينات الفرعية والخيوط

على افتراض وجود آلاف الطلبات المتزامنة، فإن استخدام بنية متعددة الخيوط أو متعددة العمليات (كما في Java أو Python) يتطلب تخصيص آلاف الخيوط أو العمليات لإدارة سياقات الطلبات. أولئك الذين لديهم معرفة ببرمجة الكمبيوتر يفهمون أنه حتى إذا ظلت غالبية الخيوط في حالة خمول، فإن نظام التشغيل يستهلك موارد الأجهزة في الحفاظ على آلاف الخيوط أو العمليات. ومع ذلك، باستخدام الروتينات الفرعية (كما في APISIX وGolang)، لا تكون هناك حاجة إلى خيوط أو عمليات إضافية على الرغم من زيادة الطلبات المتزامنة.

الروتينات الفرعية والخيوط والعمليات كلها تمثل أساليبًا للقيام بمهام متعددة ولكنها تظهر اختلافات رئيسية:

  1. آلية الجدولة: جدولة الخيوط/العمليات هي استباقية ويتم إدارتها بواسطة نظام التشغيل (OS)، مما يعني أن نظام التشغيل يقرر متى يتم المقاطعة والتبديل إلى خيط أو عملية أخرى. على العكس من ذلك، فإن جدولة الروتينات الفرعية تعاونية، يتم التحكم فيها بشكل صريح من قبل المبرمجين أو مكتبات اللغة. تحتاج الروتينات الفرعية إلى التخلي عن التحكم بشكل صري لتسهيل التبديل إلى روتينات فرعية أخرى.

  2. التكلفة: الخيوط/العمليات، كونها على مستوى نظام التشغيل، تتطلب موارد أعلى للإنشاء والتبديل والإنهاء. على العكس من ذلك، تعمل الروتينات الفرعية في مساحة المستخدم، مما يؤدي إلى تكلفة أقل نسبيًا للإنشاء والتبديل والإنهاء.

  3. مشاركة البيانات والمزامنة: مشاركة البيانات بين الخيوط/العمليات تتطلب عمليات مزامنة معقدة، مثل أقفال التبادل، أقفال القراءة-الكتابة، الإشارات، إلخ، لمنع حالات سباق البيانات. الروتينات الفرعية، كونها ضمن نفس الخيط، يمكنها مشاركة المتغيرات العامة مباشرة دون الحاجة إلى مزامنة معقدة.

العلاقة بين الروتينات الفرعية والخيوط والعمليات

في عالم APISIX، الطلبات البطيئة تتضمن فقط انتظار استجابات المصدر العلوي، وهي عملية تقتصر على الاستماع لأحداث الشبكة دون تكبد تكاليف إضافية لموارد النظام. في الختام، لا تؤثر APISIX على وقت استجابة الطلبات العادية الأخرى بسبب زيادة وقت استجابة بعض الطلبات.

Tags: