JavaRush /Java Blogu /Random-AZ /Java Mikroservisləri üçün bələdçi. Hissə 2: Yerləşdirmə v...

Java Mikroservisləri üçün bələdçi. Hissə 2: Yerləşdirmə və Sınaq

Qrupda dərc edilmişdir
Java Mikroservislərinin tərcüməsi və uyğunlaşdırılması : Praktik Bələdçi . Bələdçinin birinci hissəsinə keçid . Java Mikroservisləri üçün bələdçi.  2-ci hissə: Yerləşdirmə və Sınaq - 1İstənilən server tərəfi Java proqramı və buna görə də hər hansı mikroservis sadəcə .jar və ya .war genişləndirilməsi olan fayldır. Java ekosistemində, daha doğrusu JVM-də bir gözəl şey var: Java kodunu yalnız bir dəfə yazmalısınız və o, demək olar ki, istənilən əməliyyat sistemində işləyə bilər, şərti ki, siz öz kodunuzdan daha yeni Java versiyası ilə kodunuzu tərtib etməmisiniz. hədəf JVM versiyası. Xüsusilə Docker, Kubernetes və ya (baraban rulosu!) Bulud kimi mövzulara gəldikdə bunu başa düşmək vacibdir. Niyə? Müxtəlif yerləşdirmə ssenarilərinə baxaq.

Minimalist Java Mikroservis yerləşdirmə nümunəsi

Bank nümunəsi ilə davam edək. Beləliklə, bizdə monobank.jar faylı (monolit) və yeni çıxarılmış riskengine.jar (risk yoxlaması üçün ilk mikroservis) var. Həm də fərz edək ki, hər iki proqram, dünyanın hər bir tətbiqi kimi, .properties faylına ehtiyac duyur. Bizim vəziyyətimizdə o, yalnız verilənlər bazası URL və etimadnaməsini ehtiva edəcəkdir. Minimal yerləşdirmə bu kimi görünən iki kataloqdan ibarət ola bilər: Birincisi:

-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

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

-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 sualı açıq qoyur: .properties və .jar faylları serverə necə daxil olacaq? Təəssüf ki, çoxlu cavablar ola bilər.

Java Mikroservislərini yerləşdirmək üçün Quraşdırma Alətləri, SSH və Ansible-dan Necə İstifadə Edilir

Darıxdırıcı, lakin Java mikroservislərinin tətbiqi ilə bağlı heç də az olmayan əla məsləhət... Əslində, sistem administratorlarının son 20 il ərzində şirkətlərdə istənilən Java server proqramını yerləşdirdiyi şəkildə. Bu qarışıqdır:
  • sevimli qurma alətiniz (Maven, Gradle)
  • bankaları serverlərə köçürmək üçün yaxşı köhnə SSH/SCP
  • Yerləşdirmə skriptlərini və serverlərini idarə etmək üçün Bash skriptləri
  • və ya daha yaxşısı: bəzi Ansible skriptləri.
Əlbəttə ki, bu, "nəfəs alma" buluduna ehtiyacı olan innovatorlar, avtomatik yük balansı olan serverlər və s. üçün uyğun deyil. Bu əsl darıxdırıcı köhnə məktəbdir. Bununla belə işləyir!

Java Mikroservislərini yerləşdirmək üçün Dockerdən necə istifadə etməli

Qayıdaq seçimin şirin əzabına. Bir neçə il əvvəl Docker hadisə yerinə gəldi və bununla da konteynerləşdirmə. Əgər onunla heç vaxt işləməmisinizsə, burada son istifadəçilər və tərtibatçılar üçün qısa təsvir var:
  • Konteyner (sadələşdirilmiş) yaxşı köhnə virtual maşına bənzəyir, lakin "daha yüngül". Bu kontekstdə “daha ​​asan”ın nə demək olduğunu bilmirsinizsə, Stackoverflow-da bu cavabı yoxlayın .
  • Konteyner öz daşınmasına zəmanət verir. Yəni hər yerdə işləyir. Tanış səslənir, elə deyilmi?
