JavaRush /مدونة جافا /Random-AR /دليل لخدمات جافا الصغيرة. الجزء 2: النشر والاختبار

دليل لخدمات جافا الصغيرة. الجزء 2: النشر والاختبار

نشرت في المجموعة
ترجمة وتكييف خدمات Java Microservices: دليل عملي . رابط للجزء الأول من الدليل . دليل لخدمات جافا الصغيرة.  الجزء 2: النشر والاختبار - 1أي برنامج Java من جانب الخادم، وبالتالي أي خدمة صغيرة، هو مجرد ملف بامتداد .jar أو .war. هناك شيء واحد رائع في نظام Java البيئي، أو بالأحرى JVM: تحتاج فقط إلى كتابة تعليمات Java البرمجية مرة واحدة ويمكن تشغيلها على أي نظام تشغيل تقريبًا، طالما أنك لم تقم بتجميع التعليمات البرمجية الخاصة بك باستخدام إصدار Java أحدث من إصدار Java الخاص بك. إصدار JVM المستهدف من المهم أن نفهم هذا، خاصة عندما يتعلق الأمر بموضوعات مثل Docker أو Kubernetes أو (قرعة الطبل!) السحابة. لماذا؟ دعونا نلقي نظرة على سيناريوهات النشر المختلفة.

مثال بسيط لنشر خدمة Java Microservice

دعونا نواصل مع مثال البنك. إذن لدينا ملف monobank.jar (مونوليث) وriskengine.jar المستخرج حديثًا (أول خدمة صغيرة للتحقق من المخاطر). لنفترض أيضًا أن كلا التطبيقين، مثل أي تطبيق آخر في العالم، يحتاجان إلى ملف ‎.properties. في حالتنا، سيحتوي فقط على عنوان URL لقاعدة البيانات وبيانات الاعتماد. قد يتكون الحد الأدنى من النشر من دليلين يبدوان كما يلي: أولاً:

-r-r------ 1 ubuntu ubuntu     2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar

ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
ثانية:

-r-r------ 1 ubuntu ubuntu     2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar

ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
وهذا يترك السؤال مفتوحًا: كيف ستصل ملفات .properties و.jar إلى الخادم؟ لسوء الحظ، قد يكون هناك العديد من الإجابات.

كيفية استخدام أدوات البناء وSSH وAnsible لنشر خدمات Java Microservices

نصيحة مملة ولكنها ليست أقل ممتازة حول كيفية نشر خدمات Java الصغيرة. في الواقع، بالضبط الطريقة التي نشر بها مسؤولو النظام أي برنامج خادم Java في الشركات على مدار العشرين عامًا الماضية. هذا هو المزيج:
  • أداة البناء المفضلة لديك (Maven، Gradle)
  • SSH/SCP قديم جيد لنسخ .jars إلى الخوادم
  • البرامج النصية Bash لإدارة البرامج النصية والخوادم للنشر
  • أو حتى أفضل: بعض البرامج النصية Ansible.
بالطبع، هذا غير مناسب للمبتكرين الذين يحتاجون إلى سحابة "متنفسة"، وخوادم ذات موازنة تحميل تلقائية، وما إلى ذلك. هذه مدرسة قديمة مملة حقًا. ومع ذلك فإنه يعمل!

كيفية استخدام Docker لنشر خدمات Java Microservices

دعونا نعود إلى عذاب الاختيار الحلو. قبل عامين، ظهرت شركة Docker على الساحة، ومعها الحاويات. إذا لم تستخدمه من قبل، فإليك وصفًا موجزًا ​​يستهدف المستخدمين النهائيين والمطورين:
  • تشبه الحاوية (المبسطة) الآلة الافتراضية القديمة الجيدة، ولكنها "أخف وزنًا". إذا لم تكن متأكدًا مما تعنيه كلمة "أسهل" في هذا السياق، فيرجى مراجعة هذه الإجابة على Stackoverflow .
  • تضمن الحاوية إمكانية النقل الخاصة بها. أي أنه يعمل في أي مكان. يبدو مألوفا، أليس كذلك؟
