بوابة API واكتشاف الخدمة: تكامل سلس للخدمات المصغرة

February 7, 2024

Technology

في العصر الرقمي، أصبحت واجهات برمجة التطبيقات (APIs) حجر الزاوية في التواصل بين الأنظمة والخدمات المختلفة.

مع انتشار بنية الخدمات المصغرة (microservices)، تزداد أهمية بوابات API واكتشاف الخدمات. تعمل بوابة API كمدخل لبنية الخدمات المصغرة، حيث تكون مسؤولة عن معالجة جميع الطلبات الخارجية وتنسيق الاتصال بين الخدمات الداخلية؛ بينما يضمن اكتشاف الخدمات أن النظام يمكنه العثور على مثيلات الخدمات الصحيحة والاتصال بها بشكل ديناميكي.

معًا، يبنيان نظامًا موزعًا فعالًا ومرنًا وقابلًا للتوسع. يتعمق هذا المقال في الروابط بين بوابات API واكتشاف الخدمات، ودورهما الحاسم في الأنظمة الموزعة الحديثة.

بوابات API واكتشاف الخدمات

كمدخل لبنية الخدمات المصغرة، تعالج بوابة API جميع الطلبات الخارجية وتسهل الاتصال مع الخدمات الداخلية. تشمل وظائفها الرئيسية:

  • توجيه الطلبات وإعادة توجيهها: توجيه الطلبات إلى الخدمات المقابلة بناءً على خصائص الطلب.
  • التحكم في الوصول والمصادقة الأمنية: التأكد من أن المستخدمين أو الأنظمة المصرح لهم فقط يمكنهم الوصول إلى API.
  • موازنة الحمل والتخزين المؤقت: تحسين أداء الخدمة من خلال توزيع الطلبات بشكل متساوٍ على مثيلات الخدمات المختلفة وتوفير التخزين المؤقت لتقليل الطلبات إلى الخدمات الخلفية.
  • التسجيل والتحليل: جمع وتحليل بيانات استخدام API لدعم اتخاذ القرارات التجارية.

اكتشاف الخدمة هو آلية تُستخدم للعثور تلقائيًا على مثيلات الخدمات المتاحة في نظام موزع. عندما يكون عدد الخدمات كبيرًا ويتغير بشكل ديناميكي، يصبح اكتشاف الخدمة أمرًا بالغ الأهمية. مبادئ تسجيل الخدمة واكتشافها هي كما يلي:

  • تسجيل الخدمة: عند بدء تشغيل خدمة، تقوم بتسجيل معلوماتها (مثل عنوان IP ورقم المنفذ، إلخ) في سجل الخدمات.
  • اكتشاف الخدمة: عندما تحتاج خدمات أخرى إلى استدعاء هذه الخدمة، تقوم بالاستعلام في سجل الخدمات للعثور على مثيلات الخدمات المتاحة واختيار واحدة للاتصال.

الروابط بين بوابات API واكتشاف الخدمات

تعمل بوابة API كـ"حارس البوابة" الذي يعالج جميع الطلبات الخارجية ويوجهها بذكاء إلى مثيلات الخدمات الصحيحة. تعتمد بوابات API واكتشاف الخدمات على بعضهما البعض في بنية الخدمات المصغرة، مما يوفر الاستقرار والقابلية للتوسع.

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

من خلال آلية اكتشاف الخدمات، يمكن لبوابة API الاتصال ديناميكيًا بسجل الخدمات في الوقت الفعلي، والحصول تلقائيًا على أحدث عناوين مثيلات جميع الخدمات العلوية، وضمان توجيه الطلبات بدقة إلى الخدمات الجديدة.

في الوقت نفسه، يمكن لآلية اكتشاف الخدمات إخطار بوابة API بظروف الأعطال بشكل فوري، مما يتجنب بشكل فعال توجيه الطلبات إلى الخدمات غير المتاحة. من خلال تكوين عنوان سجل الخدمات وأسماء الخدمات، حققت بوابة API تقدمًا كبيرًا في إعادة استخدام التكوينات عبر البيئات، مما يقلل من عبء التكوين ويعيد استخدام التكوينات ويزيد من دقتها.

اكتشاف الخدمة

التطبيق العملي لدمج بوابة API مع اكتشاف خدمة Kubernetes