Java Mikroservisləri üçün bələdçi.  2-ci hissə: Yerləşdirmə və Sınaq - 2JVM-nin daşınma qabiliyyətini və geriyə uyğunluğunu nəzərə alsaq, bu xüsusiyyət belə bir üstünlük kimi görünmür. Siz sadəcə olaraq JVM.zip-i istənilən Raspberry Pi-yə (və ya hətta mobil telefona) yükləyə, onu çıxara və istənilən .jar faylını işə sala bilərsiniz. PHP və ya Python kimi dillərdə vəziyyət dəyişir, burada versiya uyğunsuzluğu və ya yerləşdirmə parametrləri daha mürəkkəbdir. Və ya Java tətbiqiniz bir çox digər quraşdırılmış xidmətlərdən asılıdırsa (düzgün versiya nömrələri ilə): məsələn, Postgres verilənlər bazası və ya Redis açar dəyər anbarı. Beləliklə, Java mikroservisləri üçün Docker-in, daha dəqiq desək, Java proqramları üçün əsas üstünlüyü budur: Testcontainers kimi alətlərdən istifadə edərək homojenləşdirilmiş test və ya inteqrasiya mühitlərini qurmaq imkanı . Kompleks inkişafları quraşdırmaq daha asandır. Discourse forum proqramını götürün . Siz onu tək Docker təsviri ilə quraşdıra bilərsiniz və o, Ruby-də yazılmış Discourse proqram təminatından Postgres verilənlər bazasına, Redis və mətbəx yuvasına qədər sizə lazım olan hər şeyi ehtiva edir. Əgər yerləşdirmələriniz oxşardırsa və ya gözəl kiçik Oracle verilənlər bazası işlətmək istəyirsinizsə, Docker-i sınayın. Beləliklə, ümumiləşdirsək, sadəcə .jar faylına baxmaq əvəzinə, indi:
  • jar faylınızı Docker şəklinə yığın
  • bu şəkli şəxsi Docker reyestrinə itələyin
  • çəkin və bu şəkli hədəf platformanızda işləyin
  • və ya Docker şəklini birbaşa istehsal sisteminizə kopyalayın və işə salın.

Java Mikroservislərini yerləşdirmək üçün Docker Swarm və ya Kubernetesdən necə istifadə etmək olar

Deyək ki, siz Docker-i sınamağa qərar verdiniz. Hər dəfə Java mikroservisini yerləşdirdiyiniz zaman .jar faylınızı birləşdirən Docker təsviri yaradırsınız. Tutaq ki, sizdə bu Java mikroservislərindən bir neçəsi var və siz bu xidmətləri bir neçə maşında (klasterdə) yerləşdirmək istəyirsiniz. Sual yaranır: bu klasteri necə idarə etmək olar? Docker konteynerlərini işə salın, performansı yoxlayın, yeniləmələri yerləşdirin, sistemi genişləndirin (brrr)? Bu suala iki mümkün cavab Docker Swarm və Kubernetesdir. Hər iki variant haqqında təfərrüata varmaq bu uzun dərsliyi çox uzun edəcək, lakin biz qeyd edirik ki, hər iki variant son nəticədə klasterinizi idarə etmək üçün YAML faylları yazmağınıza (bax: Yaml girinti hekayələrinə ) əsaslanır . Bunun praktikada hansı hissləri doğurduğunu bilmək istəyirsinizsə, sadəcə Twitter axtarışına oxşar sorğu yazın. Beləliklə, Java mikroservisləriniz üçün yerləşdirmə prosesi indi belə görünür:
  • Docker Swarm/Kubernetes-in konfiqurasiyası və idarə edilməsi
  • Docker üçün bütün addımlar (yuxarıya baxın)
  • Hər şey işə yarayana qədər gözləriniz qanana qədər YAML yazın və icra edin .

Java Mikroservislərini necə sınaqdan keçirmək olar

Tutaq ki, siz mikroservisləri istehsalda tətbiq etmək qərarına gəldiniz. İndi inkişaf zamanı n-mikroservislərin inteqrasiyasını necə sınaqdan keçirə bilərik? Yalnız hissələrin deyil, bütün iş axınının işlədiyini necə görə bilərsiniz? Praktikada üç üsuldan birini istifadə edə bilərsiniz:
  1. Kiçik bir işlə (Əgər Spring Boot kimi çərçivələrdən istifadə edirsinizsə) siz bütün mikroxidmətlərinizi bir işəsalma sinfində birləşdirə və bütün mikroxidmətləri tək Wrapper.java sinfindən istifadə edərək yükləyə bilərsiniz – maşınınızda kifayət qədər yaddaşın olub-olmamasından asılı olaraq. onları bütün mikroservislərinizi idarə edin.
  2. Docker Swarm və ya Kubernetes parametrlərini yerli olaraq kopyalaya bilərsiniz.
  3. Sadəcə olaraq inteqrasiya testlərini artıq yerli olaraq keçirməyin. Bunun əvəzinə xüsusi bir DEV/TEST mühiti yerləşdirin. Bu, bir neçə komandanın yerli mikroservis quraşdırmalarının ağrısına tab gətirdiyi zaman etdikləri bir şeydir.
Bundan əlavə, Java mikroservislərinizdən əlavə, yəqin ki, sizə işləyən mesaj brokerinə (məsələn, ActiveMQ və ya RabbitMQ kimi) və ya e-poçt serverinə və ya Java mikroservislərinizin bir-biri ilə əlaqə saxlaması üçün lazım olan hər hansı digər mesajlaşma komponentinə ehtiyacınız olacaq. Bu, DevOps tərəfində mürəkkəbliyin əhəmiyyətli dərəcədə düzgün qiymətləndirilməməsinə gətirib çıxarır. Microservice Testing Libraries-ə nəzər salın, onlar bu ağrıları yüngülləşdirə bilərlər. Hər halda, bu mürəkkəblik bizi indi danışacağımız mikroservislərin ümumi problemlərinə gətirir. Yekun hissədə Java mikroservisləri ilə bağlı ümumi sualları əhatə edəcəyik.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION