JavaRush /Java blogi /Random-UZ /Java mikroservislari bo'yicha qo'llanma. 2-qism: Joylasht...

Java mikroservislari bo'yicha qo'llanma. 2-qism: Joylashtirish va sinovdan o'tkazish

Guruhda nashr etilgan
Java mikroservislarini tarjima qilish va moslashtirish : amaliy qo'llanma . Qo'llanmaning birinchi qismiga havola . Java mikroservislari bo'yicha qo'llanma.  2-qism: Joylashtirish va sinovdan o'tkazish - 1Har qanday server tomonidagi Java dasturi va shuning uchun har qanday mikroservis shunchaki .jar yoki .war kengaytmali fayldir. Java ekotizimida, toʻgʻrirogʻi JVMda bitta ajoyib narsa bor: Java kodini faqat bir marta yozishingiz kerak boʻladi va u deyarli har qanday operatsion tizimda ishlashi mumkin, agar siz kodingizni Java’ning yangiroq versiyasi bilan tuzmagan boʻlsangiz. maqsadli JVM versiyasi. Buni tushunish juda muhim, ayniqsa Docker, Kubernetes yoki (baraban rulosi!) Bulut kabi mavzular haqida gap ketganda. Nega? Keling, turli xil joylashtirish stsenariylarini ko'rib chiqaylik.

Minimalistik Java mikroservislarini joylashtirishga misol

Keling, bank misolida davom etaylik. Shunday qilib, bizda monobank.jar fayli (monolit) va yangi olingan riskengine.jar (birinchi xavfni tekshirish mikroservisi) mavjud. Faraz qilaylik, har ikkala ilovaga ham, dunyodagi boshqa ilovalar singari, .properties fayli kerak. Bizning holatda, u faqat ma'lumotlar bazasi URL manzili va hisobga olish ma'lumotlarini o'z ichiga oladi. Minimal joylashtirish quyidagi kabi ko'rinadigan ikkita katalogdan iborat bo'lishi mumkin: Birinchisi:

-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

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Ikkinchi:

-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

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Bu savolni ochiq qoldiradi: .properties va .jar fayllari serverga qanday etib boradi? Afsuski, ko'p javoblar bo'lishi mumkin.

Java mikroservislarini joylashtirish uchun Build Tools, SSH va Ansible-dan qanday foydalanish kerak

Zerikarli, ammo Java mikroservislarini qanday joylashtirish bo'yicha undan kam bo'lmagan ajoyib maslahat... Aslida tizim ma'murlari so'nggi 20 yil ichida har qanday Java server dasturini kompaniyalarda joylashtirgani kabi. Bu aralashma:
  • sevimli qurilish vositangiz (Maven, Gradle)
  • .jarlarni serverlarga nusxalash uchun yaxshi eski SSH/SCP
  • O'rnatish skriptlari va serverlarini boshqarish uchun Bash skriptlari
  • yoki undan ham yaxshiroq: ba'zi Ansible skriptlari.
Albatta, bu "nafas olish" bulutiga muhtoj bo'lgan innovatorlar uchun mos emas, avtomatik yuk balansi bilan serverlar va boshqalar. Bu haqiqiy zerikarli eski maktab. Biroq, u ishlaydi!

Java mikroservislarini joylashtirish uchun Dockerdan qanday foydalanish kerak

Keling, tanlovning shirin azobiga qaytaylik. Bir necha yil oldin Docker sahnaga chiqdi va u bilan konteynerlashdi. Agar siz u bilan hech qachon ishlamagan bo'lsangiz, bu erda oxirgi foydalanuvchilar va ishlab chiquvchilarga qaratilgan qisqacha tavsif:
  • Konteyner (soddalashtirilgan) yaxshi eski virtual mashinaga o'xshaydi, lekin "engilroq". Agar siz ushbu kontekstda "osonroq" nimani anglatishini tushunmasangiz, iltimos, Stackoverflow-da ushbu javobni tekshiring .
  • Konteyner o'zining ko'chmaligini kafolatlaydi. Ya'ni, u hamma joyda ishlaydi. Tanish tuyuladi, shunday emasmi?
Java mikroservislari bo'yicha qo'llanma.  2-qism: Joylashtirish va sinovdan o'tkazish - 2JVM ning portativligi va orqaga qarab muvofiqligini hisobga olsak, bu xususiyat unchalik afzallik emasdek tuyulishi kulgili. JVM.zip-ni istalgan Raspberry Pi (yoki hatto mobil telefon) ga yuklab olishingiz, uni chiqarib olishingiz va istalgan .jar faylini ishga tushirishingiz mumkin. Vaziyat PHP yoki Python kabi tillarda o'zgaradi, bu erda versiyalar mos kelmasligi yoki joylashtirish sozlamalari murakkabroq. Yoki Java ilovangiz boshqa koʻplab oʻrnatilgan xizmatlarga (toʻgʻri versiya raqamlari bilan) bogʻliq boʻlsa: masalan, Postgres maʼlumotlar bazasi yoki Redis kalit qiymatlari doʻkoni. Shunday qilib, Java mikroservislari uchun Docker yoki aniqrog'i Java ilovalari uchun asosiy afzalligi bu: Testcontainers kabi vositalar yordamida bir hil test yoki integratsiya muhitlarini o'rnatish qobiliyati . Murakkab ishlanmalarni o'rnatish osonroq. Discourse forum dasturini oling . Siz uni bitta Docker tasviri bilan o'rnatishingiz mumkin va unda Ruby-da yozilgan Discourse dasturidan Postgres ma'lumotlar bazasiga, Redis va oshxona lavabosiga qadar kerak bo'lgan hamma narsa mavjud. Agar sizning joylashtirishlaringiz o'xshash bo'lsa yoki siz chiroyli kichik Oracle ma'lumotlar bazasini ishga tushirmoqchi bo'lsangiz, Docker-ni sinab ko'ring. Xulosa qilib aytadigan bo'lsak, .jar fayliga qarash o'rniga, siz hozir:
  • jar faylingizni Docker tasviriga to'plang
  • ushbu rasmni shaxsiy Docker registriga suring
  • ushbu rasmni maqsadli platformangizda torting va ishga tushiring
  • yoki Docker tasvirini bevosita ishlab chiqarish tizimingizga nusxalang va uni ishga tushiring.

Java mikroservislarini o'rnatish uchun Docker Swarm yoki Kubernetesdan qanday foydalanish kerak

Aytaylik, siz Dockerni sinab ko'rishga qaror qildingiz. Har safar Java mikroxizmatini ishga tushirganingizda, siz .jar faylingizni birlashtirgan Docker tasvirini yaratasiz. Aytaylik, sizda ushbu Java mikroservislaridan bir nechtasi bor va siz ushbu xizmatlarni bir nechta mashinalarda (klasterda) joylashtirmoqchisiz. Savol tug'iladi: bu klasterni qanday boshqarish kerak? Docker konteynerlarini ishga tushiring, unumdorlikni tekshiring, yangilanishlarni o'rnating, tizimni kengaytiring (brrr)? Bu savolga ikkita mumkin bo'lgan javob - Docker Swarm va Kubernetes. Ikkala variant haqida ham batafsil ma'lumotga ega bo'lish, bu allaqachon uzoq bo'lgan o'quv qo'llanmasini juda uzun qiladi, ammo shuni ta'kidlash kerakki, ikkala variant ham klasteringizni boshqarish uchun YAML fayllarini yozishingizga tayanadi ( Yaml chekinish hikoyalariga qarang). Agar siz buni amalda qanday his qilishini bilmoqchi bo'lsangiz, Twitter qidiruviga xuddi shunday so'rovni kiriting. Shunday qilib, Java mikroservislaringizni joylashtirish jarayoni endi shunday ko'rinadi:
  • Docker Swarm/Kubernetesni sozlash va boshqarish
  • Docker uchun barcha qadamlar (yuqoriga qarang)
  • Hamma narsa ishlamaguncha ko'zlaringiz qonguncha YAML yozing va bajaring .

Java mikroservislarini qanday sinab ko'rish mumkin

Aytaylik, siz mikroservislarni ishlab chiqarishga joriy etishga qaror qildingiz. Hozir ishlab chiqish jarayonida n-mikroservislar integratsiyasini qanday sinab ko'rishimiz mumkin? Faqat uning qismlari emas, balki butun ish jarayoni ishlayotganligini qanday ko'rish mumkin? Amalda siz uchta usuldan birini qo'llashingiz mumkin:
  1. Bir oz ish bilan (agar siz Spring Boot kabi ramkalardan foydalanayotgan bo'lsangiz) barcha mikroservislaringizni bitta ishga tushirish sinfiga birlashtira olasiz va bitta Wrapper.java klassi yordamida barcha mikroservislarni yuklashingiz mumkin - bu kompyuteringizda yetarli xotira mavjudligiga qarab. ularni barcha mikroxizmatlaringizni boshqaring.
  2. Docker Swarm yoki Kubernetes sozlamalarini mahalliy sifatida nusxalashingiz mumkin.
  3. Endi mahalliy integratsiya testlarini o'tkazmang. Buning o'rniga, maxsus DEV/TEST muhitini o'rnating. Bu juda ko'p jamoalar mahalliy mikroservis sozlamalari og'rig'iga berilib ketganda qiladigan narsadir.
Bundan tashqari, Java mikroservislaringizdan tashqari, sizga ishlaydigan xabarlar brokeri (masalan, ActiveMQ yoki RabbitMQ) yoki Java mikroservislaringiz bir-biri bilan bog'lanishi uchun elektron pochta serveri yoki boshqa xabar almashish komponenti ham kerak bo'lishi mumkin. Bu DevOps tomonida murakkablikning sezilarli darajada kam baholanishiga olib keladi. Microservice Testing Libraries-ga qarang, ular bu og'riqni engillashtirishi mumkin. Qanday bo'lmasin, bu murakkablik bizni hozir gaplashadigan mikroservislarning umumiy muammolariga olib keladi. Yakuniy qismda biz Java mikroservislari haqida umumiy savollarni ko'rib chiqamiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION