Bu gollanmada, Java mikroservisleriniň nämedigini, olary dizaýn etmegiň we döretmegiň usullaryny öwrenersiňiz. Şeýle hem, Java mikroservis kitaphanalary we mikroservisleri ulanmagyň mümkinçiligi baradaky soraglary öz içine alýar. Java mikroservisleriniň terjimesi we uýgunlaşmagy : Amaly gollanma .
Java mikroservisleri: esaslar
Mikroservislere düşünmek üçin ilki bilen olaryň nämedigini kesgitlemeli. "Monolit" dälmi - Java monolit: bu näme we artykmaçlyklary ýa-da kemçilikleri näme?Java monolit näme?
Bankda ýa-da fintech başlangyjy üçin işleýändigiňizi göz öňüne getiriň. Ulanyjylara täze bank hasaby açmak üçin ulanyp boljak ykjam programma üpjün edýärsiňiz. Java kodunda bu gözegçilik ediji synpyň bolmagyna getirer. Plönekeýleşdirilen ýaly:@Controller
class BankController {
@PostMapping("/users/register")
public void register(RegistrationForm form) {
validate(form);
riskCheck(form);
openBankAccount(form);
// etc..
}
}
Gözegçi gerek:
- Hasaba alyş blankasyny tassyklady.
- Bank hasaby bilen üpjün etmek ýa-da bermezlik barada ulanyjynyň salgysynyň töwekgelçiligini barlady.
- Bank hasaby açdy.
BankController
, beýleki çeşmeleriňiz bilen bilelikde bank.jar ýa-da bank.war faýlyna ýerleşdiriler - bu bankyňyzy dolandyrmak üçin zerur bolan ähli kodlary öz içine alýan gowy köne monolit. Takmynan çaklama hökmünde .jar (ýa-da .war) faýlyň başlangyç ululygy 1-den 100 MB aralygynda bolar. Indi .jar faýlyny serweriňizde işledip bilersiňiz ... we Java programmaňyzy ýerleşdirmek üçin etmeli zadyňyz. Surat, ýokarky çep gönüburçluk: mono (litiki) bank java -jar bank.jar (cp .war / .ear programma üpjünçiligine) ýerleşdirmek. Sag gönüburçluk: açyk brauzer.
Java monolitlerinde näme problema bar?
Java monolitlerinde düýbünden ýalňyşlyk ýok. Şeýle-de bolsa, taslamaňyzda bolsa, tejribe görkezdi:- Köp programmistler / toparlar / geňeşçiler işleýär ...
- ... gaty düşnüksiz talaplary bolan müşderileriň basyşy astynda şol bir monolitden ...
- bir-iki ýylyň içinde ...
Java monolitiniň ululygyny nädip azaltmaly?
Tebigy sorag ýüze çykýar: monoliti nädip kiçeltmeli? Häzirki wagtda bank.jar bir JVM-de, bir serwerde bir amal işleýär. Indi ýok, az däl. Häzirki wagtda logiki pikir kelläme gelip biler: “risköne töwekgelçiligi barlamak hyzmatyny kompaniýamdaky beýleki bölümler ulanyp biler! Bu meniň monolit bank programmam bilen gönüden-göni baglanyşykly däl! Belki monolitden kesilip, aýratyn önüm hökmünde ýerleşdirilmelidir? Technagny, tehniki taýdan aýdanymyzda, ony aýratyn Java prosesi hökmünde işlediň. ”Java mikroservisi näme?
Iş ýüzünde bu jümle indi usul jaňynyňriskCheck()
BankController-den edilmejekdigini aňladýar: bu usul ýa-da ähli kömekçi synplary bolan noýba komponenti öz Maven ýa-da Gradle taslamasyna geçiriler. Şeýle hem, bank monolitine garaşsyz ýerleşdiriler we wersiýa gözegçiligi astynda ýerleşdiriler. Şeýle-de bolsa, bu çykarmak prosesi täze RiskCheck modulyňyzy mikroservise öwürmeýär, sebäbi mikroservisiň kesgitlemesi açyk. Bu toparlaryň we kompaniýalaryň arasynda ýygy-ýygydan diskussiýalara sebäp bolýar.
- Taslama mikro-da 5-7 synp barmy ýa-da näme?
- 100 ýa-da 1000 synp ... henizem mikro?
- Mikroservis, köplenç synplaryň sany bilen baglanyşyklymy ýa-da ýok?
- Ululygyna ýa-da domen araçäklerine garamazdan, aýratyn ýerleşdirilen hyzmatlaryň mikroservislerine jaň edeliň.
- Serwis aragatnaşygyny nädip tertipleşdirmelidigi barada pikir edeliň. Mikroservislerimiz biri-biri bilen aragatnaşyk saklamagyň ýollaryna mätäç.
Java mikroservisleriniň arasynda aragatnaşygy nädip ýola goýmaly?
Umuman we umuman, iki wariant bar - sinhron we asynkron aragatnaşyk.Sinhron aragatnaşyk: (HTTP) / REST
Adatça, mikroservisleriň arasynda sinhron aragatnaşygy, XML ýa-da JSON-y yzyna gaýtarýan HTTP we REST ýaly hyzmatlar arkaly ýüze çykýar. Elbetde, başga wariantlar hem bolup biler - iň bolmanda Google Protocol Buferlerini alyň . Derrew jogap gerek bolsa, REST aragatnaşygyny ulanmak has gowudyr. Mysalymyzda, edil şu edilmeli zat, sebäbi hasap açmazdan ozal töwekgelçiligi barlamak zerur. Töwekgelçiligi barlamak ýok bolsa, hasap ýok. Aşakdaky gurallary, “ Sinhron Java REST jaňlary üçin haýsy kitaphanalar iň gowusy ” bölüminde ara alyp maslahatlaşarys .Habarlaşma - Asynkron aragatnaşyk
Asynkron mikroservis aragatnaşygy, adatça JMS ýerine ýetirilmegi bilen habar alyşmak we / ýa-da AMQP ýaly protokol ulanmak arkaly amala aşyrylýar . Bir sebäbe görä bu ýerde "adatça" ýazdyk: geliň, e-poçta / SMTP integrasiýasynyň sanyna kembaha garap bolmaz. Gyssagly jogap gerek däl wagty ulanyň. Mysal üçin, ulanyjy “Häzir satyn al” düwmesine basýar, siz bolsa öz gezeginde hasap-faktura döretmek isleýärsiňiz. Bu amal, elbetde, ulanyjynyň satyn almak haýyşyna jogap siklinde bolup geçmeli däldir. Aşakda asynkron Java habarlaşma üçin haýsy gurallaryň iň amatlydygyny düşündireris .Mysal: Java-da REST API jaňy
Sinhron mikroservis aragatnaşygyny saýlaýarys diýip pikir edeliň. Bu ýagdaýda pes derejedäki Java kodumyz (ýokarda hödürlän kodumyz) şuňa meňzeýär. (bu ýerde pes derejede, mikroservis aragatnaşygy üçin müşderi kitaphanalarynyň adatça hakyky HTTP jaňlaryndan abstrakt döredilýändigini aňladýarys).@Controller
class BankController {
@Autowired
private HttpClient httpClient;
@PostMapping("/users/register")
public void register(RegistrationForm form) {
validate(form);
httpClient.send(riskRequest, responseHandler());
setupAccount(form);
// etc..
}
}
Kod esasynda indi iki sany Java (mikro) hyzmaty, Bank we RiskCheck ýerleşdirmelidigimiz belli bolýar. Netijede, iki sany JVM prosesi işleýär. Java mikroservis taslamasyny ösdürmek üçin zerur zat: diňe bir monolit däl-de, has kiçi bölekleri (.jar ýa-da .war faýllaryny) guruň we ýerleşdiriň. Soragyň jogaby düşnüksiz bolup galýar: monoliti mikroservislere nädip kesmeli? Bu bölekler näçe kiçi bolmaly, dogry ululygyny nädip kesgitlemeli? Barlap göreliň.
Java mikroservis arhitekturasy
Iş ýüzünde kompaniýalar mikroservis taslamalaryny dürli usullar bilen ösdürýärler. Bu çemeleşme, bar bolan monoliti mikroservis taslamasyna öwürmäge synanyşýandygyňyza ýa-da taslamany noldan başlajakdygyňyza baglydyr.Monolitden mikroservislere çenli
Iň logiki pikirleriň biri, bar bolan monolitden mikroservisleri çykarmakdyr. Üns beriň, bu ýerdäki "mikro" prefiksi aslynda alnan hyzmatlaryň hakykatdanam az boljakdygyny aňlatmaýar, bu hökman beýle däldir. Nazary esaslara seredeliň.Pikir: monoliti mikroservislere bölüň
Miras taslamalaryna mikroservis çemeleşmesi ulanylyp bilner. Şol sebäpli:- Köplenç şeýle taslamalary goldamak / üýtgetmek / giňeltmek kyn.
- Döredijilerden başlap dolandyryşa çenli her kim ýönekeýleşdirmek isleýär.
- Programma üpjünçiligiňiziň näme etmelidigini anyk bilýändigiňizi aňladýan domen araçäkleri bar.
- Şeýlelik bilen, ulanyjy maglumatlarynyň gaýtadan işlenişini (atlar, salgylar, telefon belgileri ýaly) aýratyn hasap hyzmatyny “Hasap dolandyryşy” diýip bölmek ýerlikli bolar.
- Ora-da ulanyjynyň töwekgelçilik derejesini barlaýan we beýleki köp sanly taslama ýa-da kompaniýanyň bölümleri tarapyndan ulanylyp bilinýän ýokarda agzalan "Töwekgelçilik barlaýjy moduly".
- PDFa-da hasap-fakturalary PDF formatda ýa-da poçta bilen iberýän hasap-faktura moduly.
Bir ideýanyň durmuşa geçirilmegi: başga biri etsin
Aboveokarda beýan edilen çemeleşme kagyz we UML ýaly diagrammalarda ajaýyp görünýär. Emma, hemme zat beýle bir ýönekeý däl. Ony amaly ýerine ýetirmek çynlakaý tehniki taýýarlygy talap edýär: monolitden nämäni çykaryp boljakdygyna düşünmegimiz bilen gazyp almak prosesiniň arasyndaky boşluk gaty uludyr. Kärhana taslamalarynyň köpüsi, döredijileriň 7 ýyllyk “Hibernate” wersiýasyny täzesine täzelemekden gorkýan derejesine ýetýärler. Kitaphanalar hem onuň bilen täzelener, ýöne bir zady döwmek üçin hakyky howp bar. Şeýlelik bilen, şol bir döredijiler indi maglumatlar bazasynyň amal çäkleri bilen gadymy miras koduny gözlemeli we gowy kesgitlenen mikroservisleri çykarmalymy? Bu mesele köplenç çylşyrymly we tagtada ýa-da binagärlik ýygnaklarynda “çözülip bilinmez”. Twitter döredijisi @simonbrown-dan sitat getirmek üçin: Muny gaýtalap aýdaryn ... adamlar monolitleri dogry gurup bilmese, mikroservisler kömek etmez. Simon BrownMikroservis arhitekturasyna esaslanan taslama
Täze “Java” taslamalarynda öňki bölümdäki üç sanly nokat birneme üýtgeşik görünýär:- Arassa şifer bilen başlaýarsyňyz, şonuň üçin saklamak üçin “goşlar” ýok.
- Işläp düzüjiler geljekde ýönekeý zatlary saklamak isleýärler.
- Mesele: Domen araçäkleriniň has çylşyrymly suraty bar: programma üpjünçiligiňiziň aslynda näme etmelidigini bilmeýärsiňiz (yşarat: çeýel;))
Tehniki mikroservis arhitekturasy
Birinji nokat döredijiler üçin iň düşnükli ýaly bolup görünýär, ýöne muny berk pese gaçyrýanlaram bar. Hadi Hariri “IntelliJ” -de “Extract Microservice” gaýtadan işlemegi maslahat berýär. Aşakdaky mysal gaty ýönekeýleşdirilen hem bolsa, gynansak-da, hakyky taslamalarda ýerine ýetirilen işler ondan uzaklaşmaýar. Mikroservislerden öň@Service
class UserService {
public void register(User user) {
String email = user.getEmail();
String username = email.substring(0, email.indexOf("@"));
// ...
}
}
Substring Java mikroservisi bilen
@Service
class UserService {
@Autowired
private HttpClient client;
public void register(User user) {
String email = user.getEmail();
//теперь вызываем substring microservice via http
String username = httpClient.send(substringRequest(email), responseHandler());
// ...
}
}
Şeýlelik bilen, Java sebäbini jaňy HTTP jaňyna baglaýarsyňyz, hiç hili sebäpsiz. Muňa garamazdan, munuň bir sebäbi: tejribäniň ýoklugy we Java mikroservis çemeleşmesini mejbur etmek. Teklip: Muny etme.
Iş akymyna gönükdirilen mikroservis arhitekturasy
Indiki umumy çemeleşme, Java mikroservislerini iş akymyna esaslanýan modullara bölmekdir. Hakyky durmuş mysaly: Germaniýada (köpçülige) lukmanyň ýanyna baranyňyzda, saparyňyzy lukmançylyk CRM ulgamynda ýazmaly. Insurancetiýaçlandyryşdan töleg almak üçin, bejergiňiz (we beýleki näsaglaryň bejergisi) barada maglumatlary XML arkaly araçy iberer. Dellal bu XML faýlyna sereder we (ýönekeýleşdirilen):- Dogry XML faýlynyň alnandygyny ýa-da ýokdugyny barlar.
- Bu proseduralaryň dogrudygyny barlar: ginekolog lukmanyndan bir günde üç diş arassalamak prosedurasyny alan bir ýaşly çaga birneme şübheli görünýär.
- XML-i käbir beýleki býurokratik maglumatlar bilen birleşdirer.
- Tölegleri başlamak üçin XML faýlyny ätiýaçlandyryş kompaniýasyna iberer.
- Netijäni lukmana iberer, oňa "üstünlik" ýa-da "bu ýazgyny manyly bolansoň täzeden iberiň".
- Bir XML faýly gaýtadan işlemek üçin alty programma ýerleşdirmek zerurmy?
- Bu mikroservisler hakykatdanam biri-birine garaşlymy? Biri-birine garaşsyz ýerleşdirip bolarmy? Dürli wersiýalary we API shemalary bilen?
- Barlag mikroservisi işlemese, ygtybarly mikroservis näme eder? Ulgam henizem işleýärmi?
- Bu mikroservisler şol bir maglumat bazasyny paýlaşýarmy (elbetde DB tablisalarynda käbir umumy maglumatlar gerek) ýa-da hersiniň özleri barmy?
- ... we başga-da köp zatlar.
- Diňe bir programmany ýerleşdirmek hökman däl, azyndan alty.
- Hatda mikroservis arhitekturasyna näçe girmek isleýändigiňize baglylykda birnäçe maglumat bazasyny ýerleşdirmeli bolmagyňyz mümkin.
- Her ulgamyň onlaýn we dogry işleýändigine göz ýetirmeli.
- Mikroservisleriň arasyndaky jaňlaryňyzyň hakykatdanam çydamlydygyna göz ýetirmeli (Java mikroservisini nädip çydamly edip bilersiňiz?).
- Bu sazlamanyň göz öňünde tutýan beýleki zatlary - ýerli ösüş sazlamalaryndan başlap integrasiýa synagyna çenli.
- Netflix däl bolsaňyz (ähtimal, Netflix dälsiňiz) ...
- Ösüş gurşawyny açýan we gaty güýçli iş ukybyňyz bolmasa, 5 sekuntda aňsatlyk bilen dikeldilýän önümçilik maglumatlar bazasyny taşlaýan bulam-bujar maýmyn döredýär.
- ýa-da özüňizi @monzo ýaly duýýarsyňyz we mümkin boldugyça 1500 mikroservisi synap görmek isleýärsiňiz.
GO TO FULL VERSION