لنفترض أن لدينا نظامًا يعتمد على بنية الخدمات المصغرة باستخدام Kubernetes، حيث يتم نشر خدمات متعددة مثل خدمات المستخدمين وخدمات الطلبات وخدمات الدفع، إلخ. لكل خدمة عدة نسخ (Pods)، وتتغير عناوين IP وأرقام المنافذ لهذه النسخ بشكل ديناميكي مع إنشاء الحاويات وتدميرها.

في هذا السيناريو، نريد استخدام بوابة API لمعالجة الطلبات الخارجية وتوجيهها بذكاء إلى خدمات Kubernetes الصحيحة. في الوقت نفسه، نريد الاستفادة من آلية اكتشاف الخدمات في Kubernetes لاكتشاف مثيلات الخدمات وإدارتها بشكل ديناميكي.

الخطوة 1: نشر الخدمة وتسجيلها

في Kubernetes، نستخدم Deployments أو StatefulSets لنشر الخدمات وإنشاء Services المقابلة كتجريدات للخدمات. توفر Kubernetes Services موازنة حمل تلقائية لـ Pods الخلفية وتقوم بتعيين أسماء الخدمات إلى عناوين IP وأرقام منافذ مستقرة داخل الكتلة.

عند إنشاء أو تدمير Pods، يقوم Service Controller في Kubernetes بتحديث كائنات Endpoint للخدمات تلقائيًا، والتي تحتوي على عناوين IP وأرقام المنافذ لجميع Pods ذات الصلة. يتم تخزين كائنات Endpoint هذه في خادم API الخاص بـ Kubernetes للاستعلام من قبل المكونات الأخرى.

الخطوة 2: نشر بوابة API وتكوينها

على سبيل المثال، باستخدام API7 Enterprise، نقوم بالاتصال بعنوان سجل خدمات Kubernetes في مجموعة البوابة. عندما نقوم بنشر خدمة إلى مجموعة البوابة، بدلاً من إدخال عنوان المثيل العلوي يدويًا، نختار سجل Kubernetes هذا ونحدد مساحة الاسم والخدمة المقابلة داخله. تقوم API7 Enterprise تلقائيًا باسترداد معلومات Endpoint للخدمة المقابلة من خادم API الخاص بـ Kubernetes كعنوان الخدمة العلوية.

الخطوة 3: معالجة الطلبات

عندما تتلقى بوابة API طلبًا خارجيًا، تقوم بتحديد الخدمة التي يجب توجيه الطلب إليها بناءً على قواعد التوجيه المكونة. ثم تقوم بالاستعلام في خادم API الخاص بـ Kubernetes للحصول على أحدث معلومات الخدمة العلوية. تختار بوابة API مثيلًا من هذه المعلومات (بناءً على استراتيجيات موازنة حمل مختلفة) وتقوم بإعادة توجيه الطلب إلى هذا المثيل. نظرًا لأن معلومات Endpoint يتم تحديثها ديناميكيًا، يمكن لبوابة API التعامل تلقائيًا مع إنشاء وتدمير وانتقال Pods، مما يضمن توجيه الطلبات دائمًا إلى الخدمات العلوية المتاحة.

الخطوة 4: اكتشاف الخدمة والتحديثات

في Kubernetes، يتم اكتشاف الخدمة تلقائيًا. عندما تتغير حالة Pods (مثل الإنشاء أو التدمير أو الانتقال)، يقوم Service Controller في Kubernetes بتحديث كائنات Endpoint للخدمات المقابلة تلقائيًا.

تقوم بوابة API بانتظام باسترداد أحدث معلومات Endpoint من خادم API الخاص بـ Kubernetes وتحديث الخدمة العلوية بناءً على هذه المعلومات. هذا يمكّن بوابة API من إدراك تغييرات حالة الخدمة على الفور وتعديل قواعد التوجيه تلقائيًا لضمان توجيه الطلبات بشكل صحيح إلى مثيلات الخدمات المتاحة.

الخلاصة

من خلال دمج بوابة API مع اكتشاف خدمة Kubernetes، يمكن لنظامنا تحقيق تسجيل الخدمة واكتشافها بشكل ديناميكي، وتوجيه الطلبات بذكاء، وموازنة الحمل. هذا النهج يبسط تكوين النظام وإدارته، ويعزز موثوقية النظام وقابليته للتوسع، ويستفيد بشكل كامل من الميزات القوية التي توفرها Kubernetes، مما يجعل نشر وتشغيل بنية الخدمات المصغرة أسهل وأكثر كفاءة.

Tags: