Microservices مع الحذاء الربيع. الجزء 1. الابتداء

هذا هو الجزء الأول من سلسلة من المقالات حول أساسيات هندسة الخدمات المجهرية.

في ذلك ، سوف تتعرف على مفهوم الخدمات الصغيرة وتتعرف على كيفية إنشاء خدمات مصغرة باستخدام Spring Boot و Spring Cloud.

سيساعدك هذا الدليل على تعلم أساسيات هندسة الخدمات المصغرة. سنبدأ أيضًا في إلقاء نظرة على تطبيق microservice الأساسي باستخدام Spring Boot.

سننشئ زوجًا من الخدمات المصغرة ونجعلهم يتواصلون مع بعضهم البعض باستخدام خوادم اسم Eureka (اسم خادم يوريكا) ورابون لتوازن الحمل على جانب العميل.

هذا المقال جزء من سلسلة Spring Boot Microservices:


سوف تتعلم


  • ما هو متراصة؟
  • ما هي خدمة microservice؟
  • ما هي المشاكل مع microservices؟
  • كيف تجعل Spring Boot و Spring Cloud من تطوير الخدمات المصغرة؟
  • كيفية تطبيق موازنة التحميل من جانب العميل باستخدام الشريط؟
  • كيفية تنفيذ خادم الاسم (خادم تسمية يوريكا)؟
  • كيفية توصيل خدمات microservices بخادم الأسماء والشريط؟

نظرة عامة على الموارد


في هذا البرنامج التعليمي ، سنقوم بإنشاء مورد للطلاب الذي يوفر ثلاث خدمات باستخدام URIs وطرق HTTP المناسبة:

  • الحصول على قائمة بجميع الطلاب -GetMapping ("/ / الطلاب")
  • الحصول على معلومات حول طالب معين -GetMapping ("/ students / {id}")
  • حذف معلومات الطالب -DeleteMapping ("/ students / {id}")
  • إنشاء إدخال طالب جديد -PostMapping ("/ / الطلاب")
  • تحديث معلومات الطالب -PutMapping ("/ students / {id}")

نظرة عامة على الخدمات الصغيرة - الصورة الكبيرة


في هذه السلسلة من المقالات ، سننشئ خدمتين صغيرتين:

  • خدمة فوركس - FS لفترة قصيرة
  • خدمة تحويل العملات - CCS لفترة قصيرة

لا تقلق إذا كانت بعض الأشياء غير واضحة لك. والفكرة هي أن نمنحك الصورة الكبيرة قبل البدء في التطوير وإنشاء خدمات micros خطوة بخطوة.

خدمة الفوركس


خدمة فوركس (FS ، خدمة فوركس) هي مزود خدمة. ويوفر أسعار صرف العملات لمختلف العملات. لنفترض أنه يتواصل مع Forex Exchange ويوفر القيمة الحالية للتبادل بين العملات. يظهر مثال على الطلب والاستجابة أدناه:

GET to http://localhost:8000/currency-exchange/from/EUR/to/INR 

 { id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, port: 8000, } 

الرد على الطلب أعلاه هو سعر صرف اليورو إلى INR. إجابة ConversionMultiple هي 75.
سنتحدث عن حقل المنفذ في وقت لاحق قليلاً.

خدمة تحويل العملات


يمكن لخدمة تحويل العملات (CCS) تحويل العديد من العملات إلى عملة أخرى. يستخدم خدمة فوركس للحصول على قيم صرف العملات الحالية. CCS مستهلك للخدمات. يظهر مثال على الطلب والاستجابة أدناه:

 GET to http://localhost:8100/currency-converter/from/EUR/to/INR/quantity/10000 

 { id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, quantity: 10000, totalCalculatedAmount: 750000, port: 8000, } 

يسمح لك الطلب أعلاه بتحديد قيمة 10000 يورو بالروبية الهندية.
TotalCalculatedAmount هو 750،000 INR. يوضح الرسم البياني أدناه العلاقة بين CCS و FS.



