في بنية الخدمات المصغرة، قد يتفاعل العميل مع أكثر من خدمة أمامية واحدة. بالنظر إلى هذه الحقيقة، كيف يعرف العميل ما هي نقاط النهاية التي يجب الاتصال بها؟ ماذا يحدث عند تقديم خدمات جديدة، أو إعادة بناء التعليمات البرمجية للخدمات القائمة؟ كيف تتعامل الخدمات مع إنهاء SSL والمصادقة والمخاوف الأخرى؟ يمكن أن تساعد بوابة واجهة برمجة التطبيقات في مواجهة هذه التحديات.
قم بتنزيل ملف Visio لهذه البنية.
ما هي بوابة API؟
بوابة برمجة التطبيقات توجد بين العملاء والخدمات. وهو بمثابة وكيل عكسي، يوجّه الطلبات من العملاء إلى الخدمات. كما قد يؤدي العديد من المهام الشاملة مثل المصادقة وإنهاء SSL وتحديد المعدّل. إذا لم تقم بتوزيع بوابة، يجب على العملاء إرسال الطلبات مباشرةً إلى الخدمات الأمامية. ومع ذلك، هناك بعض المشاكل المحتملة مع إسناد الخدمات مباشرةً للعملاء:
- يمكن أن يؤدي إلى تعليمات العميل البرمجية المعقدة. يجب على العميل تعقب نقاط النهاية المتعددة ومعالجة الأعطال بطريقة مرنة.
- يَخلق اقتران بين العميل والواجهة الخلفية. يحتاج العميل إلى معرفة كيفية تحليل الخدمات الفردية. وهذا يجعل من الصعب الحفاظ على العميل وأيضاً من الصعب إعادة بناء التعليمات البرمجية للخدمات.
- قد تتطلب عملية واحدة استدعاءات إلى خدمات متعددة. يمكن أن يؤدي ذلك إلى رحلات متعددة ذهاباً وإياباً عبر الشبكة بين العميل والخادم، ما يضيف زمن انتقال كبير.
- يجب على كل خدمة مواجهة عامة معالجة المخاوف مثل المصادقة وSSL وتحديد معدّل العميل.
- يجب أن تَعرض الخدمات بروتوكولاً ملائماً للعميل مثل HTTP أو WebSocket. هذا يحد من اختيار بروتوكولات الاتصال.
- الخدمات ذات نقاط النهاية العامة هي سطح هجوم مُحتمل، ويجب أن تكون مُحصّنة.
تساعد البوابة على معالجة هذه المشكلات عن طريق فصل العملاء عن الخدمات. يمكن للبوابات تنفيذ عدد من الدالّات المختلفة وقد لا تحتاج إليها جميعاً. يمكن تجميع الدالّات في أنماط التصميم التالية:
توجيه البوابة. استخدم البوابة كوكيل proxy عكسي لتوجيه الطلبات إلى واحدة أو أكثر من خدمات الواجهة الخلفية، باستخدام توجيه الطبقة 7. توفر البوابة نقطة نهاية واحدة للعملاء، وتساعد على فصل العملاء عن الخدمات.
تجميع البوابة. استخدم البوابة لتجميع عدة طلبات فردية في طلب واحد. ينطبق هذا النمط عندما تتطلب عملية أحادية استدعاءات إلى خدمات خلفية متعددة. يرسل العميل طلب واحد إلى البوابة. تقوم البوابة بإرسال طلبات إلى خدمات الخلفية المختلفة ثم تجميع النتائج وإرسالها إلى العميل. وهذا يساعد على الحد من الدردشة بين العميل والواجهة الخلفية.
إلغاء تحميل البوابة. استخدم البوابة لإلغاء تحميل الوظائف من الخدمات الفردية إلى البوابة، ولا سيما الاهتمامات المشتركة. ويمكن أن يكون من المفيد دمج هذه الدالات في مكان واحد، بدلاً من جعل كل خدمة مسؤولة عن تنفيذها. ينطبق هذا بشكل خاص على الميزات التي تتطلب مهارات متخصصة لتنفيذها بشكل صحيح، مثل المصادقة والتخويل.
فيما يلي بعض الأمثلة على الدالات التي يمكن إلغاء تحميلها إلى البوابة:
- إنهاء SSL
- المصادقة
- قائمة السماح ل IP أو قائمة الحظر
- الحد من معدّل العميل (تقييد)
- التسجيل والمراقبة
- التخزين المؤقت للاستجابة
- جدار حماية تطبيق الويب
- ضغط GZIP
- خدمة المحتوى الثابت
اختيار تقنية البوابة
فيما يلي بعض الخيارات لتنفيذ بوابة API في تطبيقك.
عكس الخادم الوكيل. إن Nginx وHAProxy هما خادما بروكسي عكسيّان شائعان يدعمان ميزات مثل موازنة التحميل وSSL وتوجيه الطبقة 7. كلاهما مجاني، مفتوح المصدر، مع إصدارات مدفوعة توفر ميزات إضافية وخيارات دعم. Nginx وHAProxy كلاهما منتجان ناضجان بهما مجموعات ميزات غنية وأداء عالٍ. يمكنك توسيعها باستخدام وحدات تابعة لجهات خارجية أو عن طريق كتابة نصوص مخصصة في Lua. يدعم Nginx أيضاً وحدة البرمجة النصية المستندة إلى JavaScript والمشار إليها باسم NGINX JavaScript. تم تسمية هذه الوحدة رسمياً بـ nginScript.
وحدة تحكم دخول شبكة الخدمة. إذا كنت تستخدم شبكة خدمة مثل Linkerd أو Istio، ففكر في الميزات التي توفرها وحدة تحكم الدخول لمجموعة الخدمة هذه. على سبيل المثال، تدعم وحدة التحكم Istio ingress توجيه الطبقة 7 وإعادة توجيه HTTP وإعادة المحاولة والميزات الأخرى.
بوابة تطبيق Azure . تعد Application Gateway خدمة موازنة تحميل مُدارة يمكنها تنفيذ توجيه الطبقة 7 وإنهاء SSL. كما يوفر جدار حماية لتطبيق الويب (WAF).
Azure Front Door هي شبكة تسليم المحتوى السحابية الحديثة (CDN) من Microsoft التي توفر وصولا سريعا وموثوقا وآمنا بين المستخدمين ومحتوى الويب الثابت والديناميكي لتطبيقاتك في جميع أنحاء العالم. يقدم Azure Front Door المحتوى الخاص بك باستخدام شبكة الحافة العالمية من Microsoft مع مئات من نقاط الحضور العالمية والمحلية (PoPs) الموزعة في جميع أنحاء العالم بالقرب من كل من المستخدمين النهائيين للمؤسسة والمستهلك.
إدارة Azure APIM. إدارة APIM هي حل متكامل لنشر واجهات برمجة التطبيقات للعملاء الخارجيين والداخليين. يوفر ميزات مفيدة لإدارة واجهة برمجة تطبيقات عامة، بما في ذلك تحديد المعدل وقيود IP والمصادقة باستخدام معرف Microsoft Entra أو موفري الهوية الآخرين. لا تؤدي إدارة واجهة برمجة التطبيقات APIM أي موازنة تحميل، لذا يجب استخدامها مع موازن تحميل مثل بوابة التطبيق أو وكيل عكسي. للحصول على معلومات بشأن استخدام إدارة واجهة برمجة التطبيقات APIM مع بوابة التطبيق، راجع تكامل إدارة واجهة برمجة التطبيقات في شبكة VNet داخلية مع بوابة التطبيق.
عند اختيار تقنية البوابة، ضع في اعتبارك ما يلي:
الميزات. تدعم الخيارات المذكورة أعلاه توجيه طبقة 7، لكن دعم الميزات الأخرى سيختلف. بناءً على الميزات التي تحتاجها، قد تقوم بتوزيع أكثر من بوابة واحدة.
التوزيع. تعد بوابة تطبيق Azure وإدارة واجهة برمجة التطبيقات APIM خدمات مُدارة. عادةً ما يتم تشغيل Nginx وHAProxy في حاويات داخل نظام المجموعة، ولكن يمكن أيضاً توزيعهما في أجهزة ظاهرية مخصصة خارج المجموعة. يؤدي هذا إلى عزل البوابة عن باقي حمل العمل، ولكن يؤدي إلى تحميل إدارة أعلى.
الإدارة. عند تحديث الخدمات أو إضافة خدمات جديدة، قد تحتاج قواعد توجيه البوابة إلى تحديث. ضع في اعتبارك كيف ستتم إدارة هذه العملية. تنطبق اعتبارات مماثلة على إدارة شهادات SSL وقوائم السماح ل IP والجوانب الأخرى للتكوين.
توزيع Nginx أو HAProxy على Kubernetes
يمكنك توزيع Nginx أو HAProxy على Kubernetes باعتباره مجموعة النسخ المتماثلة أو DaemonSet التي تحدد صورة حاوية Nginx أو HAProxy. استخدم ConfigMap لتخزين ملف التكوين للوكيل، وقم بتحميل ConfigMap كوحدة تخزين. أنشئ خدمة من النوع LoadBalancer لعرض البوابة من خلال Azure Load Balancer.
البديل هو إنشاء وحدة تحكم الدخول. إن Ingress Controller هو مورد Kubernetes يوزع موازن تحميل أو خادم وكيل عكسي. توجد العديد من التطبيقات، بما في ذلك Nginx وHAProxy. يحدد مورد منفصل يسمى Ingress إعدادات لوحدة التحكم في الدخول، مثل قاعدة التحويل وشهادات TLS. بهذه الطريقة، لن تحتاج إلى إدارة ملفات التكوين المعقدة الخاصة بتقنية خادم وكيل معين.
البوابة هي عنق زجاجة محتمل أو نقطة فشل واحدة في النظام، لذلك قم دائماً بتوزيع نسختين متماثلتين على الأقل من أجل قابلية الوصول العالية. قد تحتاج إلى توسيع نطاق النسخ المتماثلة بشكل أكبر، اعتماداً على الحمل.
ضع في اعتبارك أيضاً تشغيل البوابة على مجموعة مخصصة من العقد في المجموعة. تشمل مزايا هذا النهج ما يلي:
العزل. تذهب جميع حركات المرور الواردة إلى مجموعة ثابتة من العقد، والتي يمكن عزلها عن خدمات الواجهة الخلفية.
التكوين المستقر. إذا تم تكوين البوابة بشكل خاطئ، فقد يصبح التطبيق بأكمله غير متاح.
الأداء. قد ترغب في استخدام تكوين جهاز ظاهري معين للبوابة لأسباب تتعلق بالأداء.
الخطوات التالية
لقد نظرت المقالات السابقة في الواجهات بين الخدمات المصغرة أو بين الخدمات المصغرة وتطبيقات العميل. حسب التصميم، تتعامل هذه الواجهات مع كل خدمة كمربع مبهم. على وجه الخصوص، يجب ألا تعرض الخدمات المصغرة مطلقاً تفاصيل التنفيذ بشأن كيفية إدارتها للبيانات. هذا له آثار على تكامل البيانات واتساق البيانات، سيتم استكشافها في المقالة التالية.