في الوقت الحالي ، هناك العديد من الأطر الجاهزة لتطوير التطبيقات باستخدام بنية الخدمات المصغرة. كقاعدة عامة ، يتم تقسيم الأطر إلى نوعين - للغة يمكن أن تعمل مع منصات مختلفة ، ولكن يتم التطوير بلغة واحدة - مثال على SpringBoot و Nancy وما إلى ذلك. والنوع الثاني - للنظام الأساسي - قادر على العمل مع لغات برمجة مختلفة ، ولكن لا يمكن تشغيل الكود إلا على النظام الأساسي المختار - مثال على ServiceFabric ، AWS Lambda. ولكن لا توجد عمليا أطر عمل متعددة اللغات قادرة على العمل على منصات مختلفة.
يقوم فريقنا بتطوير أنظمة المؤسسة بناءً على الخدمات المصغرة ، والتي تحتوي على مكونات مكتوبة بلغات مختلفة وغالبًا ما تحتاج إلى العمل على أنظمة أساسية مختلفة ، لذا فإن المشكلة الموضحة أعلاه أكثر من ملائمة لنا. نظرًا لأننا لم نتمكن من العثور على أي حلول جاهزة تلبي هذه المتطلبات ، فقد طورنا الحل الخاص بنا - Pip.Services Toolkit . سمحت لنا هذه الأداة بتطوير خدمات مصغرة في العديد من لغات البرمجة ولا تقلق حقًا بشأن مكان تشغيل هذا التطبيق - في السحابة أو في مكان العمل.
الغرض من المقال هو تعريف القارئ بإمكانيات المشروع دون الخوض في تفاصيل التنفيذ. إذا كنت مهتمًا بمعرفة المزيد عن هذه الأداة ، فيرجى ، تحت cat ...
ما هي خدمات البيب؟
أثناء التطوير ، حاولنا إنشاء أداة متعددة الاستخدامات قادرة على تغطية العديد من المهام. أثناء عملية التصميم ، تم تحديد المبادئ الأساسية التي شكلت أساس المنتج:
- يجب أن تكون مكونات النظام متصلة قليلاً من أجل تعديلها بسهولة وإضافة وظائف جديدة
- دورة حياة طويلة جدًا - كان الهدف هو إنشاء أداة تسمح بدعمها بلغات مختلفة لأقصى وقت ممكن.
- القدرة على تطوير تطبيقات لكل من بنية الخدمات المصغرة والمتجانسة
- يجب أن تكون التطبيقات المطورة قابلة للنشر على أي نظام أساسي ، سواء كان ذلك في أماكن العمل أو حل السحابة ، كما يجب ألا تعتمد السحابة على المشغل
- دعم العدد الأقصى من لغات البرمجة المستخدمة في التطوير مع الحفاظ على مبادئ الأداة نفسها ، بالإضافة إلى توافق الخدمات المكتوبة بلغات مختلفة مع بعضها البعض أثناء الاتصالات
تمثل مجموعة أدوات Pip.Services مجموعة واسعة من الأدوات التي تتيح لك تطوير خدمات صغيرة وتطبيقات متجانسة باستخدام لغات البرمجة الشائعة. طورت مجموعة أدوات Pip.Services أدوات للعمل مع جميع الوظائف وهياكل البيانات الضرورية ، والتي قد تنشأ الحاجة إليها من مطور ، في حالة عدم وجود الأشياء الضرورية ، يمكنك بسهولة إضافتها بنفسك.
مجموعة أدوات Pip.Services هي لغة متعددة اللغات حقيقية ، مع الالتزام بالمفاهيم التالية:
التنفيذ المتماثل في التعليمات البرمجية
- , , . ,
- — ,
- —
- — ,
للحصول على تمثيل مرئي أكثر للهيكل ، دعنا ننتقل إلى الرسم التخطيطي الهيكلي لمجموعة الأدوات.
كما ذكر في بداية المقال ، فإن مجموعة الأدوات متعددة اللغات. في الوقت الحالي ، هناك تطبيقات في 6 لغات برمجة ، من بينها هناك كلاهما شائع (Java ، Node.js ، Python ، .Net Core) وتطوير (Go ، Dart) - هذه طبقة رمادية على الرسم التخطيطي.
كما ترى ، فهي تستند إلى مجموعة من الحزم ذات العناصر الأولية عبر اللغات والقوالب الشائعة المخصصة للتطوير السريع للمكونات الخاصة بك - الطبقة الخضراء في الرسم التخطيطي. على أساسها ، يتم تنفيذ مكتبة من المكونات الرئيسية لمجموعة الأدوات.
بالفعل على أساس المكونات الأساسية ، يتم تنفيذ مكونات المستخدم والنظام - هذه هي الطبقة الخضراء الثانية.
الطبقة الزرقاء من الرسم البياني عبارة عن مجموعة من المكتبات الأساسية للعمل في اتجاهات معينة - تنفيذ الحاويات (IoC) ، والعمل مع البيانات ، والتبادل المتزامن (RPC) ، والتبادل غير المتزامن (المراسلة). إنها قادرة على العمل كمكونات قائمة بذاتها ، ولكنها توفر أيضًا واجهات ومبادئ أساسية لبناء تطبيقات محددة لمكونات إضافية للعمل مع تقنيات محددة. كما هو موضح في الرسم التخطيطي في الجزء العلوي من المكدس ، كمثال ، قم بتنفيذ حاويات AWS و Azure ، وتنفيذ معالجة البيانات في MongoDb ، والتخزين المؤقت الموزع والقفل في Memcached و Redis.
Microservices على مجموعة أدوات Pip.Services - نظرة من الداخل
تُظهر ممارسات التطوير أنه من بين العديد من أنواع التصميمات المختلفة ، يُفضل بناء خدمة صغيرة من مكونات غير مترابطة. لا تفرض مجموعة أدوات Pip.Services قيودًا على بنية الخدمات المصغرة على المطورين.
كل مطور حر في اختيار طريقه. لكن تصميم المكونات يحظى بدعم قوي في مجموعة أدوات Pip.Services. بفضل هذا النهج ، تم حل عدد من المهام:
- تم تبسيط تطوير واختبار المكونات الفردية.
- يمكن عزل كل مكون عن باقي الكود ويمكن استبدال تبعياته في الاختبارات بأشكال بسيطة.
- يصبح من الممكن إعادة تكوين خدمة مصغرة لمنصة معينة ، واستبدال خدمات البنية التحتية أو الاتصالات أو قواعد البيانات ببساطة عن طريق تغيير تكوين مكونات الخدمات المصغرة في ملف التكوين دون أي تغيير في التعليمات البرمجية.
- . . , .
- , , :

