كيف تتغير تفاصيل العمل مع خوادم التطبيقات باستخدام مثال OpenLiberty



مرحبا يا هبر!

خطاب لي سيباستيان داشنر في اجتماع جافا في مكتب آي بي إم بموسكو (عثر على سجل بأداء مشابه) دفعني للبدء في معرفتي بخوادم التطبيقات خفيفة الوزن ، على وجه الخصوص ، مع OpenLiberty. ثم فكرت:

  1. ما هي فوائد خادم التطبيقات خفيفة الوزن؟
  2. كيف تتغير خصوصية العمل عند استخدامها؟
  3. لماذا حزمة خادم التطبيق في حاوية؟

عند الإجابة على هذه الأسئلة ، لاحظت أنه لا يوجد الكثير من المعلومات العامة حول هذا الموضوع ، لذلك قررت جمعها وتنظيمها هنا.

أنا نشر النتائج تحت الخفض.

ما هي فوائد خادم التطبيقات خفيفة الوزن؟


في السابق ، كانت خوادم تطبيقات Java EE الخاصة بالمؤسسات (مثل JBoss AS و Oracle WebLogic و IBM WebSphere AS) تعتبر تصميمًا ثقيلًا ومرهقًا ، خاصةً عندما يتعلق الأمر بوقت بدء التشغيل والنشر. لكن التكنولوجيا السحابية تستحوذ على جزء كبير من الصناعة ومتطلبات خادم التطبيقات تتغير.

والآن ، بدلاً من خوادم تطبيقات المؤسسات كاملة الميزات ، تأتي خوادم التطبيقات الصغيرة ، المعيارية ، التي تركز على مهمة محددة: Thorntail ، و Payara Micro - الأخوان الصغار WildFly و Payara ؛ Meecrowave هو خادم JAX-RS + CDI + JSON خفيف الوزن ، KumuluzEE هو خادم يسمح لك بتوسيع Java EE باستخدام Node.js و Go وغيرها.

تتضمن هذه القائمة أيضًا OpenLiberty - خادم تطبيقات مفتوح المصدر (يتم توزيعه وفقًا لـ EPL-1.0) يدعم أحدث معايير Java EE / Microprofile ، والتي يعمل WebSphere Liberty عليها.

ميزات EPL-1.0 في لمحة (Eclipse Public License Version 1.0)
يعتمد EPL 1.0 على CPL وهو غير متوافق مع GPL ، ويسمح لك بالامتثال للتراخيص وبراءات الاختراع الأخرى المستخدمة في العمل ، ويوفر الحق في ترخيص المنتج بموجب أي ترخيص آخر ، ويجب تضمين نسخة من الترخيص في جميع نسخ البرنامج.

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

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

يجب على العضو الذي يتضمن البرنامج في عرض الأسعار القيام بذلك لتجنب المسؤولية المحتملة للأعضاء الآخرين. (التنازل صراحة عن أي ضمان أو مسؤولية نيابة عن جميع المؤلفين)

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

دعونا نرى الفوائد التي يمكن أن نحصل عليها من خلال نشر التطبيق في حاوية مع OpenLiberty. (يجب أن يكون لديك أي إصدار من java مثبتًا ، يجب تنفيذ خطوات أخرى أثناء وجود دليل wlp)

السرعة:


تعتبر السرعة أهم مؤشر لتطبيق السحاب ، لأنه من أجل تطبيق السحاب أن يدير حجم الحمل المتزايد وإدارته والتعامل معه بسرعة ، يجب إطلاقه في ثوانٍ. خادم تطبيق خفيف الوزن يمكنه القيام بذلك. للتحقق ، قم بتنزيل خادم OpenLiberty وتشغيل تشغيل bin / server ( قائمة كاملة من الأوامر ):

$ bin/server run  defaultServer (Open Liberty 19.0.0.6/wlp-1.0.29.cl190620190617-1530)  Java HotSpot(TM) 64-Bit Server VM  1.8.0_212-b10 (ru_US) [AUDIT ] CWWKE0001I:  defaultServer . [AUDIT ] CWWKZ0058I:   dropins  . [AUDIT ] CWWKF0012I:     : [el-3.0, jsp-2.3, servlet-3.1]. [AUDIT ] CWWKF0011I:  defaultServer      .  defaultServer   1,709 . 

