Olen juba ammu tahtnud kirjutada artiklit mikroteenuste arhitektuurist, kuid mind on pidevalt pidurdanud kaks asjaolu â mida sĂŒgavamale ma teemasse sĂŒvenen, seda rohkem tundub mulle, et see, mida ma tead, on ilmselge, ning see, mida ma ei tea, vajab veel uurimist. Teisalt usun, et mul on juba praegu mĂ”tteid, millest laiema publikuni rÀÀkida. Seega on alternatiivsed arvamused teretulnud.
Conway seadus ja seos Ă€ri, organisatsiooni ja infotehnoloogilise sĂŒsteemi vahel
TÔlgin ennast taas:
«Iga organisatsioon, mis projekteerib mingisugust sĂŒsteemi (laiemas mĂ”ttes), saab disaini, mille struktuur kopeerib selle organisatsiooni meeskondade struktuuri.»
â Melvyn Conway, 1967
Minu arvates seondub see seadus pigem ettevĂ”tte korraldamise otstarbekuse kui otseselt infosisĂŒsteemiga. Selgitan nĂ€ite kaudu. Oletame, et meil on piisavalt stabiilne Ă€rivĂ”imalus, mille elutsĂŒkkel on piisavalt pikk, et oleks mĂ”ttekas ettevĂ”tte korraldamine (see ei ole trĂŒkiviga, kuid mulle meeldib see termin, mille ma endale olen omistanud). Loomulikult peab selle ettevĂ”tte tugisĂŒsteem olema organisatoorselt ja protsessiliselt kooskĂ”las selle Ă€riga.
Ările orienteeritud infosisĂŒsteemid

