JavaRush /Блоги Java /Random-TG /Дастур оид ба Microservices Java. Қисми 3: Саволҳои умумӣ...

Дастур оид ба Microservices Java. Қисми 3: Саволҳои умумӣ

Дар гурӯҳ нашр шудааст
Тарҷума ва мутобиқсозии Microservices Java: Дастури амалӣ . Қисмҳои пешинаи дастур: Биёед мушкилоти хоси микросервисҳоро дар Java дида бароем, ки аз чизҳои абстрактӣ сар карда, бо китобхонаҳои мушаххас ба анҷом мерасад. Дастур оид ба Microservices Java.  Қисми 3: саволҳои умумӣ - 1

Чӣ тавр микросервиси Java-ро устувор кардан мумкин аст?

Ба ёд оред, ки вақте шумо хидматҳои хурд эҷод мекунед, шумо аслан зангҳои усули JVM-ро барои зангҳои синхронии HTTP ё паёмнависии асинхронӣ тиҷорат мекунед. Дар ҳоле ки занги усулӣ асосан кафолат дода мешавад (бо қатъи ғайричашмдошти JVM), занги шабакавӣ бо нобаёнӣ эътимоднок аст. Он метавонад кор кунад, аммо бо сабабҳои гуногун кор накунад: шабака аз ҳад зиёд пурбор шудааст, қоидаи нави брандмауэр ҷорӣ шудааст ва ғайра. Барои дидани он, ки ин чӣ гуна фарқият дорад, биёед мисоли BillingService-ро дида бароем.

Намунаҳои устувории HTTP/REST

Фарз мекунем, ки муштариён метавонанд аз вебсайти ширкати шумо китобҳои электронӣ харанд. Барои ин, шумо наваHow як хидматрасонии биллингро татбиқ кардед, ки метавонад ба мағозаи онлайни шумо занг занад, то ҳисобнома-фактураҳои воқеии PDF-ро тавлид кунад. Ҳоло мо ин зангро ба таври синхронӣ тавассути HTTP анҷом медиҳем (гарчанде ки ба таври асинхронӣ занг задан ба ин хидмат мантиқтар аст, зеро тавлиди PDF набояд аз нуқтаи назари корбар фавран бошад. Мо дар мисоли оянда ҳамон мисолро истифода хоҳем бурд. бахш ва ба фарқиятҳо нигаред).
@Service
class BillingService {

    @Autowired
    private HttpClient client;

     public void bill(User user, Plan plan) {
        Invoice invoice = createInvoice(user, plan);
        httpClient.send(invoiceRequest(user.getEmail(), invoice), responseHandler());
        // ...
    }
}
Барои ҷамъбаст, дар ин ҷо се натиҷаи эҳтимолии ин занги HTTP мавҷуданд.
  • Хуб: занг гузашт, ҳисоб бомуваффақият сохта шуд.
  • ТАЪХИР: Занг гузашт, аммо барои анҷоми он хеле тӯл кашид.
  • ХАТОГӢ. Занг ноком шуд, шояд шумо дархости номувофиқ фиристодаед ё система кор намекунад.
Интизор меравад, ки ҳама гуна барномаҳо вазъиятҳои хатогиро ҳал кунанд, на танҳо бомуваффақият. Айнан ҳамин чиз ба микросервисҳо дахл дорад. Ҳатто агар ба шумо лозим аст, ки кӯшиши иловагӣ ба харҷ диҳед, то боварӣ ҳосил кунед, ки ҳамаи versionҳои ҷойгиршудаи API пас аз оғоз кардани ҷойгиркунӣ ва релизҳои микросервисҳои инфиродӣ мувофиқанд. Дастур оид ба Microservices Java.  Қисми 3: саволҳои умумӣ - 2Ҳодисаи ҷолибе, ки бояд ба назар гирифт, масъалаи таъхир аст. Масалан, диски сахти микросервиси посухдиҳанда пур аст ва ба ҷои гирифтани 50 мс, барои посух додан 10 сония вақт лозим аст. Вақте ки шумо сарбории муайянеро эҳсос мекунед, ин боз ҳам ҷолибтар мешавад, ки посухгӯии BillingService-и шумо тавассути системаи шумо пайраҳа мешавад. Ҳамчун мисоли равшан, тасаввур кунед, ки ошхона оҳиста-оҳиста «блок»-и ҳамаи пешхизматҳои тарабхонаро оғоз мекунад. Ин бахш бешубҳа шарҳи мукаммали мавзӯи устувории хидматрасонии хурдро пешниҳод карда наметавонад, аммо он ба таҳиягарон хотиррасон мекунад, ки ин воқеан чизест, ки бояд ҳал карда шавад ва пеш аз нашри аввалини шумо нодида гирифта намешавад (ки аз рӯи таҷриба, бештар аз он рӯй медиҳад. не). пайравӣ мекунад). Китобхонаи маъмуле, ки ба шумо дар бораи таъхир ва таҳаммулпазирии хатоҳо кӯмак мекунад, Hystrix-и Netflix мебошад. Ҳуҷҷатҳои онро барои амиқтар ба мавзӯъ истифода баред.

