Java mikroservisleriniň terjimesi we uýgunlaşmagy : Amaly gollanma . Gollanmanyň öňki bölümleri:
Geliň, abstrakt zatlardan başlap, anyk kitaphanalar bilen gutarýan Java-daky mikroservisleriň mahsus meselelerine seredeliň.
Java mikroservisini nädip çydamly etmeli?
Mikroservis döredeniňizde, sinhron HTTP jaňlary ýa-da asynkron habarlaşma üçin JVM usuly bilen söwda edýändigiňizi ýadyňyzdan çykarmaň. Usul jaňynyň tamamlanmagy kepillendirilse-de (garaşylmadyk JVM ýapylmagyny gadagan edýär), set jaňy adaty ýagdaýda ygtybarly däl. Işläp biler, ýöne dürli sebäplere görä işlemän biler: tor aşa ýüklendi, täze diwar gorag düzgüni ýerine ýetirildi we ş.m. Munuň nähili üýtgeýändigini görmek üçin, BillingService mysalyna göz aýlalyň.HTTP / REST çydamlylyk nusgalary
Müşderiler kompaniýanyň kitaphanasynda elektron kitap satyn alyp bilerler diýeliň. Munuň üçin onlaýn dükanyňyza hakyky PDF hasap-fakturalaryny öndürip bilýän töleg mikroservisini durmuşa geçirdiňiz. Häzirlikçe, bu jaňy HTTP arkaly sinhron ederis (bu hyzmaty asynkron diýip atlandyrmagyň has manysy bar, sebäbi PDF nesli ulanyjynyň nukdaýnazaryndan dessine bolmaly däldir. Geljekde şol bir mysaly ulanarys) bölüme serediň we tapawutlara serediň).@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());
// ...
}
}
Jemläp aýtsak, ine şu HTTP jaňynyň üç mümkin netijesi.
- Bolýar: jaň geçdi, hasap üstünlikli döredildi.
- GÜN: Çagyryş geçdi, ýöne gutarmak üçin gaty köp wagt gerek boldy.
- RAL .YŞLYK Çagyryş şowsuz boldy, gabat gelmeýän haýyş iberen bolmagyňyz mümkin ýa-da ulgam işlemän biler.
Habarlaşma çydamlylyk nusgalary
Asynkron aragatnaşyga has içgin seredeliň. BillingService programmamyz, habarlaşmak üçin Bahar we RabbitMQ ulanýarys öýdüp, indi şuňa meňzeş bir zat bolup biler. Hasap döretmek üçin, indi RabbitMQ habar dellalymyza habar iberýäris, ol ýerde täze habarlara garaşýan birnäçe işçi bar. Bu işçiler PDF hasap-fakturalaryny döredýärler we degişli ulanyjylara iberýärler.@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);
// ...
}
}
Mümkin bolan ýalňyşlyklar häzir birneme üýtgeşik görünýär, sebäbi sinhron HTTP birikmesi ýaly derrew OK ýa-da RALRYŞ jogaplary almarsyňyz. Munuň ýerine, aşakdaky soraglary döredip biljek üç sany ssenariýa bolup biler.
- Habarym işgär tarapyndan gowşuryldy we ulanyldymy? Ora-da ýitdimi? (Ulanyjy hasap-faktura almaýar).
- Habarym diňe bir gezek gowşuryldymy? Ora-da bir gezekden köp gowşuryldy we diňe bir gezek işledildi? (Ulanyjy birnäçe hasap-faktura alar).
- Sazlama: "Bir exchangea üçin dogry marşrut düwmelerini / atlaryny ulandymmy" -dan "Habar dellalym dogry düzülendirmi ýa-da onuň nobatlary dolymy?" (Ulanyjy hasap-faktura almaýar).
- “ActiveMQ” ýaly JMS ýerine ýetirişlerini ulanýan bolsaňyz, iki fazaly (XA) kepillik üçin tizligi söwda edip bilersiňiz.
- RabbitMQ ulanýan bolsaňyz, ilki bilen şu gollanmany okaň, soňra tassyklamalar, näsazlyklara çydamlylyk we umuman habar ygtybarlylygy barada ünsli pikirleniň.
- Belki, kimdir biri “Active” ýa-da “RabbitMQ” serwerlerini sazlamakda, esasanam klaster we Docker (kimdir biri ?;) Bilen utgaşdyryp bilýän bolsa gerek?
Java mikroservisleri üçin haýsy çarçuwa iň oňat çözgüt bolup biler?
Bir tarapdan, “Bahar boot” ýaly iň meşhur warianty gurup bilersiňiz . .Jar faýllaryny döretmegi aňsatlaşdyrýar, Tomcat ýa-da Jetty ýaly içerki web serweri bilen gelýär we çalt we islendik ýerde işledilip bilner. Mikroservis programmalaryny gurmak üçin amatly. Recentlyakynda, reaktiw programmirlemekden bölekleýin ylhamlanan Kubernetes ýa-da GraalVM atly birnäçe ýöriteleşdirilen mikroservis çarçuwasy peýda boldy. Ine, ýene-de birnäçe gyzykly bäsdeş: Quarkus , Micronaut , Vert.x , Helidon . Netijede, özüňiz saýlamaly bolarsyňyz, ýöne size doly standart bolup bilmejek birnäçe maslahat berip bileris: “Bahar Boot” -dan başga ähli mikroservis çarçuwalary adatça ajaýyp çalt satylýar we derrew işe başlaýar. , ýadyň pes ulanylmagy, çäksizligiň ulalmagy. Marketing materiallary, adatça, “Behemoth Spring Boot” -yň gapdalynda ýa-da biri-birine görkezýän täsirli grafikalary görkezýär. Bu, teoriýa boýunça, käwagt ýüklemek üçin birnäçe minut wagt alýan miras taslamalaryny goldaýan döredijileriň nerwini halas edýär. Ora-da häzirki wagtda 50 ms içinde zerur bolan köp mikro-konteýnerleri başlamak / duruzmak isleýän bulutda işleýän döredijiler. Mesele, bu (emeli) ýalaňaç metal işe başlamagyň we gaýtadan işlemegiň wagtynyň taslamanyň umumy üstünligine goşant goşmazlygydyr. Iň bärkisi, güýçli çarçuwaly infrastruktura, güýçli resminamalar, jemgyýet we güýçli dörediji başarnyklaryna has az täsir edýär. Şonuň üçin oňa şeýle seretmek has gowudyr: Şu wagta çenli:- Simpleönekeý iş akymlary üçin ýüzlerçe talap döredip, ORM-leriňiziň giň ýaýramagyna ýol berýärsiňiz.
- Ortaça çylşyrymly monolitiňizi işletmek üçin tükeniksiz gigabaýt gerek.
- Sizde gaty köp kod bar we çylşyrymlylygy gaty ýokary (häzir Gibernate ýaly haýal başlaýanlar hakda gürleşemzok), programmaňyzy ýüklemek üçin birnäçe minut gerek.
Sinhron Java REST jaňlary üçin haýsy kitaphanalar iň gowusy?
Pes derejeli tehniki tarapdan, aşakdaky HTTP müşderi kitaphanalarynyň biri bilen gutararsyňyz: Java-yň ýerli HttpClient (Java 11-den bäri), Apache-iň HttpClient ýa-da OkHttp . Bu ýerde "ähtimal" diýýändigime üns beriň, sebäbi köne JAX-RS müşderilerinden başlap, häzirki WebSocket müşderilerine çenli başga mümkinçilikler bar . Her niçigem bolsa, tendensiýa HTTP müşderisini döretmek, HTTP bilen özüňizi çagyrmakdan daşlaşmak. Munuň üçin “OpenFeign” taslamasyna we resminamalaryny has giňişleýin okamak üçin başlangyç nokat hökmünde gözden geçirmeli .Asynkron Java habarlaşma üçin iň oňat dellallar haýsylar?
Meşhur ActiveMQ (Classic ýa-da Artemis) , RabbitMQ ýa-da Kafka bilen tanyşarsyňyz .- “ActiveMQ” we “RabbitMQ” adaty, doly hukukly dellallardyr. Olara “akylly dellal” bilen “samsyk ulanyjylaryň” gatnaşygy degişlidir.
- Taryhy taýdan, “ActiveMQ” “RabbitMQ / Docker / TestContainer” sazlamalary bilen ýeňilleşdirilip bilinjek aňsat giriş (synag üçin) peýdasyna eýe boldy.
- Kafkany adaty “akylly” dellal diýip atlandyryp bolmaz. Munuň ýerine, akylly sarp edijileriň işlemegini talap edýän birneme "lal" habar dükany (gündelik faýl).
Mikroservisleri barlamak üçin haýsy kitaphanalary ulanyp bilerin?
Bu siziň stakanyňyza bagly. “Bahar” ekosistemasy ýerleşdirilen bolsa, çarçuwanyň ýörite gurallaryny ulanmak akylly bolardy . JavaEE Arquillian ýaly bir zat bolsa . Localerli ösüş ýa-da integrasiýa synaglary üçin Oracle maglumatlar bazasyny aňsat we çalt döretmäge kömek edýän Docker we hakykatdanam gowy Testcontainers kitaphanasyna göz aýlamak peýdaly bolup biler . Tutuş HTTP serwerlerini masgaralamak üçin Wiremock-a göz aýlaň . Asynkron habarlaşmany barlamak üçin, ActiveMQ ýa-da RabbitMQ ulanyp görüň we Awaitility DSL ulanyp synag ýazyň . Mundan başga-da, adaty gurallaryňyzyň hemmesi ulanylýar - AssitJ we Mockito üçin Junit , TestNG . Munuň doly sanaw däldigini ýadyňyzdan çykarmaň. Bu ýerde halaýan guralyňyzy tapmasaňyz, teswirler bölüminde goýmagyňyzy haýyş edýäris.Javahli Java mikroservisleri hasaba almagy nädip açmaly?
Mikroservis ýagdaýynda girmek gyzykly we has çylşyrymly mowzuk. Az ýa-da grep buýruklary bilen dolandyryp boljak bir log faýlyňyzyň ýerine, indi n log faýllaryňyz bar we olaryň gaty ýaýramazlygyny isleýärsiňiz. Hasaba alyş ekosistemasynyň aýratynlyklary bu makalada (iňlis dilinde) gowy beýan edilýär. Ony hökman okaň we mikroservis nukdaýnazaryndan merkezleşdirilen hasaba alyş bölümine üns beriň . Iş ýüzünde dürli çemeleşmelere duşarsyňyz: Ulgam dolandyryjysy dürli serwerlerden gündelik faýllaryny ýygnaýan we birleşdirýän we göçürip almak üçin FTP serwerlerine goýýan käbir skriptleri ýazýar. Paralel SSH sessiýalarynda pişik / grep / unig / sort kombinasiýalaryny işletmek. Amazon AWS-iň edişi ýaly, dolandyryjyňyza habar berip bilersiňiz. Graylog ýa-da ELK Stack (Elasticsearch, Logstash, Kibana) ýaly gural ulanyň.Mikroservislerim biri-birini nädip tapýarlar?
Şu wagta çenli mikroservislerimiziň biri-birini bilýändigini we degişli IPS-i bilýändigini çakladyk. Statik konfigurasiýa barada gürleşeliň. Şeýlelik bilen, bank monolitimiz [ip = 192.168.200.1] häsiýetler faýlynda gaty kodlanan töwekgelçilik serweri [ip = 192.168.200.2] bilen gürleşmelidigini bilýär. Şeýle-de bolsa, zatlary has dinamik edip bilersiňiz:- Bulut esasly konfigurasiýa serwerini ulanyň, ähli mikroservisler öz mikroservislerinde application.properties faýllaryny ýerleşdirmegiň ýerine öz konfigurasiýalaryny çekýärler.
- Hyzmat ýagdaýlaryňyz ýerleşişini çalt üýtgedip bilýändigi sebäpli, hyzmatlaryňyzyň nirede ýaşaýandygyny, IP-leriniň nämedigini we olary nädip ugrukdyrmalydygyny bilýän hyzmatlara göz aýlamaly.
- Indi hemme zat dinamik bolansoň, lideriň awtomatiki saýlanmagy ýaly täze meseleler ýüze çykýar: meselem, iki gezek işlemezlik üçin käbir meseleleriň üstünde işleýän ussat kim? Şowsuz bolanda lideriň ornuny kim çalyşýar? Çalyşmak haýsy esasda bolup geçýär?
Java mikroservislerini ulanyp, awtorizasiýa we tassyklamany nädip tertipleşdirmeli?
Bu mowzuk aýratyn bir hekaýa-da mynasyp. Againene-de, opsiýalar, kodlanan esasy HTTPS tassyklamasyndan başlap, ýörite howpsuzlyk çarçuwalary bilen Oauth2 gurnamasyny öz ygtyýar serweri bilen işledýär.Myhli gurşawymyň birmeňzeşdigine nädip göz ýetirip bilerin?
Mikroservisiz ýerleşdirmek üçin dogry zat, biri bilen ýerleşdirmek üçin hem dogry. Docker / Testcontainers we Scripting / Ansible kombinasiýasyny synap görüň.Sorag ýok: YAML hakda gysgaça
Geliň, kitaphanalardan we şuňa meňzeş meselelerden bir salym daşlaşalyň we Yaml-a tiz göz aýlalyň. Bu faýl formaty de-fakto “kod hökmünde konfigurasiýa ýazmak” formaty hökmünde ulanylýar. Şeýle hem Ansible ýaly ýönekeý gurallar we Kubernetes ýaly ägirtler tarapyndan ulanylýar. YAML indentasiýasynyň agyrysyny başdan geçirmek üçin ýönekeý Ansible faýly ýazyp görüň we faýlyň garaşylyşy ýaly işlemezden ozal näçe redaktirlemelidigini görüň. Formhli esasy IDE-ler tarapyndan goldanýan formata garamazdan! Ondan soň, bu gollanmany okamagy tamamlaň.Yaml:
- is:
- so
- great
Paýlanan amallar hakda näme? Öndürijilik synagy? Beýleki mowzuklar?
Belki bir gün, gollanmanyň geljekki neşirlerinde. Häzirlikçe, bularyň hemmesi. Biz bilen gal!Mikroservisler bilen konseptual meseleler
Java-daky mikroservisleriň aýratyn meselelerinden başga-da, islendik mikroservis taslamasynda ýüze çykýan başga meseleler bar. Olar esasan gurama, topar we dolandyryş bilen baglanyşykly.“Frontend” we “Backend” gabat gelmezlik
“Frontend” we “Backend” gabat gelmezlik köp mikroservis taslamalarynda gaty ýygy duş gelýär. Bu näme many berýär? Diňe gowy köne monolitlerde web interfeýsini döredijileriň maglumat almak üçin belli bir çeşmesi bardy. Mikroservis taslamalarynda, öňdäki işläp düzüjilerden birden maglumat almak üçin n çeşmesi bar. Java-da haýsydyr bir IoT (Internet of Things) mikroservis taslamasyny döredýändigiňizi göz öňüne getiriň. Geodeziki maşynlary we senagat peçlerini Europeewropada dolandyrýarsyňyz diýeliň. Bu peçler, temperaturasy we şuňa meňzeşler bilen yzygiderli täzelenmeleri iberýär. Iru-giç administrator UI-de peçleri tapmak isläp bilersiňiz, belki "peç gözlegi" mikroservislerini ulanyp bilersiňiz. Arka tarapdaky kärdeşleriňiziň domen bilen dolandyrylýan dizaýny ýa-da mikroservis kanunlaryny näderejede ulanýandyklaryna baglylykda , “ojak tapmak” mikroservisi diňe görnüşi, modeli ýa-da ýerleşýän ýeri ýaly maglumatlary däl-de, peç şahsyýetnamalaryny yzyna gaýtaryp biler. Munuň üçin frontend işläp düzüjiler ilkinji mikroservisden alan şahsyýetnamalary bilen “peç maglumatlary al” mikroservisinde bir ýa-da goşmaça jaň etmeli (peýjiň ýerine ýetirilişine baglylykda). Hakyky (!) Taslamadan alnan hem bolsa, bu ýönekeý mysal bolsa-da, aşakdaky meseläni görkezýär: supermarketler aşa meşhur boldy. Sebäbi olar bilen gök önüm, limonad, doňdurylan pizza we hajathana kagyzy satyn almak üçin 10 dürli ýere gitmeli däl. Munuň ýerine, bir ýere gidýärsiňiz, has aňsat we has çalt. Öňdäki we mikroservis döredijiler üçin hem edil şonuň ýaly.Dolandyryş garaşmalary
Dolandyryş ýalňyş pikirde, indi (umumy) taslama üçin çäksiz sanly işläp düzüjini hakyna tutmaly, sebäbi döredijiler indi biri-birine garaşsyz, biri-birine öz mikroservisinde işläp bilerler. Iň soňunda diňe biraz integrasiýa işi talap edilýär (işe başlamazdan ozal). Aslynda bu çemeleşme gaty kyn. Indiki abzaslarda munuň sebäbini düşündirmäge synanyşarys.“Ownuk bölekler” “has gowy böleklere” deň däl
20 bölege bölünen kody hökmany suratda bir bölekden has ýokary hilli bolar diýip çaklamak uly ýalňyşlyk bolar. Diňe tehniki nukdaýnazardan hil alsak-da, şahsy hyzmatlarymyz goldanylmadyk kodlaryň gatlaklaryny geçip, maglumatlar bazasyndan ulanyjy saýlamak üçin 400 Gibernate talaplaryny işledip biler. Simonene-de bir gezek Simon Braunyň sitatasyna gaýdyp gelýäris: monolitleri dogry gurup bilmeseňiz, dogry mikroservisleri gurmak kyn bolar. Mikroservis taslamalarynda kemçiliklere çydamlylyk hakda gürlemek köplenç gaty giç. Mikroservisleriň hakyky taslamalarda nähili işleýändigini görmek käwagt gorkunç bolýar. Munuň sebäbi, Java döredijileriniň näsazlyga çydamlylygy, aragatnaşyk we beýleki degişli temalary degişli derejede öwrenmäge hemişe taýyn däldigi. “Bölekleriň” özleri has kiçi, ýöne “tehniki bölekler” has uludyr. Mikroservis toparyňyzdan maglumatlar bazasyna girmek üçin tehniki mikroservis ýazmagyny haýyş edýändigini göz öňüne getiriň:@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;
}
}
Indi toparyňyz munuň gaty ýönekeý we içgysgynçdygyna karar berip biler (we hatda işewür adamlary hem ynandyryp biler), giriş hyzmatyny ýazmagyň ýerine, hakyky we göze görnüp duran iş talaplary bolmazdan, hakykatdanam peýdaly UserStateChanged mikroservisini ýazmak has gowudyr. Käbir adamlar häzirki wagtda Java-a dinozawr ýaly çemeleşýändigi sebäpli, geliň, “UserStateChanged” mikroservisimizi moda Erlangda ýazalyň. Geliň, bir ýerde gyzyl-gara agaçlary ulanmaga synanyşalyň, sebäbi Stiw gegge Google-a ýüz tutmak üçin içerde bilmelidigiňizi ýazdy. Integrasiýa, tehniki hyzmat we umumy dizaýn nukdaýnazaryndan, bu bir monolitiň içinde spagetti kodunyň gatlaklaryny ýazmak ýaly erbet. Emeli we adaty mysal? Bu hakykat. Emma bu hakykatda bolup biler.
Az bölek - az düşünmek
Soňra sorag, umuman, ulgamy, prosesleri we iş akymlaryna düşünmek barada ýüze çykýar, ýöne şol bir wagtyň özünde, işläp düzüji hökmünde diňe izolirlenen mikroservisiňizde işlemek üçin jogapkärçilik çekýärsiňiz [95: login-101: updateUserProfile]. Öňki abzas bilen gabat gelýär, ýöne guramaňyza, ynam derejäňize we aragatnaşygyňyza baglylykda, mikroservis zynjyrynda tötänleýin bökdençlik bar bolsa, köp bulaşyklyga, gysylmalara we günäkärlige sebäp bolup biler. Bolan waka üçin doly jogapkärçiligi öz üstüne aljak adam ýok. Bu asla biwepalyk däl. Aslynda, dürli bölekleri birleşdirmek we taslamanyň umumy suratdaky ornuna düşünmek gaty kyn.Aragatnaşyk we hyzmat
Aragatnaşyk we hyzmat derejesi kompaniýanyň göwrümine baglylykda gaty üýtgeýär. Şeýle-de bolsa, umumy gatnaşyk aç-açan: näçe köp problemaly bolsa.- 47-nji mikroservisi kim işleýär?
- Diňe mikroservisiň täze, gabat gelmeýän görnüşini ýerleşdirdilermi? Bu nirede dokumentleşdirildi?
- Täze aýratynlyk soramak üçin kim bilen gürleşmeli?
- Erlangdaky bu mikroservisi kim bilýär, bu dili bilýän ýekeje adam kompaniýadan çykansoň?
- Mikroservis toparymyzyň hemmesi diňe bir dürli programmirleme dillerinde däl, eýsem dürli wagt zolaklarynda hem işleýär! Bularyň hemmesini nädip dogry utgaşdyrmaly?
GO TO FULL VERSION