JavaRush /Блоги Java /Random-TG /Дастур оид ба Microservices Java. Қисми 2: Ҷойгиркунӣ ва ...

Дастур оид ба Microservices Java. Қисми 2: Ҷойгиркунӣ ва санҷиш

Дар гурӯҳ нашр шудааст
Тарҷума ва мутобиқсозии Microservices Java: Дастури амалӣ . Истинод ба қисми якуми дастур . Дастур оид ба Microservices Java.  Қисми 2: Ҷойгиркунӣ ва санҷиш - 1Ҳама гуна барномаи Java дар тарафи server ва аз ин рӯ ҳама гуна хидматрасонии хурд танҳо як файл бо тамдиди .jar ё .war мебошад. Як чизи олӣ дар бораи экосистемаи Java, дурусттараш JVM вуҷуд дорад: ба шумо танҳо як маротиба codeи Java навиштан лозим аст ва он метавонад дар ҳама гуна системаи оператсионӣ кор кунад, ба шарте ки шумо codeи худро бо versionи навтари Java нисбат ба versionи худ тартиб надодаед. versionи JVM ҳадаф. Фаҳмидани ин муҳим аст, хусусан вақте ки сухан дар бораи мавзӯъҳо ба монанди Docker, Kubernetes ё (дром рол!) The Cloud меравад. Чаро? Биёед сенарияҳои гуногуни густаришро бубинем.

Намунаи ҷобаҷогузории минималистии Java Microservice

Биёед бо мисоли бонк идома диҳем. Ҳамин тавр, мо як файли monobank.jar (monolith) ва 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 ба server ворид мешаванд? Мутаассифона, шояд ҷавобҳои зиёд вуҷуд дошта бошанд.

Чӣ тавр истифода бурдани Асбобҳои Build, SSH ва Ansible барои ҷойгиркунии Java Microservices

Дилгиркунанда, вале на камтар аз маслиҳати олӣ дар бораи чӣ гуна ҷойгир кардани хидматҳои хурди Java... Воқеан, маҳз ҳамон гунае, ки маъмурони система ҳама гуна барномаи serverи Java-ро дар 20 соли охир дар ширкатҳо ҷойгир кардаанд. Ин омехта аст:
  • асбоби дӯстдоштаи сохтани шумо (Maven, Gradle)
  • хуб сола SSH / SCP барои нусхабардорӣ .jars ба serverҳо
  • Скриптҳои Bash барои идоракунии скриптҳои ҷойгиркунӣ ва serverҳо
  • ё ҳатто беҳтар: баъзе скриптҳои Ansible.
Албатта, ин барои навовароне мувофиқ нест, ки ба абри "нафаскашӣ", serverҳо бо мувозинати автоматии сарборӣ ва ғайра ниёз доранд. Ин мактаби кӯҳнаи воқеан дилгиркунанда аст. Бо вуҷуди ин, он кор мекунад!

Чӣ тавр Docker-ро барои ҷойгиркунии Java Microservices истифода бурдан мумкин аст

Баргардем ба азоби ширини интихоб. Якчанд сол пеш Докер ба саҳна омад ва бо он контейнерсозӣ. Агар шумо ҳеҷ гоҳ бо он кор накарда бошед, дар ин ҷо тавсифи кӯтоҳ барои корбарони ниҳоӣ ва таҳиягарон аст: Дастур оид ба Microservices Java.  Қисми 2: Ҷойгиркунӣ ва озмоиш - 2Аҷиб аст, ки бо назардошти қобor қабули JVM ва мутобиқати ақиб, ин хусусият чунин бартарият ба назар намерасад. Шумо метавонед танҳо JVM.zip-ро дар ҳама гуна Raspberry Pi (ё ҳатто телефони мобилӣ) зеркашӣ кунед, онро истихроҷ кунед ва ягон файли .jar -ро иҷро кунед. Вазъият дар забонҳое мисли PHP ё Python тағир меёбад, ки дар он номувофиқатии version ё танзимоти ҷойгиркунӣ мураккабтар аст. Ё агар барномаи Java-и шумо аз бисёр хидматҳои насбшудаи дигар вобаста бошад (бо рақамҳои versionи дуруст): масалан, пойгоҳи додаҳои Postgres ё мағозаи арзиши калидии Redis. Ҳамин тавр, бартарии асосии Docker for Java microservices, ё аниқтараш барои барномаҳои Java, ин аст: қобorяти насб кардани озмоиши якхела ё муҳити ҳамгироӣ бо истифода аз абзорҳо ба монанди Testcontainers . Таҷҳизоти мураккаб насб кардан осонтар аст. Нармафзори форуми Discourse -ро гиред . Шумо метавонед онро бо як тасвири Docker насб кунед ва он ҳама чизро дар бар мегирад, ки ба шумо аз нармафзори Discourse дар Ruby навишта шудааст, то базаи Postgres, Redis ва раковинаи ошхона. Агар ҷойгиркунии шумо шабеҳ бошад ё шумо хоҳед, ки пойгоҳи хуби Oracle-ро идора кунед, Docker-ро санҷед. Ҳамин тавр, барои ҷамъбаст, ба ҷои танҳо ба файли .jar нигоҳ кардан, шумо ҳоло:
  • файли jar-и худро ба тасвири Docker баста кунед
  • ин тасвирро ба феҳристи хусусии Docker тела диҳед
  • ин тасвирро дар платформаи ҳадафи худ кашед ва иҷро кунед
  • ё тасвири Docker-ро мустақиман ба системаи истеҳсолии худ нусхабардорӣ кунед ва онро иҷро кунед.