Намунаҳои устувории паёмнависӣ

Биёед ба алоқаи асинхронӣ бодиққат назар кунем. Барномаи BillingService мо ҳоло метавонад ба ин монанд бошад, ба шарте ки мо Spring ва RabbitMQ-ро барои паёмнависӣ истифода мебарем. Барои эҷод кардани ҳисоб, мо ҳоло ба брокери паёмии RabbitMQ паём мефиристем, ки дар он ҷо якчанд коргарон интизори паёмҳои нав ҳастанд. Ин коргарон ҳисобнома-фактураҳои PDF эҷод мекунанд ва онҳоро ба корбарони мувофиқ мефиристанд.
@Service
class BillingService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

     public void bill(User user, Plan plan) {
        Invoice invoice = createInvoice(user, plan);
        // преобразует счет, например, в json и использует его How тело messages
        rabbitTemplate.convertAndSend(exchange, routingkey, invoice);
        // ...
    }
}
Хатогиҳои эҳтимолӣ ҳоло каме фарқ мекунанд, зеро шумо дигар ҷавобҳои фаврии OK ё ERROR намегиред, мисли шумо бо пайвасти синхронии HTTP. Ба ҷои ин, мо метавонем се сенарияи эҳтимолӣ дошта бошем, ки метавонанд хато кунанд, ки метавонанд саволҳои зеринро ба вуҷуд оранд:
  1. Оё паёми ман аз ҷониби корманд расонида шуд ва истифода шуд? Ё гум шудааст? (Истифодабаранда ҳисобнома-фактураро қабул намекунад).
  2. Оё паёми ман танҳо як маротиба расонида шуд? Ё зиёда аз як маротиба расонида шуда, танҳо як маротиба коркард шудааст? (Истифодабаранда ҳисобнома-фактураҳои сершумор мегирад).
  3. Конфигуратсия: Аз "Оё ман калидҳои масир/номҳои дурустро барои мубодила истифода кардам" то "Оё брокери паёми ман дуруст танзим ва нигоҳдорӣ шудааст ё навбатҳои он пур аст?" (Истифодабаранда ҳисобнома-фактураро қабул намекунад).
Тавсифи муфассали ҳар як намунаи устувории микросервиси асинхронӣ аз доираи ин дастур берун аст. Бо вуҷуди ин, нишонаҳо дар самти дуруст мавҷуданд. Илова бар ин, онҳо аз технологияи паёмнависӣ вобаста хоҳанд буд. Мисолҳо:
  • Агар шумо татбиқи JMS-ро ба монанди ActiveMQ истифода баред, шумо метавонед суръатро барои кафолати ӯҳдадориҳои дуфазавӣ (XA) мубодила кунед.
  • Агар шумо RabbitMQ-ро истифода баред, аввал ин дастурро хонед ва сипас дар бораи тасдиқҳо, таҳаммулпазирии хатоҳо ва эътимоднокии паём дар маҷмӯъ бодиққат фикр кунед.
  • Шояд касе дар танзими serverҳои Active ё RabbitMQ, махсусан дар якҷоягӣ бо кластерсозӣ ва Docker (касе? ;))

Кадом чаҳорчӯба беҳтарин роҳи ҳалли микросервисҳои Java хоҳад буд?

