Тарҷума ва мутобиқсозии Microservices Java: Дастури амалӣ . Истинод ба қисми якуми дастур . Ҳама гуна барномаи 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.
Чӣ тавр Docker-ро барои ҷойгиркунии Java Microservices истифода бурдан мумкин аст
Баргардем ба азоби ширини интихоб. Якчанд сол пеш Докер ба саҳна омад ва бо он контейнерсозӣ. Агар шумо ҳеҷ гоҳ бо он кор накарда бошед, дар ин ҷо тавсифи кӯтоҳ барои корбарони ниҳоӣ ва таҳиягарон аст:- Контейнер (соддашуда) ба мошини хуби виртуалии кӯҳна монанд аст, аммо "сабуктар". Агар шумо намефаҳмед, ки "осонтар" дар ин замина чӣ маъно дорад, лутфан ин ҷавобро дар Stackoverflow санҷед .
- Контейнер интиқоли худро кафолат медиҳад. Яъне дар ҳама ҷо кор мекунад. Ошно ба назар мерасад, ҳамин тавр не?
- файли 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 ҳангоми таҳияро санҷем? Чӣ тавр шумо мебинед, ки оё тамоми ҷараёни кор кор мекунад, на танҳо қисмҳои он? Дар амал шумо метавонед яке аз се усулро истифода баред:- Бо як кори каме (агар шумо чаҳорчӯбаҳоеро ба мисли Spring Boot истифода баред), шумо метавонед ҳамаи микросервисҳои худро дар як синфи оғозёбӣ муттаҳид кунед ва ҳамаи микросервисҳоро бо истифода аз як синфи Wrapper.java бор кунед - вобаста аз он ки шумо дар мошини худ хотираи кофӣ доред ё не ҳамаи микросервисҳои худро идора кунед.
- Шумо метавонед танзимоти Docker Swarm ё Kubernetes-ро ба таври маҳаллӣ нусхабардорӣ кунед.
- Танҳо санҷишҳои ҳамгироиро ба таври маҳаллӣ иҷро накунед. Ба ҷои ин, муҳити бахшидашудаи DEV/TEST-ро ҷойгир кунед. Ин чизест, ки чанде аз дастаҳо воқеан ҳангоми гирифтор шудан ба дарди танзимоти микросервисҳои маҳаллӣ мекунанд.
GO TO FULL VERSION