ترجمة وتكييف خدمات Java Microservices: دليل عملي . رابط للجزء الأول من الدليل . أي برنامج 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 .
- تضمن الحاوية إمكانية النقل الخاصة بها. أي أنه يعمل في أي مكان. يبدو مألوفا، أليس كذلك؟
- قم بتجميع ملف الجرة الخاص بك في صورة 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 أثناء التطوير الآن؟ كيف يمكنك معرفة ما إذا كان سير العمل بأكمله يعمل أم لا فقط أجزاء منه؟ في الممارسة العملية، يمكنك استخدام إحدى الطرق الثلاث:- مع القليل من العمل (إذا كنت تستخدم أطر عمل مثل Spring Boot)، يمكنك دمج كل خدماتك الصغيرة في فئة مشغل واحدة وتحميل جميع الخدمات الصغيرة باستخدام فئة Wrapper.java واحدة - اعتمادًا على ما إذا كان لديك ذاكرة كافية على جهازك لتشغيلها. قم بتشغيل جميع الخدمات الصغيرة الخاصة بك.
- يمكنك نسخ إعدادات Docker Swarm أو Kubernetes محليًا.
- فقط لا تقم بإجراء اختبارات التكامل محليًا بعد الآن. بدلاً من ذلك، قم بنشر بيئة DEV/TEST مخصصة. هذا شيء يفعله عدد لا بأس به من الفرق في الواقع عندما يستسلمون لآلام إعدادات الخدمات الصغيرة المحلية.
GO TO FULL VERSION