Аз як тараф, шумо метавонед як варианти хеле маъмулро ба монанди Spring Boot насб кунед . Он эҷоди файлҳои .jar-ро хеле осон мекунад, бо веб-serverи дарунсохт ба монанди Tomcat ё Jetty меояд ва онро зуд ва дар ҳама ҷо иҷро кардан мумкин аст. Идеалӣ барои сохтани барномаҳои микросервис. Ба наздикӣ, якчанд чаҳорчӯбаҳои махсуси микросервис, Kubernetes ё GraalVM пайдо шуданд, ки қисман аз барномасозии реактивӣ илҳом гирифта шудаанд. Инҳоянд чанд рақибони ҷолиб: Quarkus , Micronaut , Vert.x , Helidon . Дар ниҳоят, шумо бояд барои худ интихоб кунед, аммо мо метавонем ба шумо як чанд тавсияе диҳем, ки шояд комилан стандартӣ набошанд: Ба истиснои Spring Boot, ҳама чаҳорчӯбаҳои хидматрасонии хурд одатан ба таври бениҳоят зуд ва бо оғози қариб фаврӣ ба фурӯш бароварда мешаванд. , истифодаи ками хотира, миқёспазирӣ то беохир. Маводҳои маркетингӣ маъмулан дорои графикаи таъсирбахше мебошанд, ки платформаро дар паҳлӯи бегемоти Spring Boot ё ба ҳамдигар нишон медиҳанд. Ин, дар назария, асабҳои таҳиягаронро, ки лоиҳаҳои кӯҳнаро дастгирӣ мекунанд, муҳофизат мекунад, ки баъзан барои бор кардан чанд дақиқа вақтро мегирад. Ё таҳиягароне, ки дар абр кор мекунанд, ки мехоҳанд миқдори зиёди микроконтейнерҳоро дар тӯли 50 ms лозиманд, оғоз ё қатъ кунанд. Дастур оид ба Microservices Java.  Қисми 3: саволҳои умумӣ - 3Аммо мушкилот дар он аст, ки ин (сунъии) металлҳои урён ва вақти дубора ҷойгиркунӣ ба муваффақияти умумии лоиҳа мусоидат намекунанд. Ҳадди аққал онҳо аз инфрасохтори қавӣ, ҳуҷҷатҳои қавӣ, ҷомеа ва малакаҳои қавии таҳиякунанда камтар таъсир мерасонанд. Пас, беҳтар аст, ки ба он чунин назар кунед: Агар то ҳол:
  • Шумо имкон медиҳед, ки ORM-ҳои шумо васеъ кор кунанд ва садҳо дархостҳоро барои ҷараёнҳои оддии корӣ тавлид кунанд.
  • Ба шумо гигаbyteҳои беохир лозим аст, то монолитҳои мураккаби худро иҷро кунед.
  • Шумо codeи зиёд доред ва мураккабӣ он қадар баланд аст (мо ҳоло дар бораи оғози эҳтимолан суст ба мисли Hibernate сухан намегӯем), ки барои боркунии замимаи шумо чанд дақиқа вақт лозим аст.
Агар ин тавр бошад, пас илова кардани масъалаҳои иловагии микосервис (муқовимати шабака, паёмнависӣ, DevOps, инфрасохтор) ба лоиҳаи шумо назар ба боркунии Hello, world-и холӣ таъсири бештаре хоҳад дошт. Ва барои дубора ҷойгиркунии гарм ҳангоми таҳия, шумо метавонед бо ҳалли монанди JRebel ё DCEVM хотима диҳед . Биёед лаҳзае барои иқтибос аз Саймон Браун бори дигар иқтибос кунем : " Агар одамон монолитҳоро (тез ва муассир) сохта натавонанд, онҳо новобаста аз сохтор, дар сохтани хидматҳои хурд (тез ва муассир) душвор хоҳанд буд ." Пас, чаҳорчӯбаҳои худро оқилона интихоб кунед.

Кадом китобхонаҳо барои зангҳои синхронии Java REST беҳтаранд?

Дар паҳлӯи техникии сатҳи паст, шумо эҳтимолан бо яке аз китобхонаҳои мизоҷҳои зерини HTTP хотима хоҳед ёфт: аслии Java HttpClient (аз Java 11), HttpClient Apache ё OkHttp . Аҳамият диҳед, ки ман дар ин ҷо "эҳтимол" мегӯям, зеро имконоти дигаре ҳастанд, ки аз мизоҷони хуби JAX-RS то муштариёни муосири WebSocket мебошанд . Дар ҳар сурат, тамоюл ба тавлиди муштарии HTTP, дур шудан аз муқовимат бо зангҳои HTTP мебошад. Барои ин ба шумо лозим аст, ки лоиҳаи OpenFeign ва ҳуҷҷатҳои онро ҳамчун нуқтаи ибтидоӣ барои хондани минбаъда дида бароед .

Беҳтарин брокерҳо барои паёмнависии асинхронии Java кадомҳоянд?

Эҳтимол, шумо бо маъмултарин ActiveMQ (Classic ё Artemis) , RabbitMQ ё Kafka дучор хоҳед шуд .
  • ActiveMQ ва RabbitMQ брокерҳои анъанавии паёмҳои мукаммал мебошанд. Онҳо ҳамкории "брокери оқил" ва "истифодабарандагони аблаҳ" -ро дар бар мегиранд.
  • Таърихан, ActiveMQ бартариҳои осони дохилкунӣ (барои санҷиш) дошт, ки онро бо танзимоти RabbitMQ/Docker/TestContainer сабук кардан мумкин аст.
  • Кафкаро брокери анъанавии «ақл» номидан мумкин нест. Ба ҷои ин, он як мағозаи паёмҳои нисбатан "гунг" аст (файли сабт), ки коркарди истеъмолкунандагони оқилро талаб мекунад.