يوريكا تسمية الخادم والشريط


بناءً على الحمل ، قد يكون لدينا عدة نسخ من خدمة تحويل العملات وخدمة الفوركس.



ويمكن أن يتغير عدد الحالات لكل خدمة بمرور الوقت. يوضح الشكل أدناه مثالًا محددًا حيث يتم إنشاء 5 مثيلات لخدمة فوركس.



ما يجب أن يحدث في الحالة المذكورة أعلاه هو أنه ينبغي توزيع الحمل بالتساوي بين هذه الحالات الخمس.



في هذه السلسلة من المقالات ، سوف نستخدم Ribbon لموازنة التحميل وخادم اسم Eureka لتسجيل جميع الخدمات الصغيرة.



ما هو تطبيق متجانسة؟


هل سبق لك العمل في مشروع ...

  • الذي ينتج (يوضع في الإنتاج) مرة واحدة كل بضعة أشهر
  • التي لديها مجموعة واسعة من الميزات والقدرات.
  • يعمل فيه أكثر من 50 شخصًا
  • حيث مشاكل التصحيح هي مشكلة كبيرة
  • حيث من المستحيل تقريبًا إدخال تقنيات جديدة وعمليات جديدة

هذه هي الخصائص النموذجية للتطبيقات متجانسة.

تطبيقات متجانسة وعادة ما تكون ضخمة - أكثر من 100000 سطر من التعليمات البرمجية. في بعض الحالات ، حتى أكثر من مليون سطر من التعليمات البرمجية.

تتميز متجانسات بما يلي:

  • حجم التطبيق كبير
  • دورات إطلاق طويلة
  • فرق كبيرة

المشاكل النموذجية تشمل:

  • مشاكل قابلية التوسع
  • اعتماد التكنولوجيات الجديدة
  • عمليات جديدة - رشيقة؟
  • صعب لأتمتة الاختبارات
  • من الصعب التكيف مع ممارسات التطوير الحالية
  • من الصعب التكيف مع النمو السريع للمشروع

Mikroservisy


تطورت معماريات Microservice لمواجهة تحديات قابلية التوسع والابتكار مع أبنية متجانسة. هناك عدد من التعريفات المقترحة للخدمات الميكروية.
خدمات صغيرة قائمة بذاتها تعمل معًا - Sam Newman
تطوير تطبيق منفصل في شكل مجموعة من الخدمات الصغيرة ، تعمل كل منها في عمليتها الخاصة وتتفاعل مع آليات خفيفة الوزن ، وغالبًا ما تكون واجهة برمجة تطبيقات موارد HTTP. هذه الخدمات مبنية على فرص العمل ويمكن نشرها بشكل مستقل باستخدام آلية نشر مؤتمتة بالكامل. يوجد حد أدنى للإدارة المركزية لهذه الخدمات ، والتي يمكن كتابتها بلغات برمجة مختلفة واستخدام تقنيات التخزين المختلفة - James Lewis و Martin Fowler

على الرغم من عدم وجود تعريف واحد مقبول للخدمات الميكروية ، إلا أن هناك العديد من الخصائص المهمة:

  • REST - بنيت حول الموارد RESTful. يمكن أن يستند التواصل بين الخدمات إلى الأحداث أو بروتوكول HTTP.
  • كتل صغيرة قابلة للانتشار جيدًا - سياق محدود
  • الميزات السحابية - القياس الديناميكي

كيف تبدو بنية microservice؟


هذا هو ما سوف تبدو متراصة. تطبيق واحد لكل شيء.



سيبدو هذا التطبيق نفسه عند تطويره باستخدام Microservices Architecture.



تتضمن بنيات Microservice العديد من مكونات المراسلة الصغيرة المصممة بشكل جيد.



فوائد Microservices


المزايا:

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

Microservice قضايا العمارة


