بنية الخدمات المصغّرة — خدمات صغيرة كثيرة، نظام واحد
بنية الخدمات المصغّرة على لوحة تفاعلية: طبقة العميل، وبوابة API، وخدمات تُنشر بشكل مستقل، والرسائل، ومخازن بيانات لكل خدمة، وقابلية الرصد.
الخدمات المصغّرة بنية يُبنى فيها التطبيق من خدمات صغيرة كثيرة تُنشر كل واحدة منها بشكل مستقل وتملك بياناتها الخاصة، ويجري تنسيقها عبر بوابة API والرسائل بدل الحالة المشتركة.
بنية الخدمات المصغّرة — خدمات صغيرة كثيرة، نظام واحد
لوحة FlowJam التفاعلية لهذا الشرح — كل مسار وصف وسهم أعلاه جزء من مخطط QueryChart حقيقي يمكنك فتحه وتعديله.
كيف تقرأ هذا الشرح المرئي
- اقرأ العمود الأيسر من الأعلى إلى الأسفل أولاً: من تطبيقات العميل إلى البوابة إلى الخدمات — ذلك هو مسار الطلب.
- تابع الأسهم الخارجة من كل خدمة: إلى ناقل الرسائل، وإلى قاعدة بياناتها الخاصة، وإلى قابلية الرصد.
- المجموعات على اليمين هي البنية التحتية المشتركة للنظام — الرسائل والبيانات وقابلية الرصد — ولهذا تشير كل خدمة إليها.
مسار الطلب
يبدأ المسار عند «تطبيقات العميل على الويب والهاتف»، و«بوابة API توجّه وتجمّع» هي نقطة الدخول الوحيدة — إذ توجّه كل طلب إلى الخدمة الصحيحة، وتتولّى المصادقة، وكثيراً ما تجمّع الاستجابات القادمة من عدة خدمات. البوابة هي المكوّن الوحيد الذي يراه كل عميل، ولهذا تقع بين طبقة العميل والخدمات.
الخدمات
«خدمة الطلبيات» و«خدمة المستخدمين» و«خدمة المدفوعات» هي وحدات النشر المستقلة. لكل واحدة منها فريقها الخاص وإيقاع إصدارها الخاص. ويصل الشرح المرئي كل خدمة بناقل الرسائل — فالخدمات تتواصل بالأحداث لا بالاستدعاءات المباشرة — وبقاعدة بياناتها الخاصة، لأن ملكية بياناتها هي ما يجعل نشرها بشكل مستقل ممكناً.
البنية التحتية المشتركة
«ناقل الرسائل يفكّ اقتران الخدمات» يتيح لخدمة أن تنشر حدثاً دون أن تعرف من يستهلكه. و«كل خدمة تملك قاعدة بياناتها الخاصة» هي القاعدة التي تمنع الاقتران عبر الحالة المشتركة. و«المقاييس والسجلات والتتبّعات تصبّ في عرض واحد» هي قابلية الرصد التي تجعل نظاماً من خدمات كثيرة قابلاً للتشغيل بعقل سليم — فبدونها يكون العطل غير مرئي عبر الحدود الفاصلة. وهذه المجموعات الثلاث هي ثمن هذه البنية وعائدها في آن.
العلاقات الرئيسية والخلاصات
- كل خدمة قابلة للنشر بشكل مستقل — وهي الخاصية التي يوجد كل ما تبقّى في هذه البنية لحمايتها.
- تتواصل الخدمات عبر ناقل الرسائل وتملك كل واحدة منها قاعدة بياناتها الخاصة؛ والحالة المشتركة هي النمط المضاد.
- بوابة API هي الباب الأمامي الوحيد للنظام؛ ولا تخاطب تطبيقات العميل الخدمات مباشرة أبداً.
- لهذا الاستقلال ثمن يُدفع بقابلية الرصد — فالخدمات الكثيرة لا يمكن إدارتها إلا حين يغطّيها عرض واحد.
- تنسّق الخدمات المصغّرة الحاويات التي يحزمها Docker — والشرحان المرئيان متصلان.
متى تستخدم هذا الشرح المرئي
- شرح سبب وجود الخدمات المصغّرة لفريقك وما هي مقايضاتها فعلياً قبل أن يتبنّاها.
- توثيق حدود الخدمات ومواضيع الرسائل وملكية البيانات في نظام قائم لتأهيل المنضمين الجدد.
- تدقيق الأنماط المضادة: قاعدة بيانات مشتركة أو خدمة تستدعي خدمة أخرى مباشرة هي تسرّب عبر الحد الفاصل.
كيف تعمل
أعد تسمية الخدمات لتطابق نظامك
استبدل الطلبيات والمستخدمين والمدفوعات بخدماتك الفعلية، وأضف ما تغفله الخدمات الثلاث العامة، كل واحدة كمربع خاص بها في مجموعة الخدمات.
سمِّ مواضيع رسائلك
علّق على ناقل الرسائل بالأحداث الحقيقية التي تنشرها خدماتك وتشترك فيها، ليصبح فكّ الاقتران ملموساً لا مجرّد ادّعاء.
ارسم ملكية البيانات
على السهم الواصل من كل خدمة إلى قاعدة بياناتها، دوّن المخزن الفعلي (PostgreSQL، أو ذاكرة مؤقتة، أو فهرس بحث) وما الذي يملكه، للتحقق من أن مبدأ قاعدة بيانات واحدة لكل خدمة ما زال قائماً.
أضف فروع الأعطال والتوسّع
أدرج المسارات الحقيقية — إعادة محاولة خدمة وقاطع الدارة على الناقل، ونسخة متماثلة موسّعة لخدمة مُثقلة — وليكن لكل منها نهاية بحالة صريحة.
الأسئلة الشائعة
ما هي بنية الخدمات المصغّرة؟
هي أسلوب معماري يُبنى فيه التطبيق من خدمات صغيرة كثيرة، كل واحدة مسؤولة عن قدرة عمل واحدة، وتُنشر بشكل مستقل وتملك بياناتها الخاصة. وتتواصل الخدمات عبر الشبكة — عادةً بـHTTP وناقل رسائل — بدل مشاركة الذاكرة أو قاعدة بيانات واحدة. والفائدة هي قابلية النشر المستقل واستقلالية الفرق؛ أما الكلفة فهي تعقيد الشبكة والحاجة إلى قابلية الرصد.
لماذا تملك كل خدمة مصغّرة قاعدة بياناتها الخاصة؟
لأن البيانات المشتركة هي الاقتران الذي يكسر النشر المستقل. فإن كانت خدمتان تقرآن الجدول نفسه وتكتبان فيه، فلن تستطيعا تغيير مخطط بياناتهما ولا التوسّع ولا النشر دون تنسيق بينهما. وملكية مخزن بياناتها الخاص هي ما يتيح لخدمة أن تتطوّر وتتوسّع وفق جدولها هي — وهي القاعدة التي تفرضها مجموعة «كل خدمة تملك قاعدة بياناتها الخاصة» في الشرح المرئي.
ما دور بوابة API في الخدمات المصغّرة؟
البوابة هي نقطة الدخول الوحيدة للنظام. توجّه الطلبات إلى الخدمة الصحيحة، وتتولّى الشواغل العابرة للطبقات مثل المصادقة وتحديد معدّل الطلبات، وتستطيع تجميع الاستجابات القادمة من عدة خدمات في استجابة واحدة. وتخاطب تطبيقات العميل البوابة، لا الخدمات الفردية مباشرة، وهذا ما يُبقي طوبولوجيا الخدمات حرة في التغيّر خلفها.
متى ينبغي ألا تستخدم الخدمات المصغّرة؟
حين يكون النظام صغيراً أو الفريق صغيراً. فالخدمات المصغّرة تقايض التعقيد المعماري — أعطال الشبكة، والمعاملات الموزّعة، وقابلية الرصد — بقابلية النشر المستقل، وهذه المقايضة لا تُثمر إلا حين يكبر الفريق بما يكفي ليصبح النشر المستقل هو القيد الحاكم. ومشكلات فرق كثيرة يحلّها تطبيق أحادي جيّد التقسيم إلى وحدات، وهو موضوع الشرح المرئي للبنية الأحادية.
عدّل هذا الشرح المرئي في QueryChart (FlowJam)
افتح لوحة الخدمات المصغّرة هذه نفسها كمخطط خاص بك، وأعد تسمية الخدمات لتطابق نظامك، وارسم حدودك الفعلية.