Барои беҳтар фаҳмидани он, ки кай истифода бурдани RabbitMQ (ё дигар брокерҳои анъанавии паёмӣ) ё Кафка, ба ин пости асосӣ ҳамчун нуқтаи ибтидоӣ назар андозед. Умуман, ҳангоми интихоби брокери паёмнависӣ, кӯшиш кунед, ки сабабҳои сунъии иҷроишро сарфи назар кунед. Замоне буд, ки дастаҳо ва ҷамоатҳои онлайн пайваста дар бораи он ки чӣ қадар тез RabbitMQ ва чӣ қадар суст будани ActiveMQ баҳс мекарданд. Ҳоло ҳамон далелҳо дар бораи RabbitMQ оварда мешаванд, онҳо мегӯянд, ки он бо 20-30 ҳазор паём дар як сония оҳиста кор мекунад. Кафка дар як сония 100 ҳазор хабарро сабт мекунад. Руирост гӯем, ин гуна муқоисаҳо мисли муқоисаи гарм бо нарм аст. Илова бар ин, дар ҳарду ҳолат, арзишҳои интиқол метавонанд дар доираи паст то миёна бошанд, масалан, Alibaba Group. Аммо, гумон аст, ки шумо дар воқеият бо лоиҳаҳои ин миқёс (миллионҳо паём дар як дақиқа) дучор нашавед. Онҳо бешубҳа вуҷуд доранд ва онҳо мушкилот хоҳанд дошт. Баръакси дигар 99% лоиҳаҳои тиҷоратии "мунтазам" Java. Аз ин рӯ, ба мӯд ва таблиғ аҳамият надиҳед. Оқилона интихоб кунед.

Кадом китобхонаҳоро ман метавонам барои санҷиши хидматҳои микросервис истифода барам?

Ин аз стеки шумо вобаста аст. Агар шумо экосистемаи баҳорӣ ҷойгир карда бошед, оқилона мебуд, ки асбобҳои мушаххаси чаҳорчӯбаро истифода баред . Агар JavaEE чизе монанди Arquillian бошад . Мумкин аст, ки ба Docker ва китобхонаи воқеан хуби Testcontainers назар андозед , ки бахусус барои ба осонӣ ва зуд таъсис додани базаи Oracle барои таҳияи маҳаллӣ ё санҷишҳои ҳамгироӣ кӯмак мекунад. Барои санҷиши тақаллубии тамоми serverҳои HTTP, аз Wiremock санҷед . Барои санҷидани паёмнависии асинхронӣ, кӯшиш кунед ActiveMQ ё RabbitMQ -ро амалӣ кунед ва сипас бо истифода аз Awaitility DSL санҷишҳо нависед . Илова бар ин, ҳама асбобҳои муқаррарии шумо истифода мешаванд - Junit , TestNG for AssertJ ва Mockito . Лутфан қайд кунед, ки ин рӯйхати пурра нест. Агар шумо асбоби дӯстдоштаи худро дар ин ҷо наёбед, лутфан онро дар қисмати шарҳҳо ҷойгир кунед.

Чӣ тавр ба қайдгириро барои ҳама микросервисҳои Java фаъол кардан мумкин аст?

Бақайдгирӣ дар мавриди хидматрасонии хурд як мавзӯи ҷолиб ва хеле мураккаб аст. Ба ҷои доштани як файли журнал, ки шумо метавонед бо фармонҳои камтар ё grep идора кунед, шумо ҳоло n файли журнал доред ва шумо мехоҳед, ки онҳо аз ҳад зиёд пароканда нашаванд. Хусусиятҳои экосистемаи дарахтбурӣ дар ин мақола хуб тавсиф шудаанд (ба забони англисӣ). Ҳатман онро хонед ва ба бахши сабти мутамарказ аз нуқтаи назари микросервисҳо диққат диҳед . Дар амал, шумо бо равишҳои гуногун дучор хоҳед шуд: Мудири система скриптҳои муайянеро менависад, ки файлҳои логро аз serverҳои гуногун дар як файли журнал ҷамъоварӣ ва муттаҳид мекунанд ва онҳоро барои зеркашӣ дар serverҳои FTP ҷойгир мекунанд. Иҷрои комбинатсияи cat/grep/unig/sort дар сессияҳои мувозии SSH. Ин маҳз ҳамон чизест, ки Amazon AWS мекунад ва шумо метавонед ба мудири худ хабар диҳед. Асбоби монанди Graylog ё ELK Stack (Elasticsearch, Logstash, Kibana) -ро истифода баред