نمطية والمرونة


لا تحتاج معظم التطبيقات إلى Java EE ككل ، ولكنها تتطلب مجموعة مخصصة من المعايير ، وغالبًا ما تستخدم في تطبيقات المؤسسات. بفضل OSGI ، يمكننا اختيار مجموعة من معايير Java EE و / أو MicroProfile التي نحتاجها ، مع تجاهل كل شيء آخر.

على سبيل المثال ، قم بتعريف JAX-RS من Java EE و mpHealth من Microprofile عن طريق إضافة سطرين إلى featureManager بحظر usr / servers / serverName /server.xml

 <?xml version="1.0" encoding="UTF-8"?> <server description="new server"> <!-- Enable features --> <featureManager> <feature>jsp-2.3</feature> <feature>mpHealth-1.0</feature> <feature>jaxrs-2.1</feature> </featureManager> <!-- To access this server from a remote client add a host attribute to the following element, eg host="*" --> <httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" /> <!-- Automatically expand WAR files and EAR files --> <applicationManager autoExpand="true"/> </server> 

التحديث الديناميكي


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

 [AUDIT ] CWWKG0016I:    . [AUDIT ] CWWKG0017I:      0,475 . [AUDIT ] CWWKF0012I:     : [cdi-2.0, jaxrs-2.1, jaxrsClient-2.1, jndi-1.0, json-1.0, jsonp-1.1, mpHealth-1.0, servlet-4.0]. [AUDIT ] CWWKF0013I:     : [servlet-3.1]. [AUDIT ] CWWKF0008I:     0,476 . 

حجم الصورة والتجمع


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

يحتوي Dockerhub على صور مسبقة الصنع تحتوي على خادم OpenLiberty مُعد مسبقًا. سنستخدم واحدًا منهم وننشئ Dockerfile:

 FROM open-liberty COPY usr/servers/defaultServer /opt/ol/wlp/usr/servers/defaultServer ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] CMD ["defaultServer"] 

لنقم بتجميع الصورة:

 docker build -t app . 

قم بتشغيله كحاوية:

 docker run -d --name app -p 9080:9080 app 

تحقق من النتيجة http: // localhost: 9080 / health /



لإيقاف الحاوية:

 docker stop app 

هناك العديد من السيناريوهات الأخرى لاستخدام الحاوية ، وبشكل عام ، هذه مناسبة للمقالات الفردية ، لذلك دعونا نعود إلى الأسئلة.

كيف يتم تغيير خصوصية العمل؟


حزمة الحزمة


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

جمعية


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

إطلاق


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

تمديد وظيفة


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

لماذا حزمة خادم التطبيق في حاوية؟


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

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

ستجد المزيد من الممارسة هنا.
بالإضافة إلى الوثائق ، يحتوي موقع الويب الخاص بالمشروع على عدد كبير من البرامج التعليمية: كيفية إنشاء تطبيقات الويب باستخدام maven / gradle ، وحزم ونشر التطبيقات ، ونشر وتكوين خدمات micros في kubernetes ، وإدارة حركة المرور باستخدام istio ، والنشر إلى IBM Cloud من موفري خدمات السحابية الشهيرة الأخرى وأكثر من ذلك بكثير.

سيباستيان داشنر (عشاق Java & OSS ، Java Champion ، IBMer ، JCP عضو ، Jakarta EE committer) ينشر مقالات مفيدة حول كيفية استخدام OpenLiberty ، مثل مراقبة Open Liberty مع Prometheus و Grafana ، في مدونته ، وكتابه Architecting Modern Java تم استخدام تطبيقات EE في إعداد هذه المقالة.

يمكن لـ Liberty-maven-plugin (بديل للقاعدة ) تبسيط عملك إلى حد كبير. بالمناسبة ، الأدلة لديها أمثلة جيدة على استخدامه.

يمكنك أيضا المساهمة في المشروع .

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


All Articles