دليل لخدمات جافا الصغيرة.  الجزء 2: النشر والاختبار - 2من المضحك أنه نظرًا لقابلية النقل والتوافق مع الإصدارات السابقة لـ JVM، لا تبدو هذه الميزة بمثابة ميزة. يمكنك ببساطة تنزيل JVM.zip على أي Raspberry Pi (أو حتى على الهاتف المحمول)، واستخراجه وتشغيل أي ملف .jar. يتغير الوضع في لغات مثل PHP أو Python، حيث يكون عدم توافق الإصدار أو إعدادات النشر أكثر تعقيدًا. أو إذا كان تطبيق Java الخاص بك يعتمد على العديد من الخدمات المثبتة الأخرى (مع أرقام الإصدارات الصحيحة): على سبيل المثال، قاعدة بيانات Postgres، أو مخزن قيمة مفتاح Redis. لذا، فإن الميزة الرئيسية لـ Docker لخدمات Java الصغيرة، أو بشكل أكثر دقة لتطبيقات Java، هي: القدرة على إعداد بيئات اختبار أو تكامل متجانسة باستخدام أدوات مثل Testcontainers . التطورات المعقدة أسهل في التثبيت. خذ برنامج منتدى الخطاب . يمكنك تثبيته باستخدام صورة Docker واحدة، والتي تحتوي على كل ما تحتاجه، بدءًا من برنامج Discourse المكتوب بلغة Ruby، إلى قاعدة بيانات Postgres، إلى Redis وحوض المطبخ. إذا كانت عمليات النشر الخاصة بك متشابهة أو كنت ترغب في تشغيل قاعدة بيانات Oracle صغيرة لطيفة، فجرّب Docker. لتلخيص ذلك، بدلاً من مجرد النظر إلى ملف ‎.jar، يمكنك الآن:
  • قم بتجميع ملف الجرة الخاص بك في صورة Docker
  • ادفع هذه الصورة إلى سجل Docker الخاص
  • قم بسحب هذه الصورة وتشغيلها على النظام الأساسي الذي تستهدفه
  • أو انسخ صورة Docker مباشرة إلى نظام الإنتاج الخاص بك وقم بتشغيلها.

كيفية استخدام Docker Swarm أو Kubernetes لنشر خدمات Java Microservices

لنفترض أنك قررت تجربة Docker. في كل مرة تقوم فيها بنشر خدمة Java صغيرة، فإنك تقوم بإنشاء صورة Docker التي تضم ملف .jar الخاص بك. لنفترض أن لديك اثنتين من خدمات Java الصغيرة هذه، وتريد نشر هذه الخدمات على عدة أجهزة (في مجموعة). السؤال الذي يطرح نفسه: كيفية إدارة هذه المجموعة؟ هل تريد تشغيل حاويات Docker والتحقق من الأداء ونشر التحديثات وتوسيع نطاق النظام (brrr)؟ هناك إجابتان محتملتان لهذا السؤال هما Docker Swarm وKubernetes. إن الخوض في التفاصيل حول كلا الخيارين من شأنه أن يجعل هذا البرنامج التعليمي الطويل بالفعل طويلًا جدًا، ولكننا نعتقد أنه من المهم الإشارة إلى أن كلا الخيارين يعتمدان في النهاية على كتابة ملفات YAML (راجع قصص المسافة البادئة Yaml ) لإدارة مجموعتك. إذا كنت تريد أن تعرف كيف يجعلك هذا تشعر في الممارسة العملية، فما عليك سوى كتابة استعلام مماثل في بحث تويتر. لذا فإن عملية نشر خدمات Java الصغيرة الخاصة بك تبدو الآن كما يلي:
  • تكوين وإدارة Docker Swarm/Kubernetes
  • جميع خطوات Docker (انظر أعلاه)
  • اكتب ونفذ YAML حتى تنزف عيناك حتى يعمل كل شيء.

كيفية اختبار خدمات جافا الصغيرة

لنفترض أنك قررت تنفيذ الخدمات الصغيرة في الإنتاج. كيف يمكننا اختبار تكامل n-microservices أثناء التطوير الآن؟ كيف يمكنك معرفة ما إذا كان سير العمل بأكمله يعمل أم لا فقط أجزاء منه؟ في الممارسة العملية، يمكنك استخدام إحدى الطرق الثلاث:
  1. مع القليل من العمل (إذا كنت تستخدم أطر عمل مثل Spring Boot)، يمكنك دمج كل خدماتك الصغيرة في فئة مشغل واحدة وتحميل جميع الخدمات الصغيرة باستخدام فئة Wrapper.java واحدة - اعتمادًا على ما إذا كان لديك ذاكرة كافية على جهازك لتشغيلها. قم بتشغيل جميع الخدمات الصغيرة الخاصة بك.
  2. يمكنك نسخ إعدادات Docker Swarm أو Kubernetes محليًا.
  3. فقط لا تقم بإجراء اختبارات التكامل محليًا بعد الآن. بدلاً من ذلك، قم بنشر بيئة DEV/TEST مخصصة. هذا شيء يفعله عدد لا بأس به من الفرق في الواقع عندما يستسلمون لآلام إعدادات الخدمات الصغيرة المحلية.
بالإضافة إلى ذلك، بالإضافة إلى خدمات Java الصغيرة الخاصة بك، ربما تحتاج أيضًا إلى وسيط رسائل قيد التشغيل (مثل ActiveMQ أو RabbitMQ) أو ربما خادم بريد إلكتروني أو أي مكون مراسلة آخر تحتاجه خدمات Java الصغيرة الخاصة بك للتواصل مع بعضها البعض. يؤدي هذا إلى التقليل بشكل كبير من التعقيد من جانب DevOps. قم بإلقاء نظرة على مكتبات اختبار الخدمات الصغيرة، حيث يمكنها تخفيف هذا الألم. على أية حال، هذا التعقيد يقودنا إلى المشاكل العامة للخدمات المصغرة، والتي سنتحدث عنها الآن. في الجزء الأخير ، سنغطي الأسئلة العامة حول خدمات Java المصغرة.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION