1. المقدمة والنظرة العامة
يستمد هذا المحتوى من حلقة من بودكاست "Software Engineering Radio" (الحلقة 213)، والتي تضمنت نقاشًا بين يوهانس ثونز وجيمس لويس حول موضوع الخدمات المصغرة. يستكشف الحوار تعريف هذا النمط المعماري، ودوافع اعتماده، والاعتبارات العملية المحيطة به، والذي كان يكتسب زخمًا كبيرًا في أوائل عام 2015 كاستجابة لتحديات صيانة التطبيقات الأحادية الكبيرة.
2. تعريف الخدمات المصغرة
تُصوَّر الخدمة المصغرة على أنها مكون تطبيق صغير ومركّز.
2.1 الخصائص الأساسية
وفقًا للنقاش، تمتلك الخدمة المصغرة عدة سمات رئيسية:
- النشر المستقل: يمكن نشرها دون الحاجة إلى إجراء تغييرات على الخدمات الأخرى.
- التوسع المستقل: يمكن توسيعها أفقياً أو عمودياً بناءً على حملها المحدد.
- الاختبار المستقل: يمكن التحقق منها بمعزل عن غيرها.
- مسؤولية واحدة: لديها سبب رئيسي واحد للتغيير أو الاستبدال. تؤدي مهمة واحدة متماسكة ويسهل فهمها.
2.2 أمثلة على المسؤولية الواحدة
يمكن أن يكون "الشيء الواحد" الذي تقوم به الخدمة المصغرة وظيفيًا أو متعدد الوظائف (غير وظيفي):
- وظيفي: خدمة مورد مجال محدد (مثل خدمة المستخدم، خدمة المقال، خدمة حساب المخاطر في التأمين).
- متعدد الوظائف: معالج قوائم انتظار يقرأ رسالة، يطبق منطقًا تجاريًا، ويمررها. مسؤولية عن متطلب غير وظيفي محدد مثل التخزين المؤقت أو التسجيل.
3. صعود الخدمات المصغرة
3.1 دوافع الانتشار
يُعزى انتشار الخدمات المصغرة إلى نقطة ألم صناعية واسعة الانتشار: التطبيق الأحادي الذي لا يمكن إدارته. تواجه المؤسسات تطبيقات نمت على مدى 5-10 سنوات، وأصبحت صعبة التعديل أو النشر كخدمة (SaaS) أو التوسع الفعال في السحابة.
3.2 معالجة الديون التقنية
ظهرت الخدمات المصغرة كحل لتقسيم هذه التطبيقات الأحادية إلى مكونات أصغر متعاونة تعمل خارج العملية. يسمح هذا النهج، الذي أظهرته شركات مثل نيتفليكس على نطاق واسع، بالصيانة والتوسع والاستبدال المستقل. الدافع الأساسي هو الحاجة إلى تقديم البرمجيات بشكل أسرع والاستفادة من ممارسات مثل التسليم المستمر، التي تعيقها البنى الأحادية.
4. أنماط التبني والتنفيذ
4.1 المشاريع الجديدة مقابل القائمة
سؤال رئيسي هو ما إذا كان سيتم بدء مشروع جديد بالخدمات المصغرة (مشروع أخضر) أو إعادة هيكلة تطبيق أحادي قائم إليها (مشروع بني). يلاحظ النقاش أنه تجريبيًا، تبدأ معظم المؤسسات بتطبيق أحادي ثم تعيد الهيكلة لاحقًا، وتواجه تحدي تحديد السياقات المحدودة والفواصل داخل قاعدة الكود الحالية.
4.2 التعقيد التشغيلي
يذكر مقتطف البودكاست أن قيود المساحة منعت مناقشة كاملة للتعقيد التشغيلي وتأثيره على DevOps. وهذا يعني أنه بينما تحل الخدمات المصغرة مشاكل التطوير والقابلية للتوسع، فإنها تقدم تحديات جديدة في المراقبة، وتنسيق النشر، وموثوقية الشبكة.
5. الرؤى والتحليل الرئيسية
الرؤية الأساسية
الخدمات المصغرة ليست تقنية سحرية؛ فهي استجابة تنظيمية واقتصادية لاختناق التطوير الأحادي. القيمة المقترحة الحقيقية، كما أشار إليه مثال نيتفليكس، هي تمكين تيارات قيمة مستقلة ومتوازية للتسليم. تستهدف هذه البنية مباشرة تكاليف التنسيق واحتكاك النشر التي تعاني منها الفرق الكبيرة العاملة على قاعدة كود واحدة، وهي مشكلة صاغها ميلفين كونواي بقوله: "المنظمات التي تصمم الأنظمة... مقيدة بإنتاج تصاميم هي نسخ من هياكل الاتصال في هذه المنظمات." تحاول الخدمات المصغرة عكس هذا من خلال تصميم أنظمة تفرض هياكل اتصال مرغوبة.
التدفق المنطقي
يتبع السرد سلسلة سببية مقنعة: (1) تتراكم الديون التقنية في التطبيقات الأحادية وتصبح عاجزة عن التغيير. (2) تطلب الأعمال قابلية التوسع السحابي والتسليم المستمر. (3) البنية الأحادية غير متوافقة جوهريًا مع هذه الأهداف بسبب اقترانها. (4) الحل هو تفكيك التطبيق الأحادي على طول السياقات المحدودة، وإنشاء وحدات قابلة للنشر بشكل مستقل. هذا المنطق سليم ولكنه يتجاهل التعقيد الهائل الوسيط - "كيفية" التفكيك.
نقاط القوة والضعف
نقاط القوة: التركيز على قابلية النشر المستقلة كخاصية رئيسية هو دقيق تمامًا. هذا هو الرافعة التي تفتح استقلالية الفريق ودورات الإصدار الأسرع. الارتباط بـ قانون كونواي وCQRS (المذكور كمواضيع محذوفة) يظهر وعيًا بأنماط اجتماعية تقنية أعمق قيد التشغيل.
نقاط الضعف: المنظور لعام 2015 متفائل بشكل ملحوظ بشأن سهولة تعريف "المسؤولية الواحدة". كشفت الخبرة الصناعية اللاحقة أن هذا هو الجزء الأصعب - لعنة حدود الخدمة غير المحددة جيدًا التي تؤدي إلى تطبيقات أحادية موزعة. كما أن النص يقلل بشكل خطير من العبء التشغيلي. كما أوضح مقال فاولر الأساسي لاحقًا، فإنك تستبدل تعقيد التطوير بتعقيد العمليات. ذكر Docker كـ "قطعة شائعة" هو لقطة تاريخية؛ كان نظام الحاويات هو الممكّن التشغيلي المفقود الذي جعل الخدمات المصغرة قابلة للتطبيق عمليًا على نطاق واسع.
رؤى قابلة للتنفيذ
للقادة: لا تبدأ بالخدمات المصغرة لأنها موضة. ابدأ بقياس وقت التوصيل للتغييرات ووتيرة النشر. إذا كانت ضعيفة بسبب تنسيق قاعدة الكود، ففكر في الخدمات المصغرة. للمهندسين المعماريين: أداة التصميم الأساسية ليست قائمة مراجعة تقنية بل خريطة سياق التصميم الموجه للمجال (DDD). حدد الحدود بناءً على القدرات التجارية، وليس الطبقات التقنية. للفرق: استثمر في هندسة المنصة مقدمًا - النشر الآلي، اكتشاف الخدمة، والقابلية للمراقبة ليست أفكارًا لاحقة؛ إنها الأساس. المسار المقترح - إعادة الهيكلة من تطبيق أحادي - لا يزال الأكثر حكمة. استخدم نمط التين الخانق لاستبدال أجزاء من التطبيق الأحادي بالخدمات تدريجيًا، حيث يدير هذا المخاطر ويسمح بالتعلم.
6. الإطار التقني والنماذج الرياضية
بينما البودكاست حواري، يمكن صياغة المبادئ الأساسية. نموذج رئيسي هو العلاقة بين حجم الفريق (N)، مسارات الاتصال، والاقتران المعماري.
في بنية أحادية مع N فريق، تتسع مسارات الاتصال المحتملة مع $O(N^2)$، حيث يمكن أن تؤثر التغييرات في وحدة واحدة على العديد من الوحدات الأخرى. وهذا يخلق عبء تنسيق. تهدف الخدمات المصغرة إلى تقليل هذا من خلال فرض سياقات محدودة وواجهات برمجة تطبيقات (APIs). الهدف هو جعل تكلفة الاتصال بين الخدمات، $C_{comm}$، مرتفعة بشكل صريح عبر مكالمات الشبكة، وبالتالي تشجيع النمطية القوية داخل الخدمة حيث تكون تكلفة التغيير، $C_{internal}$، منخفضة.
قد يكون نموذج مبسط لاحتمالية انتشار التغيير ($P_{prop}$):
$P_{prop} \approx \frac{C_{comm}}{C_{comm} + C_{internal}}$
حيث يقلل تصميم الخدمات المصغرة الجيد من $P_{prop}$ للتغييرات غير المرتبطة عن طريق جعل $C_{comm}$ (زمن انتقال الشبكة، إصدار واجهة برمجة التطبيقات) العامل المهيمن للتغييرات عبر الحدود.
7. النتائج التجريبية ودراسات الحالة
يستشهد البودكاست بنيتفليكس كدراسة حالة أساسية. بحلول عام 2015، قامت نيتفليكس بتفكيك بنيتها الخلفية الأحادية إلى مئات الخدمات المصغرة، مما مكّن من:
- التوسع المستقل: يمكن لخدمات مثل توصية الأفلام أو الفوترة التوسع بشكل مستقل خلال أوقات الذروة.
- الابتكار السريع: يمكن للفرق نشر خدماتها عدة مرات في اليوم دون تنسيق كامل للمكدس.
- تعدد التقنيات: يمكن كتابة خدمات مختلفة باللغة الأنسب لمهمتها (مثل Java، Node.js).
وصف الرسم البياني (افتراضي): رسم بياني شريطي يقارن تطبيقًا أحاديًا بهندسة خدمات مصغرة على محورين: (1) وتيرة النشر (نشر/يوم): يظهر التطبيق الأحادي شريطًا منخفضًا (مثل 0.1)، بينما تظهر الخدمات المصغرة شريطًا مرتفعًا (مثل 50+). (2) متوسط وقت الاسترداد (MTTR) من فشل: يظهر التطبيق الأحادي شريطًا مرتفعًا (مثل 4 ساعات)، بينما تظهر الخدمات المصغرة شريطًا أقل (مثل 30 دقيقة)، حيث يمكن عزل الأعطال لخدمات محددة.
ربطت الدراسات اللاحقة، مثل تلك المشار إليها في تقارير حالة DevOps، إحصائيًا بين البنى الموجهة للخدمات ذات الاقتران الضعيف وأداء تسليم برمجيات أعلى.
8. إطار التحليل: مثال عملي
السيناريو: تطبيق أحادي للتجارة الإلكترونية يعاني من التحديثات. تتطلب تغييرات ميزة "الدفع" اختبارًا ارتداديًا كاملاً وتتعارض مع تحديثات "كتالوج المنتجات".
تطبيق الإطار:
- تحديد السياقات المحدودة: باستخدام التصميم الموجه للمجال، حدد المجالات الأساسية: الطلبات، الكتالوج، المخزون، إدارة المستخدمين، الدفع.
- تحديد حدود الخدمة: أنشئ خدمة مصغرة لكل سياق. تمتلك خدمة الطلب منطق الدفع وبيانات الطلب.
- إنشاء العقود: حدد واجهات برمجة تطبيقات واضحة. ستستدعي خدمة الطلب واجهة برمجة تطبيقات خدمة الدفع
processPayment(orderId, amount)وواجهة برمجة تطبيقات خدمة المخزونreserveStock(itemId, quantity). - ملكية البيانات: تمتلك كل خدمة قاعدة بياناتها الخاصة. لدى خدمة الطلب جدول "الطلبات" الخاص بها؛ لا تستعلم مباشرة عن قاعدة بيانات المخزون.
- النشر والقابلية للمراقبة: يتم حاوية كل خدمة، ونشرها بشكل مستقل، ونشر المقاييس (زمن الانتقال، معدل الخطأ) إلى لوحة تحكم مركزية.
النتيجة: يمكن لفريق الدفع الآن نشر تحديثات لخدمة الطلب دون إشراك فرق الكتالوج أو المخزون، مما يقلل بشكل كبير من عبء التنسيق ويزيد من وتيرة النشر.
9. التطبيقات المستقبلية واتجاهات البحث
يتطور مجال الخدمات المصغرة بعد منظور عام 2015:
- شبكات الخدمات: ظهرت تقنيات مثل Istio و Linkerd للتعامل مع الاهتمامات العابرة (الأمان، القابلية للمراقبة، إدارة حركة المرور) في طبقة البنية التحتية، مما يقلل العبء البرمجي على الخدمات الفردية.
- الحوسبة عديمة الخادم و FaaS: تمثل الوظائف كخدمة (مثل AWS Lambda) شكلاً متطرفًا من الخدمات المصغرة، حيث تدفع التعقيد التشغيلي بالكامل إلى مزود السحابة وتمكن من توسيع أكثر دقة.
- تكامل الذكاء الاصطناعي/التعلم الآلي: أصبحت الخدمات المصغرة النمط الفعلي لنشر نماذج التعلم الآلي كخدمات تنبؤ مستقلة، مما يسمح بالاختبار A/B والتكرار السريع للخوارزميات.
- الحوسبة الطرفية: نشر خدمات مصغرة خفيفة الوزن على الأجهزة الطرفية للمعالجة منخفضة الكمون في سيناريوهات إنترنت الأشياء والتحليلات في الوقت الفعلي.
- محور البحث: هناك حاجة لأبحاث مستقبلية في أدوات التحلل الآلي للخدمات، التنبؤ الذكي بالأعطال في الأنظمة الموزعة، والتحقق الرسمي من التفاعلات في رقصات الخدمات.
10. المراجع
- Lewis, J., & Fowler, M. (2014). Microservices. MartinFowler.com. تم الاسترجاع من https://martinfowler.com/articles/microservices.html
- Newman, S. (2015). Building Microservices. O'Reilly Media.
- Forsgren, N., Humble, J., & Kim, G. (2018). Accelerate: The Science of Lean Software and DevOps. IT Revolution Press.
- Conway, M. E. (1968). How Do Committees Invent? Datamation, 14(5), 28-31.
- Google Cloud. (2019). The 2019 Accelerate State of DevOps Report. DORA.
- Netflix Technology Blog. (Various). https://netflixtechblog.com/