Чӣ тавр микросервисҳои ман ҳамдигарро пайдо мекунанд?

То ба ҳол, мо тахмин мекардем, ки микросервисҳои мо дар бораи ҳамдигар медонанд ва IPS-и мувофиқро медонанд. Биёед дар бораи конфигуратсияи статикӣ сӯҳбат кунем. Ҳамин тавр, монолитҳои бонкии мо [ip = 192.168.200.1] медонад, ки он бояд бо serverи хатар сӯҳбат кунад [ip = 192.168.200.2], ки дар файли хосиятҳо рамзгузорӣ шудааст. Бо вуҷуди ин, шумо метавонед чизҳоро динамиктар кунед:
  • Сервери конфигуратсияи ба абр асосёфтаро истифода баред, ки аз он ҳама хидматрасониҳои хурд конфигуратсияҳои худро ба ҷои ҷойгиркунии файлҳои application.properties дар хидматрасонии микрои худ мегиранд.
  • Азбаски намунаҳои хидматрасонии шумо метавонанд ҷойгиршавии онҳоро динамикӣ тағир диҳанд, ба хидматҳое назар кардан лозим аст, ки хидматҳои шумо дар куҷо зиндагӣ мекунанд, IP-ҳои онҳо ва чӣ гуна масир кардани онҳо медонанд.
  • Хозир, ки хама чиз динамик аст, проблемахои нав ба нав ба миён меоянд, масалан, ба таври автоматй интихоб кардани рохбар: усто кист, ки бо супоришхои муайян кор мекунад, то ки онхо, масалан, ду маротиба кор карда нашаванд? Вақте ки роҳбар ноком мешавад, кӣ иваз мекунад? Дар кадом асос ивазкунӣ сурат мегирад?
Умуман, ин аст он чизе ки оркестри хидматрасонии микросервис номида мешавад ва ин мавзӯи дигари бепоён аст. Китобхонаҳо ба монанди Eureka ё Zookeeper кӯшиш мекунанд, ки ин мушкилотро бо нишон додани кадом хидматҳо "ҳал" кунанд. Аз тарафи дигар, онҳо мураккабии иловагиро ҷорӣ мекунанд. Аз ҳар касе, ки ZooKeeper-ро насб кардааст, пурсед.

Бо истифода аз микросервисҳои Java чӣ гуна авторизатсия ва аутентификатсияро ташкил кардан мумкин аст?

Ин мавзуъ низ шоёни тахеин аст. Боз ҳам, имконот аз аутентификатсияи асосии HTTPS бо рамзҳои сахткардашуда бо чаҳорчӯбаҳои амнияти фармоишӣ то ба кор андохтани насби Oauth2 бо serverи авторизатсияи худ иборатанд.

Чӣ тавр ман метавонам боварӣ ҳосил кунам, ки ҳама муҳити ман якхелаанд?

Он чизе, ки барои ҷойгиркунӣ бе хидматрасонии хурд дуруст аст, барои ҷойгиркунӣ бо як хидмат низ дуруст аст. Маҷмӯаи Docker/Testcontainers ва Scripting/Ansible-ро санҷед.

Саволе нест: мухтасар дар бораи YAML

Биёед як лаҳза аз китобхонаҳо ва масъалаҳои марбута дур шавем ва зуд ба Ямл назар андозем. Ин формати файл воқеан ҳамчун формат барои "навиштани конфигуратсия ҳамчун code" истифода мешавад. Он инчунин аз ҷониби асбобҳои оддӣ ба монанди Ansible ва гигантҳо ба монанди Kubernetes истифода мешавад. Барои эҳсос кардани дарди қафомонии YAML, кӯшиш кунед, ки файли оддии Ansible нависед ва бубинед, ки пеш аз он ки он мувофиқи интизорӣ кор кунад, то чӣ андоза шумо файлро таҳрир кунед. Ва ин гарчанде ки формат аз ҷониби ҳама IDE-ҳои асосӣ дастгирӣ мешавад! Пас аз он, барои анҷом додани хондани ин дастур баргардед.
Yaml:
  - is:
    - so
    - great

Дар бораи муомилоти тақсимшуда чӣ гуфтан мумкин аст? Санҷиши иҷроиш? Дигар мавзӯъҳо?

Шояд рӯзе дар нашрҳои ояндаи дастур. Ҳоло, ин ҳама аст. Бо мо бимонед!

Масъалаҳои консептуалӣ бо Microservices