Selgitan nĂ€ite kaudu. Oletame, et on olemas Ă€rivĂ”imalus pitsa mĂŒĂŒgi korraldamiseks. V1 versioonis (nimetame seda enne infotehnoloogiat) oli ettevĂ”te pitsakohvik, kassa ja kohaletoimetamisteenus. See versioon pĂŒsis kaua, kuna ĂŒmbruse muutuvus oli madal. SeejĂ€rel tuli versioon 2 â arenenum, mis oskab kasutada infosisĂŒsteemi oma pĂ”hialustena monoliitne arhitektuur. Ja siin, minu arvates, tekib lihtsalt kohutav ebaĂ”iglus monoliitide suhtes â vĂ€idetav monoliitne arhitektuur ei vasta ettevĂ”tte domeenimudelile. Ja kui see tĂ”esti nii oleks, ei saaks sĂŒsteem ĂŒldse töötada - see oleks vastuolus Conway seaduse ja terve mĂ”istusega. Ei, monoliitne arhitektuur vastab tĂ€iesti Ă€rimudelile selle ettevĂ”tte arengu praeguses etapis â mĂ”tlen loomulikult etappi, kus sĂŒsteem on juba loodud ja kasutusele vĂ”etud. TĂ€iesti suurepĂ€rane tĂ”siasi, et sĂ”ltumata arhitektuurilisest lĂ€henemisviisist, töötab teenustele orienteeritud arhitektuur versioon 3 ja mikroteenuste arhitektuur versioon N vĂ”rdselt hĂ€sti. Mis on konks?
KÔik voolab, kÔik muutub vÔi on mikroteenused keerukuse vastu vÔitlemise vahend?
Enne jÀtkamist vaatame mÔningaid ekslikke arusaamu mikroteenuste arhitektuuri kohta.
Mikroteenuste lĂ€henemise toetajad rÀÀgivad sageli sellest, et monoliidi jagamine mikroteenusteks lihtsustab arendamist, vĂ€hendades eraldi teenuste koodibaasi. Minu arvates on see vĂ€ide tĂ€ielik jama. TĂ”siselt, kas monoliidiga ja homogeense koodiga koostöö nĂ€ib keeruline? Kui see tĂ”epoolest nii oleks, ehitataks kĂ”ik projektid algusest peale mikroteenustena, kuid praktika nĂ€itab, et migratsioon monoliidilt mikroteenustele on palju levinum. Keerukus ei kao kuhugi, see lihtsalt liigub eraldi moodulitelt liidestele (olgu need siis andmebusid, RPC, API-d vĂ”i muud protokollid) ja orkestreerimisĂŒsteemidele. Ja see on keeruline!
Heterogeense tekki kasutamise eelis on samuti kahtlane. Ma ei vaidle sellele, et see on vĂ”imalik, kuid tegelikkuses esineb see harva (Eelnevalt öeldes, see peab siiski olema olemas â pigem tagajĂ€rjena kui eelise tĂ”ttu).
Toote ja teenuse elutsĂŒkkel
Vaata uuesti ĂŒlalolevat diagrammi. Ma ei mĂ€rkinud ettevĂ”tte versiooni eluiga juhuslikult â tĂ€napĂ€evastes tingimustes on just Ă€ri versioonide vahelise ĂŒlemineku kiirus selle edu mÀÀrav tegur. Toote edukus sĂ”ltub Ă€ri-ideede kontrollimise kiirusest.. Ja siin on minu arvates peidus mikroteenuste arhitektuuri peamine eelis. Aga liikuge samm-sammult edasi.
Liigume informatsioonisĂŒsteemide evolutsiooni jĂ€rgmisele tasemele â teenuseorienteeritud arhitektuurile SOA. Nii et mingil hetkel eraldasime oma tootest pikaajalised teenused â pikaajalised selles mĂ”ttes, et toote versioonide vahetusel on lootust, et teenuse eluiga on pikem kui toote jĂ€rgmise versiooni eluiga. Loogiline oleks mitte neid ĂŒldse muuta â meile on oluline just jĂ€rgmisele versioonile ĂŒlemineku kiirus.. Kuid kahjuks peame teenustes pidevalt muudatusi tegema â ja siin sobib meile kĂ”ik, nii DevOps praktikad, konteineriseerimine kui ka kĂ”ik muu, mis pĂ€he tuleb. Kuid see ei ole ikka veel mikroteenused!
Mikroteenused kui lahendus keerukuse... konfiguratsiooni haldamiseks
Ja nĂŒĂŒd saame lĂ”puks liikuda mikroteenuste mÀÀrava rolli juurde â see on lĂ€henemine, mis lihtsustab toote konfiguratsiooni haldamist. TĂ€psemalt öeldes kirjeldab iga mikroteenuse funktsioon just toote sisemisse Ă€rifunktsiooni vastavalt domeenimudelile â ja need on juba asjad, mis ei ela lĂŒhiajalises versioonis, vaid pikaajalises Ă€rivĂ”imaluses. Ja ĂŒleminek jĂ€rgmisse tooteversiooni toimub sĂ”na otseses mĂ”ttes mĂ€rkamatult â te muudate/loodate ĂŒhe mikroteenuse, vĂ”i vĂ”ib-olla isegi lihtsalt nende vastastikuse tegevuse skeemi ja Ă€kki olete juba tulevikus, jĂ€ttes seljataha nutvad konkurendid, kes jĂ€tkuvalt hĂŒppavad oma monoliitsete versioonide vahel. Kujutage nĂŒĂŒd ette, et teil on piisavalt suur hulk mikroteenuseid, millel on eelnevalt mÀÀratletud liidesed ja Ă€rivĂ”imalused. Ja te tulete ja ehitate oma toote struktuuri valmis mikroteenustest â lihtsalt joonistades diagrammi nĂ€iteks. Palju Ă”nne â teil on platvorm â ja nĂŒĂŒd saate endale Ă€ri ĂŒles ehitada. Unistused, unistused.
JĂ€reldused
- SĂŒsteemi arhitektuur peab olema mÀÀratletud selle komponentide elutsĂŒkli alusel. Kui komponent elab toote versiooni raames, siis pole mĂ”tet sĂŒsteemi keerukust suurendada, rakendades mikroteenuste lĂ€henemist.
- Mikroteenuste arhitektuur peaks pĂ”hinema domeenimudelil â sest Ă€ri vĂ”imalus on kĂ”ige pikaajalisem valdkond.
- Tarnetavad tavad (DevOps praktika) ja orkestreerimine mĂ€ngivad mikroteenuste arhitektuuris ĂŒhte tĂ€htsaimat rolli â kuna komponentide muutmise kiirus nĂ”uab suuremaid nĂ”udeid tarnimise kiiruselt ja kvaliteedilt.
Allikas: habr.com
