كسر الوحدات المتراصة إلى خدمات يمكن التحكم فيها.
تقوم بنية الخدمات المصغرة ببناء التطبيق كمجموعة من الخدمات المترابطة بشكل غير محكم والقابلة للنشر بشكل مستقل. تمتلك كل خدمة بياناتها وتكشف عن واجهات برمجة التطبيقات للاتصال. وفقًا لاستطلاع OReilly لعام 2025، اعتمدت 72% من المؤسسات الخدمات الصغيرة في الإنتاج، حيث أبلغت المؤسسات التي تدير أكثر من 50 خدمة عن دورات نشر أسرع بنسبة 40%. يمثل التحول من الوحدات المتراصة إلى الخدمات الصغيرة أحد أهم التغييرات المعمارية في تطوير البرمجيات الحديثة.
في x13apps، نقوم بتصميم وتنفيذ بنيات الخدمات الصغيرة التي تتناسب مع نمو الأعمال. وهنا ما تعلمناه.
متى تختار الخدمات الصغيرة بدلاً من الوحدات المتراصة
تتفوق الخدمات الصغيرة عندما يحتوي تطبيقك على مجالات عمل متميزة، أو فرق تطوير متعددة، أو متطلبات مختلفة لقابلية التوسع لميزات مختلفة. قد يكون المونوليث كافيًا للفرق الصغيرة ومنتجات المرحلة المبكرة. ابدأ بوحدة متراصة معيارية واستخرج الخدمات الصغيرة حسب الحاجة. يضيف التحلل المبكر تعقيدًا دون فوائد مقابلة.
تشمل المرشحين الجيدين للخدمات الصغيرة منصات التجارة الإلكترونية (كتالوج منفصل، عربة التسوق، خدمات الدفع)، وتطبيقات SaaS (فواتير منفصلة، وإدارة المستخدم، والتحليلات)، ومنصات الوسائط (إدارة محتوى منفصلة، والتوصية، وخدمات البث).
خدمات التصميم حول قدرات الأعمال
يجب أن تمتلك كل خدمة صغيرة قدرة تجارية محددة. تحديد حدود الخدمة باستخدام مبادئ التصميم المستند إلى المجال (DDD). تحديد السياقات المحدودة وخدمات التصميم التي تتوافق مع وظائف العمل. تتواصل الخدمات من خلال واجهات برمجة التطبيقات (APIs) المحددة جيدًا، عادةً ما تكون REST أو gRPC أو المراسلة المستندة إلى الأحداث. ينبغي إصدار عقود الخدمة للسماح بالتطور المستقل.
على سبيل المثال، تقوم خدمة إدارة الطلبات بمعالجة إنشاء الطلب وتتبع الحالة والمحفوظات. لا يتعامل مع معالجة الدفع أو إدارة المخزون. تحتوي كل خدمة على قاعدة بيانات خاصة بها، مما يمنع الاقتران الوثيق من خلال مخازن البيانات المشتركة.
تنفيذ أنماط الاتصال
تتواصل الخدمات بشكل متزامن من خلال واجهات برمجة تطبيقات REST أو gRPC، أو بشكل غير متزامن من خلال قوائم انتظار الرسائل (RabbitMQ، وApache Kafka، وAWS SQS). تعد المكالمات المتزامنة أبسط ولكنها تؤدي إلى حدوث اقتران محكم وفشل متتالي. يعمل الاتصال غير المتزامن على تحسين المرونة ولكنه يزيد من التعقيد. استخدم بوابات API لتوجيه الطلبات والتعامل مع المصادقة وتنفيذ تحديد المعدل. تنفيذ قواطع الدائرة (Hystrix، Resilience4j) لمنع الأعطال المتتالية. استخدم اكتشاف الخدمة (Consul، Eureka، Kubernetes DNS) لموقع الخدمة الديناميكي.
تعمل البنى المبنية على الأحداث والتي تستخدم Kafka على تمكين معالجة البيانات في الوقت الفعلي وأنماط مصادر الأحداث. تلتقط الأحداث تغييرات الحالة ويمكن أن تؤدي إلى تشغيل العديد من الخدمات النهائية.
إدارة تناسق البيانات عبر الخدمات
تعد إدارة البيانات الموزعة أصعب جزء من الخدمات الصغيرة. تمتلك كل خدمة قاعدة بياناتها، مما يجعل معاملات ACID التقليدية مستحيلة عبر الخدمات. استخدم نمط Saga للمعاملات الموزعة. تقوم Sagas بتقسيم المعاملات إلى سلسلة من المعاملات المحلية مع إجراءات تعويضية للتراجع. تنفيذ مصادر الأحداث للحفاظ على مسار التدقيق لجميع التغييرات. استخدم نمط "علبة الصادر" لضمان تسليم الرسائل بشكل موثوق دون المعاملات الموزعة.
نشر ومراقبة الخدمات المصغرة
تعتبر الحاوية (Docker) والتنسيق (Kubernetes) معيارًا قياسيًا لنشر الخدمات الصغيرة. تعمل كل خدمة في حاويتها الخاصة، مما يسمح بالتوسع والنشر بشكل مستقل. تنفيذ الفحوصات الصحية، وتحقيقات الاستعداد، وتحقيقات الحيوية لكل خدمة. استخدم التسجيل المركزي (ELK Stack، Loki) والتتبع الموزع (Jaeger، Zipkin) لتصحيح المشكلات عبر الخدمات. في x13apps، نقوم ببناء بنيات الخدمات الصغيرة التي تجمع بين قابلية التوسع والبساطة التشغيلية. للمزيد، اقرأ موقعنادليل تحسين البنية التحتية السحابية.