Ба ғайр аз мушкилоти мушаххаси хидматрасонии микросервисҳо дар Java, мушкилоти дигаре низ ҳастанд, ки бигӯем, ки дар ҳама гуна лоиҳаҳои хидматрасонии хурд пайдо мешаванд. Онҳо асосан ба созмон, даста ва идора дахл доранд.

Мутобиқати Frontend ва Backend

Мутобиқати Frontend ва Backend мушкилоти хеле маъмул дар бисёр лоиҳаҳои микросервис мебошад. Ин чӣ маъно дорад? Танҳо дар он аст, ки дар монолитҳои хуби кӯҳна, таҳиягарони интерфейси веб як манбаи мушаххас барои ба даст овардани маълумот доштанд. Дар лоиҳаҳои хидматрасонии хурд, таҳиягарони пешрафта ногаҳон n манбаи гирифтани маълумотро доранд. Тасаввур кунед, ки шумо дар Java як навъ лоиҳаи микросервисҳои IoT (Internet of Things) эҷод карда истодаед. Фарз мекунем, ки шумо мошинҳои геодезӣ ва печҳои саноатиро дар тамоми Аврупо идора мекунед. Ва ин танӯрҳо ба шумо дар бораи ҳарорати худ ва монанди инҳо мунтазам навсозиҳо мефиристанд. Дер ё зуд шумо метавонед дар интерфейси администратор танӯрҳо пайдо кунед, эҳтимол бо истифода аз хидматҳои микросервисҳои "ҷустуҷӯи оташдон". Вобаста аз он, ки ҳамтоёни пуштибони шумо то чӣ андоза қонунҳои тарҳрезии домен ё хидматрасонии хурдро ба кор мебаранд, хидматрасонии "ёфт кардани танӯр" метавонад танҳо ID-ҳои танӯрро баргардонад, на дигар маълумот ба монанди намуд, модел ё макон. Барои ин кор, ба таҳиягарони фронтенд лозим меояд, ки як ё н занги иловагӣ (вобаста ба татбиқи пейджинг) дар хидмати микросервиси "дастрас кардани маълумотҳои оташдон" бо ID-ҳое, ки аз микросервиси аввал гирифтаанд, анҷом диҳанд. Дастур оид ба Microservices Java.  Қисми 3: саволҳои умумӣ - 4Ва гарчанде ки ин як мисоли оддӣ аст, гарчанде ки аз лоиҳаи воқеӣ (!) гирифта шудааст, ҳатто он мушкилоти зеринро нишон медиҳад: супермаркетҳо хеле маъмул гаштаанд. Ин барои он аст, ки бо онҳо ба шумо лозим нест, ки ба 10 ҷои гуногун барои харидани сабзавот, лимонад, пиццаи яхкардашуда ва коғази ташноб равед. Ба ҷои ин, шумо ба як ҷо меравед. Ин осонтар ва тезтар аст. Ҳамин чиз ба таҳиягарони фронт ва микросервис дахл дорад.

Интизориҳои идоракунӣ

Менеҷмент дар таассуроти иштибоҳ қарор дорад, ки онҳо ҳоло бояд шумораи беохири таҳиягаронро барои як лоиҳа (умумӣ) киро кунанд, зеро таҳиягарон акнун метавонанд комилан мустақилона аз ҳамдигар кор кунанд, ҳар кадом дар хидмати микросервиси худ. Танҳо як кори каме ҳамгироӣ дар ниҳоят лозим аст (чанд пеш аз оғози кор). Дастур оид ба Microservices Java.  Қисми 3: саволҳои умумӣ - 5Дар асл, ин равиш хеле мушкил аст. Дар сархатҳои минбаъда мо кӯшиш хоҳем кард, ки чаро инро шарҳ диҳем.

"Порчаҳои хурдтар" ба "пораҳои беҳтар" баробар нестанд