- . :
- , ( ).
- , , ( ).
- مكونات إضافية للتخزين المؤقت ، والمراقبة ، والتكوين ، والمزامنة ، وما إلى ذلك. وكقاعدة عامة ، تتم إضافة هذه المكونات من المجموعة القياسية ، والتي توفر خيارًا واسعًا للتكامل مع خدمات ومنصات البنية التحتية المتنوعة (باللون الرمادي).
- يمكن تنفيذ مكتبة العميل لتبسيط استخدام الخدمة المصغرة. يوفر واجهة سهلة الاستخدام للعمل مع الخدمة المصغرة ويخفي تفاصيل الاتصال منخفض المستوى (الأزرق).
لإنشاء خدمة مصغرة وتكوين المكونات في مجموعة أدوات Pip.Services ، يتم استخدام ملف التكوين. فيما يلي مثال على هذا التكوين:
config.yml
--- # Container descriptor - descriptor: "pip-services:context-info:default:default:1.0" name: "hello-world" description: "HelloWorld microservice" # Console logger - descriptor: "pip-services:logger:console:default:1.0" level: "trace" # Performance counter that post values to log - descriptor: "pip-services:counters:log:default:1.0" # Controller - descriptor: "hello-world:controller:default:default:1.0" default_name: "World" # Shared HTTP Endpoint - descriptor: "pip-services:endpoint:http:default:1.0" connection: protocol: http host: 0.0.0.0 port: 8080 # HTTP Service V1 - descriptor: "hello-world:service:http:default:1.0" # Heartbeat service - descriptor: "pip-services:heartbeat-service:http:default:1.0" # Status service - descriptor: "pip-services:status-service:http:default:1.0"
تقرأ الحاوية التي يتم تغليف الخدمات المصغرة بها مثل هذا التكوين ، بناءً على الواصفات ، باستخدام المصانع ، وإنشاء المكونات الضرورية ، وتمرير معلمات التكوين إليها ، وربط المكونات ببعضها البعض ، وبدء العمليات النشطة.
يتيح لك هذا الأسلوب تصميم خدمات موحدة وإجراء ضبط "دقيق" لمهمة معينة باستخدام متغيرات البيئة مباشرة في البيئة القابلة للتنفيذ.
الانتقال من monolith إلى microservices دون تغيير الكود
بشكل منفصل ، تجدر الإشارة إلى إمكانية تغيير البنية المستخدمة بواسطة التطبيق دون إجراء تغييرات على الكود المصدري. لنفكر في هذه الفرصة بمثال.
افترض أن هناك واجهة يستخدمها العميل للعمل مع خدمة. على سبيل المثال ، مع خدمة تنفذ منطق العمل مع منارات البلوتوث (منارات). عند بدء التشغيل في وضع التطبيق الأحادي ، سيحتوي ملف التكوين على الأقسام التالية مع واصفات المكونات:
# Beacons components - descriptor: "pip-services-beacons:persistence:mongodb:default:*" - descriptor: "pip-services-beacons:controller:default:default:*" - descriptor: "pip-services-beacons:client:direct:default:*"
يقوم هذا التكوين في الواقع بإنشاء خدمة إشارات كجزء من الواجهة في شكل كود مترابط ، ويتم التفاعل بينهما من خلال العميل المباشر ، ولكن داخل حاوية واحدة ، كما ترون من الرسم البياني أدناه.
ولكن إذا قمت بتغيير نص التكوين قليلاً ، فستصبح خدمة الإشارات خدمة مصغرة منفصلة وستعمل الواجهة معها من خلال عميل http. للقيام بذلك ، قم بإزالة الأقسام ذات وحدة التحكم والمثابرة في تكوين الواجهة ، وقم بتغيير نوع العميل من مباشر إلى http: للتشغيل الصحيح ، يجب عليك تحديد العنوان والمنفذ لإشارات الخدمة المصغرة التي تعمل الآن بشكل منفصل وإعادة تشغيل الواجهة بحيث تقرأ التكوين الجديد. تحتاج أيضًا إلى تشغيل خدمة مصغرة منفصلة مع إشارات ، لذلك يمكنك استخدام التكوين التالي:
# Beacons components
- descriptor: "pip-services-beacons:client:http:default:*"
connection:
protocol: "http"
host: "any.where.com"
port: 8086
# Http Endpoint - descriptor: "pip-services:endpoint:http:default:*" root_path: "" connection: protocol: "http" host: "0.0.0.0" port: 8086 # Beacons API V1 - descriptor: "pip-services-beacons:service:http:default:1.0" # Hearbeat service - descriptor: "pip-services:heartbeat-service:http:default:1.0" # Status service - descriptor: "pip-services:status-service:http:default:1.0"
من وجهة نظر معمارية ، سيبدو الآن كما يلي:
كما ترى ، بهذه الطريقة يمكن إنشاء تطبيقات أولاً في شكل أحجار متجانسة ، مع عدم إنفاق الكثير من الموارد على النشر ، ولكن بمجرد أن تحتاج إلى التوسع ، تحتاج فقط إلى تغيير التكوين وبسهولة يعد الانتقال إلى الخدمات المصغرة أحد الفوائد الرئيسية لمجموعة أدوات Pip.Services.
أدوات إضافية من مشروع Pip.Services
Pip.Services لا تشمل فقط مجموعة أدوات خدمات Pip. في سياق عملنا ، قمنا بتطوير عدد من الأدوات الإضافية لتسهيل تطوير الخدمات المصغرة:
- مكتبة الخدمات المصغرة الجاهزة - تحتوي على كتالوج الخدمات المصغرة الجاهزة للاستخدام مقسمة إلى ست فئات :
- – . , , , ..
- – , , ,
- – ,
- – , , .
- – , ,
- — , , ;
- المعايير المعيارية هي مجموعة من الأدوات المساعدة لاختبار أداء التطبيقات والخدمات المصغرة المطورة.
- مكتبة القوالب - تتضمن عدة فئات مع قوالب ، من بينها قوالب لتطوير الخدمات المصغرة وإعدادات مساحة العمل وقوالب CI / CD وقوالب الواجهة.
- PowerShell Selenium WebDriver - برنامج تشغيل مطور للعمل مع السيلينيوم من PowerShell.
كل هذه الأدوات متوفرة على موقع Pip.Services.
خاتمة
في نهاية المقال ، أود أن أضيف أن Pip.Services Toolkit عبارة عن مجموعة من الأنماط والمكونات التي تبسط تطوير أنظمة الخدمات المصغرة باستخدام مجموعة متنوعة من لغات البرمجة وتوفر النشر على مختلف الأنظمة الأساسية المحلية والسحابة. تتضمن المجموعة أنماطًا تسهل إنشاء خدمات صغيرة قابلة للتخصيص بدرجة كبيرة باستخدام مكونات مقترنة بشكل غير محكم تنفذ وظائف نموذجية في نقل البيانات ومعالجتها ، والعمل مع قواعد البيانات ، ونقل المعلومات باستخدام بروتوكولات متزامنة وغير متزامنة ، ووظائف المراقبة ، ومعالجة الأخطاء وغير ذلك الكثير. في الوقت نفسه ، يمكن توسيع مجموعة أدوات Pip.Services بسهولة ويمكن أن تتعايش مع المكتبات والأطر الأخرى نظرًا لتصميمها القائم على التكوين ، بدلاً من الوراثة.
تسمح المبادئ العامة والهيكل ، بالإضافة إلى تناسق التنفيذ ، للمطورين بالانتقال بسهولة من لغة إلى أخرى في أي وقت من الأوقات. وتوفر إمكانية التشغيل البيني توافقًا كاملاً مع الخدمات المصغرة المكتوبة بلغات مختلفة بمجرد إخراجها من الصندوق.
يتم اختبار جميع الخدمات المصغرة في مكتبتنا واستخدامها على أنظمة حقيقية. بفضل استخدام Pip.Services Library في مشاريعنا ، تمكنا من تقليل الوقت اللازم لتطوير الخلفية بنسبة تصل إلى 30٪.
Pip.Services تتطور بنشاط ، كل شهر تقريبًا يتم إضافة أو توسيع أدوات وخدمات مصغرة جديدة.
معظم المعلومات الضرورية موجودة بالفعل على الموقع ، لكننا ما زلنا نكملها بنشاط بمواد جديدة ونواصل العمل عليها.
اعتبارًا من نوفمبر 2020 ، على أساس مجموعة الأدوات هذه ، تم تنفيذ أكثر من ألف خدمة صغيرة بدرجة عالية من الموثوقية وسرعة تطوير عالية وسهولة في التكامل. نتيجة لذلك ، اتخذ قادة الشركة قرارًا بنقل المنتج بالكامل إلى حالة المصدر المفتوح من أجل مشاركة الحلول الناجحة في الهندسة المعمارية مع المجتمع ، وكذلك لضمان زيادة تطوير المشروع من خلال جهود عدد أكبر من المطورين ذوي الخبرة.
كان القصد من المقالة أن تكون نظرة عامة فقط ، دون أمثلة مفصلة للتنفيذ ، لذا يرجى عدم الركل كثيرًا. في المنشورات التالية ، سنحاول معرفة كيفية تنفيذ خدمة مصغرة عاملة باستخدام مجموعة الأدوات هذه.
إذا كان لديك أي أسئلة حول مجموعة الأدوات هذه ، فاطرحها في التعليقات أو من خلال قنوات الاتصال المشار إليها على موقعنا وسنجيب عليها بالتأكيد.
الروابط: www.pipservices.org