"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أهم أنماط تصميم خدمات icroservices التي يجب أن تعرفها

أهم أنماط تصميم خدمات icroservices التي يجب أن تعرفها

تم النشر بتاريخ 2024-11-01
تصفح:847

Top icroservices Design Patterns You Should Know

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

يمكن أن يساعد اعتماد أنماط تصميم الخدمات الصغيرة المعروفة في التخفيف من هذه المشكلات وتحسين موثوقية وفعالية نظامك بشكل كبير. تم تناول أهم 7 أنماط لتصميم الخدمات الصغيرة والتي يجب على كل مطور برامج أن يكون على دراية بها في هذه المقالة.

1. نمط بوابة واجهة برمجة التطبيقات

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

فوائد:

✓ تحكم مركزي في التعامل مع الطلب/الاستجابة.

✓ تبسيط التفاعلات من جانب العميل عن طريق تجريد تعقيد الخدمات الصغيرة الداخلية.

✓ يتيح تنفيذًا أسهل للأمان والتخزين المؤقت والتقييد.

مثال:

استخدام Express.js في Node.js لإنشاء بوابة API أساسية:

import express from 'express';
import proxy from 'express-http-proxy';

const app = express();

// Forward requests to microservice A
app.use('/serviceA', proxy('http://serviceA-url'));

// Forward requests to microservice B
app.use('/serviceB', proxy('http://serviceB-url'));

app.listen(3000, () => {
  console.log('API Gateway running on port 3000');
});

2. نمط قواطع الدائرة

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

فوائد:

✓ يحمي من الفشل على مستوى النظام.

✓ يوفر استجابات احتياطية أو بديلة أثناء حالات الفشل.

✓ يعزز قوة بنية الخدمات الصغيرة.

مثال:

استخدام مكتبة opossum في Node.js لقاطع الدائرة:

import CircuitBreaker from 'opossum';
import axios from 'axios';

const options = {
  timeout: 5000,
  errorThresholdPercentage: 50,
  resetTimeout: 30000,
};

const circuitBreaker = new CircuitBreaker(() => axios.get('http://serviceB-url'), options);

circuitBreaker.fire()
  .then(response => console.log(response.data))
  .catch(err => console.log('Service B is down. Circuit is open.'));

3. قاعدة البيانات لكل نمط خدمة

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

فوائد:

✓ يقلل من التبعية والتنافس بين الخدمات.

✓ يسهل التوسع المستقل وتطور المخطط.

✓ عزل ملكية البيانات ومسؤوليتها.

4. نمط الملحمة

في البنية الموزعة، قد يكون التعامل مع المعاملات التي تمتد عبر خدمات متعددة أمرًا صعبًا. يدير Saga Pattern المعاملات الموزعة باستخدام سلسلة من المعاملات المحلية التي يتم تنسيقها عبر خدمات متعددة. تنفذ كل خدمة معاملتها وتطلق المعاملة التالية، مع آليات التعويض للتراجع عن العمليات إذا حدث خطأ ما.

فوائد:

✓ يسمح بمعاملات موزعة متسقة دون مدير معاملات مركزي.

✓ يدعم الاتساق النهائي عبر الخدمات الصغيرة.

✓ تمكين التراجع عن العمليات غير المكتملة عند الضرورة.

مثال:

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

5. نمط تحديد مصادر الأحداث

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

فوائد:

✓ يوفر سجل تدقيق واضح لجميع التغييرات.

✓ تمكين التحليل التاريخي من خلال إعادة الأحداث الماضية.

✓ يسهل إعادة بناء الدولة إذا لزم الأمر.

مثال:

في نظام المحاسبة، يتم تخزين أحداث مثل "تم إنشاء المعاملة" و"المعاملة المعتمدة" و"إتمام المعاملة" كأحداث. يمكن إعادة حساب الرصيد الحالي عن طريق إعادة تشغيل جميع أحداث المعاملة.

6. نمط CQRS (فصل مسؤولية استعلام الأوامر)

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

فوائد:

✓ تحسين الأداء من خلال الفصل بين اهتمامات القراءة والكتابة.

✓ يدعم استراتيجيات قابلية التوسع المختلفة للقراءة والكتابة.

✓ يسمح بنماذج مرنة مصممة خصيصًا لمهام محددة.

7. نمط التين الخانق

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

فوائد:

✓ يوفر مسارًا غير مزعج للانتقال من الوحدات المتراصة إلى الخدمات الصغيرة.

✓ يقلل من مخاطر إعادة كتابة النظام بالكامل.

✓ تمكين التحسين التدريجي وإعادة البناء.

مثال:

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

خاتمة

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

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/wallacefreitas/top-7-microservices-design-patterns-you-should-know-3c16?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3