Чӣ тавр истифода бурдани Docker Swarm ё Kubernetes барои ҷойгиркунии Microservices Java

Биёед бигӯем, ки шумо қарор додед, ки Docker-ро санҷед. Ҳар дафъае, ки шумо микросервиси Java-ро ҷойгир мекунед, шумо тасвири Docker эҷод мекунед, ки файли .jar-и шуморо баста мекунад. Фарз мекунем, ки шумо якчанд хидматҳои хурди Java доред ва шумо мехоҳед ин хидматҳоро дар якчанд мошин (дар кластер) ҷойгир кунед. Саволе ба миён меояд: ин кластерро чй тавр идора кардан мумкин аст? Контейнерҳои Docker-ро иҷро кунед, иҷроишро тафтиш кунед, навсозиро ҷойгир кунед, системаро васеъ кунед (brrr)? Ду ҷавоби имконпазир ба ин савол Docker Swarm ва Kubernetes мебошанд. Муфассалтар дар бораи ҳарду вариант ин дарси тӯлониро хеле дароз мекунад, аммо мо бояд қайд кунем, ки ҳарду интихоб дар ниҳоят ба навиштани файлҳои YAML такя мекунанд (ниг. Ҳикояҳои Yaml ) барои идоракунии кластери шумо. Агар шумо хоҳед, ки бидонед, ки ин дар амал чӣ эҳсосотро ба вуҷуд меорад, танҳо як дархости шабеҳро дар ҷустуҷӯи Twitter нависед. Ҳамин тавр, раванди ҷобаҷогузорӣ барои микросервисҳои Java-и шумо ҳоло чунин менамояд:
  • Танзим ва идоракунии Docker Swarm/Kubernetes
  • Ҳама қадамҳо барои Docker (ба боло нигаред)
  • YAML-ро нависед ва иҷро кунед , то чашмонатон хун ояд , то ҳама чиз кор кунад.

Чӣ тавр озмоиши Microservices Java

Фарз мекунем, ки шумо тасмим гирифтед, ки микросервисҳоро дар истеҳсолот татбиқ кунед. Ҳоло мо чӣ гуна метавонем ҳамгироии n-microservices ҳангоми таҳияро санҷем? Чӣ тавр шумо мебинед, ки оё тамоми ҷараёни кор кор мекунад, на танҳо қисмҳои он? Дар амал шумо метавонед яке аз се усулро истифода баред:
  1. Бо як кори каме (агар шумо чаҳорчӯбаҳоеро ба мисли Spring Boot истифода баред), шумо метавонед ҳамаи микросервисҳои худро дар як синфи оғозёбӣ муттаҳид кунед ва ҳамаи микросервисҳоро бо истифода аз як синфи Wrapper.java бор кунед - вобаста аз он ки шумо дар мошини худ хотираи кофӣ доред ё не ҳамаи микросервисҳои худро идора кунед.
  2. Шумо метавонед танзимоти Docker Swarm ё Kubernetes-ро ба таври маҳаллӣ нусхабардорӣ кунед.
  3. Танҳо санҷишҳои ҳамгироиро ба таври маҳаллӣ иҷро накунед. Ба ҷои ин, муҳити бахшидашудаи DEV/TEST-ро ҷойгир кунед. Ин чизест, ки чанде аз дастаҳо воқеан ҳангоми гирифтор шудан ба дарди танзимоти микросервисҳои маҳаллӣ мекунанд.
Илова бар ин, ба ғайр аз микросервисҳои Java-и худ, эҳтимолан ба шумо брокери паёмнависии иҷрошаванда (масалан, ActiveMQ ё RabbitMQ) ё шояд serverи почтаи электронӣ ё ягон ҷузъи дигари паёмнависие, ки микросервисҳои Java-и шумо бояд бо ҳамдигар муошират кунанд, лозим аст. Ин боиси кам баҳодиҳии назарраси мураккабӣ дар тарафи DevOps мегардад. Ба китобхонаҳои озмоишии Microservice нигаред, онҳо метавонанд ин дардро сабук кунанд. Дар ҳар сурат, ин мураккабӣ моро ба мушкилоти умумии микросервисҳо меорад, ки мо ҳоло дар бораи онҳо сӯҳбат хоҳем кард. Дар қисми ниҳоӣ мо саволҳои умумиро дар бораи микросервисҳои Java баррасӣ хоҳем кард.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION