خدمات مصغرة

**الخدمات المُصَغَّرة** أو الخدمات الدقيقة (بالإنجليزية: microservices) في هندسة البرمجيات هي نمطٌ معماريٌ يُستخدم في تطوير التطبيقات وينتظِمُ من خلاله التطبيق في مجموعة من الخدمات الدقيقة ذات ترابط المرن فيما ينها . ففي هذا النمط يُقسَّمُ التطبيق الكبير إلى مكونات مستقلة، لكل منها مسؤولياتها الخاصة. ولتلبية طلب مستخدم واحد، يمكن لتطبيق قائم على الخدمات المصغرة استدعاء عدة خدمات مصغرة داخلية لتكوين استجابته. وتُستخدم غالبًا واجهات برمجة تطبيقات رست API) REST) لربط الخدمات المصغرة ببعضها البعض.  ولعل أبرز مثال لهندسة الخدمات المصغرة هو الحاويات، إذ أنها تسمح لك بالتركيز على تطوير الخدمات دون الحاجة إلى التفكير في التبعيات والعلاقات فيما بينها.

تتميز هذه الخدمات بترابطها المرن كما تقدم، وإمكانية نشرها بشكل مستقل، وغالبًا ما يتم تطويرها وتوسيع نطاقها بشكل منفصل، مما يتيح مرونة وسرعة أكبر في إدارة الأنظمة المعقدة. ويرتبط تصميم الخدمات المصغرة ارتباطًا وثيقًا بمبادئ مثل التصميم الموجه بالمجال (domain-driven design)، ولا مركزية البيانات والحوكمة، والمرونة في استخدام تقنيات مختلفة لكل خدمة على حدة لتلبية متطلباتها على أفضل وجه مما يمنح المطورين مرونة لتصميم وتطوير التطبيقات.

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

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

## التاريخ

### أوائل 2000 المفاهيم الأولية
بدأ مفهوم الخدمات المصغرة بالتبلور في أوائل الألفية الثانية، متأثرًا بشكل كبير بالبنية الموجهة للخدمات (SOA).

### 2010-2000 ظهور خدمات الويب
مهَّد توحيد بروتوكولات خدمات الويب، مثل سواب، ولغة وصف خدمات الويب (WSDL)، الطريق أمام قابلية التشغيل البيني بين الأنظمة المختلفة. وفي عام 2005 تقريبًا، ظهر مفهوم خدمات الويب المصغرة.

### 2014 نشأة الخدمات المصغرة
اكتسب مصطلح "الخدمات المصغرة" شهرة واسعة عندما ناقش مارتن فاولر وزملاؤه في شركة ثوت ووركس (ThoughtWorks) هذا المفهوم كطريقة لبناء أنظمة قوية وقابلة للتوسع. وقد نشر مارتن فاولر مقالة تشرح "الخدمات المصغرة" على موقعه الإلكتروني في مارس 2014، وكان لها أثر كبير على فهم الخدمات المصغرة واعتمادها في مجتمع تطوير البرمجيات.

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

### 2013 ظهور الحاويات
أحدث ظهور منصة مفتوحة المصدر لتقنية الحاويات ثورة في نشر الخدمات المصغرة. وفرت الحاويات بيئة خفيفة الوزن ومتسقة، مما سهّل الانتقال السلس بين مرحلتي التطوير والإنتاج.

### 2014 ظهور كوبيرنيتيس
أطلقت شركة جوجل كوبيرنيتيس، وهي منصة مفتوحة المصدر لتنسيق الحاويات. سهّلت كوبيرنيتيس نشر التطبيقات المعبأة في حاويات، وتوسيع نطاقها، وإدارتها، مما عزز استخدام الخدمات المصغرة. في أبريل 2014 أُصدر سبرينج بوت 1.0 ، بهدف تبسيط تطوير الخدمات المصغرة بلغة جافا.

### 2017 انتشار الخدمات المصغرة
تبنّت كبرى شركات التكنولوجيا، بما فيها أمازون وجوجل ومايكروسوفت، الخدمات المصغرة لتعزيز مرونتها. واكتسب هذا النهج اعترافًا أوسع مع ظهور المزيد من شهادات نجاح التجربة.

### 2018-2019 التحديات وأفضل الممارسات
تحوّل الاهتمام إلى معالجة التحديات المرتبطة بالخدمات المصغرة، بما في ذلك إدارة البيانات، والتواصل بين الخدمات، والمراقبة. وبرزت أفضل الممارسات والأنماط، مثل نمط قاطع الدائرة.

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

### 2021-2022 التطور المستمر
استمر تطور بنية الخدمات المصغرة مع التقدم في التقنيات مثل غراف كيو إل لجلب البيانات بكفاءة، وبنى تعتمد على الأحداث باستخدام أدوات مثل أباتشي كافكا.

## المزايا والنقائص

### المزايا

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

#### زيادة المرونة وتسريع طرح المنتجات في السوق
تتولى فرق صغيرة مستقلة إدارة خدمات محددة من البداية إلى النهاية. يختار كل فريق أفضل التقنيات لخدمته ويتوسع بوتيرته الخاصة دون انتظار تنسيق مركزي على مستوى المؤسسة أو دورات إعادة النشر.

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

#### التحكم في التكلفة بفعالية
توفر الشركات المال من خلال إدارة الموارد المُتاحة للتطبيقات بكفاءة، حيث يتم توسيع نطاق الخدمات التي تتطلب سعة إضافية فقط دون غيرها.

#### تكامل ديف أوبس والتسليم المستمر
نظرًا لأن كل خدمة تعمل بشكل مستقل، يمكن لفرق ديف أوبس إضافة مكونات جديدة بسلاسة دون انقطاع الخدمة كلية.

#### المرونة التقنية والابتكار
يمكن لكل خدمة مصغرة الاستفادة من تقنيات مختلفة، بما في ذلك لغات برمجة متعددة، وكذلك الأطر (framework) وقواعد البيانات الأنسب لوظيفتها المحددة. وهكذا لا تُجبر فرق المطورين على استخدام حزمة تقنية واحدة للتطبيق بأكمله.

### عيوب الخدمات المصغرة

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

#### مراعات اعتبارات الأمان
يؤدي التواصل الشبكي بين الخدمات المصغرة إلى زيادة متطلبات الأمان. تتطلب بوابات واجهة برمجة التطبيقات (API) مصادقة وتشفيرًا مناسبين.

#### مراعاة تنسيق الاتصالات
تُضيف استدعاءات الخدمات المختلفة زمن استجابة إضافي للشبكة مقارنةً باستدعاءات الدوال ضمن عملية (processus) واحدة، وتتراكم هذه التأخيرات مع مرور الطلبات عبر خدمات متعددة.  لتفضي في النهاية إلى تأخير بيّن في زمن الاستجابة.

#### إدارة البيانات
يُشكّل قيام كل خدمة مصغّرة بإدارة قاعدة بياناتها الخاصة عبئا إضافيا في إدارة البيانات. يتطلب الحفاظ على الاتساق عند إجراء معاملات تستعمل قواعد بيانات متعددة نماذج محددة، كما يتطلب إعداد التقارير مناهج مختلفة عندما تكون البيانات موزعة بدلاً من من كونها مركزية.

## المراجع

تصنيف:بنية خدمية التوجه
تصنيف:حوسبة