على الرغم من أن تطوير بعض المكونات الصغيرة قد يبدو سهلاً ، إلا أن هناك عددًا من الصعوبات المتأصلة المرتبطة بهياكل الخدمة الصغيرة.

دعونا نلقي نظرة على بعض المشاكل:

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

حلول العمارة Microservice


التمهيد الربيع


يتيح لك Spring Boot إنشاء تطبيقات جاهزة بسرعة ويوفر الميزات غير الوظيفية التالية:

  • الخوادم المدمجة (سهولة النشر باستخدام الحاويات)
  • رصد المقاييس
  • مراقبة الصحة
  • التكوين الخارجي

سحابة الربيع


يوفر Spring Cloud حلول تنشيط السحاب للخدمات المصغرة الخاصة بك. يستخدم ويبني على بعض الحلول السحابية التي أنشأتها Netflix (Netflix OSS).

وحدات سحاب الربيع المهمة


  • التوسع الديناميكي لأعلى ولأسفل. باستخدام مزيج من:

- خوادم اسم يوريكا
- الشريط (موازنة التحميل من جانب العميل)
- Feign (يبسط تطوير عملاء REST)

  • الرؤية والمراقبة مع:

- تتبع Zipkin تتبع
- بوابة API لـ Netflix

  • إدارة التكوين مع Spring Cloud Config Server
  • خطأ التسامح مع Hystrix

في هذه السلسلة من المقالات ، سننشئ خدمتين صغيرتين:
تقريبا. العابرة. المؤلف يكرر جزئيا ما قيل. النسخة الأصلية المحفوظة (بدون حذف عمليات الاعادة)

  • خدمة فوركس - FS لفترة قصيرة
  • خدمة تحويل العملات - CCS لفترة قصيرة

يوضح الرسم البياني أدناه العلاقة بين CCS و FS. سنقوم بإنشاء اتصال بين هذين المكونين.



نود أن نكون قادرين على زيادة وخفض عدد مثيلات كل من هذه الخدمات بشكل حيوي.



ويمكن أن يتغير عدد الحالات لكل خدمة بمرور الوقت. يوضح الشكل أدناه مثالًا محددًا حيث يتم إنشاء 5 مثيلات لخدمة فوركس.



يتطلب تنفيذ حل للتطوير الديناميكي لأعلى ولأسفل الإجابة على سؤالين:

  • كيف تكتشف خدمة تحويل العملات (CCS) عدد مثيلات خدمة الفوركس (FS) النشطة؟
  • كيف تقوم خدمة تحويل العملات (CCS) بتوزيع الحمل بين الحالات النشطة؟

نظرًا لأننا نريد أن يكون هذا ديناميكيًا ، لا يمكننا ربط عناوين URL للقرص الثابت في خدمات FS بـ CCS. هذا هو السبب في أننا نقدم خادم الاسم.

يتم تسجيل جميع مثيلات المكون (CCS و FS) على خادم اسم Eureka. عندما تحتاج FS إلى الاتصال بـ CCS ، فسوف تطلب من Eureka Naming Server تحديد الحالات النشطة. سوف نستخدم Ribbon لموازنة الحمل على جانب العميل بين مثيلات FS المختلفة.

يوجد أدناه مخطط تسلسلي عالي المستوى لما سيحدث عند الطلب من CCS إلى FS.



كذلك في هذه السلسلة من المقالات:


  • إنشاء microservice الفوركس. سنقوم بإنشاء خدمة REST بسيطة تستند إلى Spring Boot Starter Web و Spring Boot Started JPA. سوف نستخدم الإسبات لتنفيذ JPA والاتصال بقاعدة بيانات H2.
  • إنشاء خدمة تحويل العملات في CCS. سنقوم بإنشاء خدمة REST بسيطة باستخدام Feign للاتصال بخدمة micros على الفوركس.
  • استخدام الشريط لموازنة الحمل.
  • تطبيق خدمة تسمية يوريكا وتوصيل FS و CCS من خلال يوريكا.

Source: https://habr.com/ru/post/ar484130/


All Articles