Фарз кардан хатои калон мебуд, ки codeи ба 20 қисм тақсимшуда ҳатман аз як порчаи пурра сифати баландтар хоҳад дошт. Ҳатто агар мо сифатро аз нуқтаи назари техникӣ қабул кунем ҳам, хидматҳои инфиродии мо то ҳол метавонанд 400 дархости Hibernate-ро барои интихоби корбар аз пойгоҳи додаҳо иҷро кунанд ва қабатҳои codeи дастгирӣнашавандаро тай кунанд. Бори дигар, мо ба иқтибосҳои Саймон Браун бармегардем: агар шумо монолитҳоро дуруст сохта натавонед, сохтани микросервисҳои дуруст душвор хоҳад буд. Дар бораи таҳаммулпазирии хатогиҳо дар лоиҳаҳои хидматрасонии хурд сухан гуфтан хеле дер аст. Ба дараҷае, ки дидани он ки чӣ тавр микросервисҳо дар лоиҳаҳои воқеӣ кор мекунанд, баъзан даҳшатнок аст. Сабаби ин дар он аст, ки таҳиягарони Java на ҳамеша омодаанд, ки таҳаммулпазирии хатогиҳо, шабакасозӣ ва дигар мавзӯъҳои марбутро дар сатҳи зарурӣ омӯзанд. Худи "порчаҳо" хурдтаранд, аммо "қисмҳои техникӣ" калонтаранд. Тасаввур кунед, ки аз дастаи микросервисҳои шумо хоҳиш карда мешавад, ки барои ворид шудан ба системаи пойгоҳи додаҳо як хидмати техникӣ нависад, масалан:
@Controller
class LoginController {
    // ...
    @PostMapping("/login")
    public boolean login(String username, String password) {
        User user = userDao.findByUserName(username);
        if (user == null) {
            // обработка варианта с несуществующим пользователем
            return false;
        }
        if (!user.getPassword().equals(hashed(password))) {
            // обработка неверного пароля
            return false;
        }
        // 'Ю-ху, залогинorсь!';
        // установите cookies, делайте, что угодно
        return true;
    }
}
Акнун дастаи шумо метавонад қарор кунад (ва шояд ҳатто одамони тоҷирро бовар кунонад) ки ин ҳама хеле содда ва дилгиркунанда аст, ба ҷои навиштани хидмати воридшавӣ, беҳтар аст, ки хидматрасонии воқеан муфиди UserStateChanged-ро бидуни ягон оқибатҳои воқеӣ ва воқеии тиҷорат нависед. Ва азбаски баъзе одамон дар айни замон ба Java мисли динозавр муносибат мекунанд, биёед микросервиси UserStateChanged-и худро дар Эрланги мӯд нависем. Ва биёед кӯшиш кунем, ки дарахтони сурху сиёҳро дар ҷое истифода барем, зеро Стив Йегге навиштааст, ки шумо бояд онҳоро дарун донед, то ба Google муроҷиат кунед. Аз нуқтаи назари ҳамгироӣ, нигоҳдорӣ ва тарҳрезии умумӣ, ин ба мисли навиштани қабатҳои рамзи спагетти дар дохor як монолит бад аст. Намунаи сунъӣ ва оддӣ? Ин дуруст аст. Бо вуҷуди ин, ин метавонад дар воқеият рӯй диҳад.

Қисмҳои камтар - фаҳмиши камтар

Пас табиатан савол дар бораи фаҳмидани система дар маҷмӯъ, равандҳо ва ҷараёнҳои кори он ба миён меояд, аммо дар айни замон шумо ҳамчун таҳиякунанда танҳо барои кор кардан дар микросервиси ҷудошудаи худ масъул ҳастед [95: login-101: updateUserProfile]. Он бо параграфи қаблӣ мувофиқат мекунад, аммо вобаста ба созмони шумо, сатҳи эътимод ва муоширати шумо, ин метавонад боиси нофаҳмиҳои зиёд, китф даркашӣ ва гунаҳкорӣ гардад, агар дар занҷири хидматрасонии микросервис тасодуфӣ рух диҳад. Ва касе нест, ки масъулияти пурраи ҳодисаро ба дӯш гирад. Ва ин умуман масъалаи беинсофӣ нест. Дарвоқеъ, пайваст кардани қисмҳои гуногун ва дарк кардани ҷои онҳо дар тасвири умумии лоиҳа хеле душвор аст.

Алоқа ва хизматрасонӣ

Дараҷаи алоқа ва хидмат вобаста ба андозаи ширкат хеле фарқ мекунад. Бо вуҷуди ин, муносибати умумӣ равшан аст: ҳар қадар бештар, мушкилот бештар.
  • Микросервиси №47-ро кӣ идора мекунад?
  • Оё онҳо танҳо як versionи нави номувофиқи микросервисро ҷойгир карданд? Ин дар куҷо ҳуҷҷатгузорӣ шудааст?
  • Барои дархост кардани хусусияти нав ман бояд бо кӣ сӯҳбат кунам?
  • Пас аз он ки ягона шахсе, ки ин забонро медонист, аз ширкат хориҷ шуд, ки он микросервисро дар Эрланг дастгирӣ мекунад?
  • Ҳамаи дастаҳои хидматрасонии хурди мо на танҳо бо забонҳои гуногуни барномасозӣ, балки дар минтақаҳои гуногуни вақт кор мекунанд! Мо хамаи инро чй тавр дуруст координация мекунем?
Дастур оид ба Microservices Java.  Қисми 3: саволҳои умумӣ - 6Нуктаи асосӣ дар он аст, ки ба монанди DevOps, равиши мукаммал ба хидматрасонии хурд дар як ширкати бузург, шояд ҳатто байналмилалӣ, бо як қатор мушкилоти иловагии иртиботӣ меояд. Ва ширкат бояд ба ин ҷиддӣ омода шавад.

хулосахо

Пас аз хондани ин мақола, шумо шояд фикр кунед, ки муаллиф як мухолифи ашаддии микросервисҳост. Ин комилан дуруст нест - ман аслан кӯшиш мекунам нуктаҳоеро қайд кунам, ки дар мусобиқаи девона барои технологияҳои нав кам одамон ба онҳо диққат медиҳанд.

Микросервисҳо ё монолит?

Истифодаи микросервисҳои Java дар ҳама вақт ва дар ҳама ҷо як чизи шадид аст. Дигараш ба монанди садҳо модулҳои хуби кӯҳнаи Maven дар монолит табдил меёбад. Вазифаи шумо ин аст, ки тавозуни дурустро пайдо кунед. Ин махсусан барои лоиҳаҳои нав дуруст аст. Ҳеҷ чиз шуморо аз гирифтани равиши консервативии "монолитӣ" ва эҷоди камтари модулҳои хуби Maven боздорад, на аз бист хидматрасонии ба абр омода оғоз кардан.

Микросервисҳо мураккабии иловагӣ эҷод мекунанд

Дар хотир доред, ки чӣ қадаре ки шумо микросервисҳои бештар дошта бошед ва DevOps-и ҳақиқӣ камтар дошта бошед (не, иҷро кардани якчанд скриптҳои Ansible ё ҷойгиркунӣ дар Heroku ба ҳисоб намеравад!), ҳамон қадар мушкилоти бештаре дар ин раванд пайдо мешаванд. Ҳатто хондани то охири бахши ин дастур, ки ба саволҳои умумӣ дар бораи микросервисҳои Java бахшида шудааст, кори хеле дилгиркунанда аст. Дар бораи татбиқи роҳҳои ҳалли ҳамаи ин мушкилоти инфрасохторӣ сахт фикр кунед ва шумо ногаҳон хоҳед фаҳмид, ки ин дигар на ҳама дар бораи барномасозии тиҷоратӣ (он чизе, ки шумо барои иҷрои он пул мегиред), балки дар бораи ислоҳ кардани технологияи бештар дар технологияи бештар аст. Шива Прасад Редди онро дар блоги худ ба таври комил ҷамъбаст кард : "Шумо намедонед, ки чӣ қадар даҳшатнок аст, вақте ки як даста 70% вақти худро барои мубориза бо ин инфрасохтори муосир сарф мекунад ва танҳо 30% вақт барои иҷрои мантиқи воқеии тиҷорат боқӣ мемонад. Шива Прасад Редди

Оё барои сохтани микросервисҳои Java меарзад?

Барои посух додан ба ин савол, ман мехостам ин мақоларо бо тизери хеле беақл ва мусоҳиба ба Google ба охир расонам. Агар шумо ҷавоби ин саволро аз таҷриба донед, ҳатто агар он ба хидматҳои микросервис ҳеҷ иртиботе надошта бошад, шумо метавонед барои равиши микросервис омода бошед.

Сенария

Тасаввур кунед, ки шумо як монолитии Java доред, ки дар serverи хурдтарин Hetzner танҳо кор мекунад . Ин ба serverи пойгоҳи додаи шумо низ дахл дорад, он инчунин дар мошини шабеҳи Hetzner кор мекунад . Ва биёед низ фарз кунем, ки монолити Java-и шумо метавонад ҷараёнҳои корро идора кунад, масалан, бақайдгирии корбар ва шумо на садҳо дархостҳои махзани маълумотро дар як ҷараёни корӣ, балки шумораи оқилонатар эҷод мекунед (<10).

Савол

Монолити Java (ҳавзи пайвастшавӣ) дар serverи пойгоҳи додаи шумо бояд чанд пайвасти пойгоҳи додаҳо кушояд? Барои чӣ ин? Ба фикри шумо, чанд корбари фаъоли ҳамзамон монолитии шумо метавонад (тақрибан) миқёс дошта бошад?

Ҷавоб

Ҷавоби худро ба ин саволҳо дар бахши шарҳҳо гузоред. Ман ҳама ҷавобҳоро бесаброна интизорам. Дастур оид ба Microservices Java.  Қисми 3: саволҳои умумӣ - 8Акнун як хулосаи худро бароред. Агар шумо то охир хонед, мо аз шумо хеле миннатдорем!
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION