Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Kulesi sihloko, ngizokhuluma ngokuthi iphrojekthi engisebenza kuyo iguqulwe kanjani isuka ku-monolith enkulu yaba isethi yama-microservices.

Le phrojekthi yaqala umlando wayo kudala impela, ekuqaleni kuka-2000. Izinguqulo zokuqala zabhalwa nge-Visual Basic 6. Ngokuhamba kwesikhathi, kwacaca ukuthi ukuthuthukiswa kwalolu limi kuzoba nzima ukusekela esikhathini esizayo, kusukela i-IDE kanti nolimi ngokwalo aluthuthukisiwe kahle. Ekupheleni kweminyaka yawo-2000, kwanqunywa ukuthi kushintshelwe ku-C# ethembisa kakhulu. Inguqulo entsha yabhalwa ngokuhambisana nokubuyekezwa kwendala, kancane kancane yabhalwa ikhodi eyengeziwe ku-.NET. I-backend ku-C# ekuqaleni yayigxile ekwakhiweni kwesevisi, kodwa ngesikhathi sokuthuthukiswa, kwasetshenziswa imitapo yolwazi evamile enengqondo, futhi izinsizakalo zethulwa ngenqubo eyodwa. Umphumela waba uhlelo esilubize ngokuthi β€œisevisi ye-monolith.”

Enye yezinzuzo ezimbalwa zale nhlanganisela kwaba ikhono lezinsizakalo ukubizana nge-API yangaphandle. Kube nezimfuneko ezicacile zokushintshela kusevisi elungile, futhi ngokuzayo, i-microservice architecture.

Saqala umsebenzi wethu wokubola cishe ngo-2015. Asikafinyeleli esimweni esifanele - kusenezingxenye zephrojekthi enkulu engakwazi ukubizwa ngokuthi i-monoliths, kodwa ayibukeki njengama-microservices. Noma kunjalo, intuthuko ibalulekile.
Ngizokhuluma ngakho esihlokweni.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Okuqukethwe

Izakhiwo kanye nezinkinga zesixazululo esikhona


Ekuqaleni, i-architecture yayibukeka kanje: i-UI iyisicelo esihlukile, ingxenye ye-monolithic ibhalwe ku-Visual Basic 6, uhlelo lokusebenza lwe-NET luyisethi yamasevisi ahlobene asebenza nge-database enkulu kakhulu.

Ukungalungi kwesixazululo sangaphambilini

Iphuzu elilodwa lokwehluleka
Sibe nephuzu elilodwa lokwehluleka: uhlelo lokusebenza lwe-NET lusebenze ngenqubo eyodwa. Uma noma iyiphi imojuli yehlulekile, lonke uhlelo lokusebenza lwehlulekile futhi kudingeke ukuthi luqalwe kabusha. Njengoba senza inani elikhulu lezinqubo ngokuzenzakalelayo kubasebenzisi abahlukene, ngenxa yokwehluleka kokukodwa kwabo, wonke umuntu akakwazanga ukusebenza isikhathi esithile. Futhi uma kwenzeka iphutha lesofthiwe, ngisho nekhophi yasenqolobaneni ayizange isize.

Umugqa wokuthuthukiswa
Lesi sici sihambisana nenhlangano. Uhlelo lwethu lokusebenza linamakhasimende amaningi, futhi wonke afuna ukulithuthukisa ngokushesha okukhulu. Ngaphambili, kwakungenakwenzeka ukwenza lokhu ngokuhambisana, futhi wonke amakhasimende ayema ​​emgqeni. Le nqubo yayingeyinhle emabhizinisini ngoba bekufanele bakhombise ukuthi umsebenzi wabo ubalulekile. Futhi ithimba labathuthukisi lichithe isikhathi lihlela lo mugqa. Lokhu kuthathe isikhathi esiningi nomzamo, futhi umkhiqizo ekugcineni awukwazanga ukushintsha ngokushesha ngendlela abebengathanda ngayo.

Ukusetshenziswa kwezinsiza ngokufanele
Lapho ibamba izinsizakalo ngenqubo eyodwa, sasihlala sikopisha ngokuphelele ukucushwa kusuka kuseva kuya kuseva. Besifuna ukubeka izinsiza ezilayishwe kakhulu ngokwehlukana ukuze singamoshi izinsiza futhi sithole ukulawula okuvumelana nezimo kuhlelo lwethu lokuthunyelwa.

Kunzima ukusebenzisa ubuchwepheshe besimanje
Inkinga eyaziwa kubo bonke abathuthukisi: kunesifiso sokwethula ubuchwepheshe besimanje kuphrojekthi, kodwa alikho ithuba. Ngesixazululo esikhulu se-monolithic, noma yikuphi ukubuyekezwa komtapo wolwazi wamanje, ingasaphathwa eyokushintshela kwentsha, iphenduka ibe umsebenzi ongewona omncane. Kuthatha isikhathi eside ukufakazela kumholi weqembu ukuthi lokhu kuzoletha amabhonasi amaningi kunemizwa emoshiwe.

Ubunzima bokukhipha izinguquko
Lokhu bekuyinkinga enkulu kakhulu - besikhipha ukukhishwa njalo ezinyangeni ezimbili.
Ukukhishwa ngakunye kuphenduke inhlekelele yangempela ebhange, naphezu kokuhlolwa nemizamo yonjiniyela. Ibhizinisi beliqonda ukuthi ekuqaleni kwesonto ukusebenza kwalo bekungeke kusebenze. Futhi abathuthukisi baqonda ukuthi isonto lezehlakalo ezimbi zazibalindile.
Wonke umuntu wayenesifiso sokushintsha isimo.

Okulindelekile kusuka kuma-microservices


Ukukhishwa kwezingxenye uma isilungile. Ukulethwa kwezingxenye uma usulungile ngokubola isixazululo nokuhlukanisa izinqubo ezahlukene.

Amaqembu emikhiqizo emincane. Lokhu kubalulekile ngoba iqembu elikhulu elisebenza ku-monolith endala bekunzima ukuliphatha. Iqembu elinjalo laphoqeleka ukuba lisebenze ngokuvumelana nenqubo eqinile, kodwa lalifuna ubuciko obuningi nokuzimela. Amaqembu amancane kuphela abekwazi ukukukhokhela lokhu.

Ukuhlukaniswa kwezinsizakalo ngezinqubo ezihlukene. Ngokufanelekile, bengifuna ukukuhlukanisa ezitsheni, kodwa inombolo enkulu yezinsizakalo ezibhalwe ku-.NET Framework isebenza kuphela ku-Windows. Amasevisi asekelwe ku-NET Core ayavela manje, kodwa asekhona ambalwa.

Ukuvumelana nezimo. Singathanda ukuhlanganisa izinsiza ngendlela esizidinga ngayo, hhayi ngendlela ikhodi ephoqa ngayo.

Ukusetshenziswa kobuchwepheshe obusha. Lokhu kuyathakazelisa kunoma yimuphi umhleli.

Izinkinga zoshintsho


Yiqiniso, uma bekulula ukuphula i-monolith ibe yi-microservices, bekungeke kube nesidingo sokukhuluma ngakho ezingqungqutheleni nokubhala izihloko. Ziningi izingibe kule nqubo; ngizochaza ezinkulu ezisikhinyabeze.

Inkinga yokuqala okujwayelekile kuma-monoliths amaningi: ukuhambisana komqondo webhizinisi. Uma sibhala i-monolith, sifuna ukuphinda sisebenzise amakilasi ethu ukuze singabhali ikhodi engadingekile. Futhi lapho uthuthela kuma-microservices, lokhu kuba yinkinga: yonke ikhodi ihlanganiswe ngokuqinile, futhi kunzima ukuhlukanisa izinsizakalo.

Ngesikhathi sokuqala komsebenzi, inqolobane yayinamaphrojekthi angaphezu kuka-500 kanye nemigqa yekhodi engaphezu kwezinkulungwane ze-700. Lesi yisinqumo esikhulu futhi inkinga yesibili. Kwakungenakwenzeka ukuvele uyithathe futhi uyihlukanise ibe ngama-microservices.

Inkinga yesithathu - ukuntuleka kwengqalasizinda edingekayo. Eqinisweni, besikopisha mathupha ikhodi yomthombo kumaseva.

Ungasuka kanjani ku-monolith uye kuma-microservices


Ukuhlinzeka ngama-Microservices

Okokuqala, sazinqumela ngokushesha ukuthi ukuhlukaniswa kwama-microservices kuyinqubo ephindaphindayo. Kwakudingeka njalo ukuthi sithuthukise izinkinga zebhizinisi ngokuhambisana. Ukuthi sizokusebenzisa kanjani lokhu ngokobuchwepheshe kakade inkinga yethu. Ngakho-ke, silungiselele inqubo ephindaphindayo. Ngeke isebenze nganoma iyiphi enye indlela uma unohlelo lokusebenza olukhulu futhi ingakalungeli ukubhalwa kabusha.

Yiziphi izindlela esizisebenzisayo ukuze sihlukanise ama-microservices?

Indlela yokuqala β€” hambisa amamojula akhona njengamasevisi. Mayelana nalokhu, sibe nenhlanhla: bekunezinsizakalo ezibhalisiwe kakade ezisebenza kusetshenziswa iphrothokholi ye-WCF. Bahlukaniswa baba imihlangano ehlukene. Sazithutha ngokwehlukana, sengeza isiqalisi esincane esakhiweni ngasinye. Yabhalwa kusetshenziswa umtapo wezincwadi we-Topshelf omangalisayo, okuvumela ukuthi usebenzise uhlelo lokusebenza njengesevisi nanjengekhonsoli. Lokhu kulungele ukulungisa iphutha ngoba awekho amaphrojekthi engeziwe adingekayo kusixazululo.

Izinsizakalo zazixhunywe ngokomqondo webhizinisi, njengoba zisebenzisa imihlangano evamile futhi zisebenza nge-database evamile. Babengeke neze babizwe ngama-microservices ngendlela yabo emsulwa. Nokho, singahlinzeka ngalawa masevisi ngokwehlukana, ngezinqubo ezahlukene. Lokhu kukodwa kwenza kube nokwenzeka ukunciphisa ithonya labo komunye nomunye, ukunciphisa inkinga ngokuthuthukiswa okufanayo kanye nephuzu elilodwa lokuhluleka.

Ukuhlanganisa nomsingathi kuwumugqa owodwa nje wekhodi ekilasini Lohlelo. Safihla umsebenzi noTopshelf ekilasini elisizayo.

namespace RBA.Services.Accounts.Host
{
   internal class Program
   {
      private static void Main(string[] args)
      {
        HostRunner<Accounts>.Run("RBA.Services.Accounts.Host");

       }
    }
}

Indlela yesibili yokwaba ama-microservices yile: zidale ukuxazulula izinkinga ezintsha. Uma ngesikhathi esifanayo i-monolith ingakhuli, lokhu sekuvele kuhle kakhulu, okusho ukuthi sihamba ngendlela efanele. Ukuze sixazulule izinkinga ezintsha, sizame ukudala amasevisi ahlukene. Uma bekunethuba elinjalo, khona-ke sidale izinsizakalo eziningi "ze-canonical" ezilawula ngokuphelele imodeli yazo yedatha, isizindalwazi esihlukile.

Thina, njengabaningi, siqale ngezinsizakalo zokuqinisekisa nokugunyaza. Baphelele kulokhu. Zizimele, njengomthetho, zinemodeli yedatha ehlukile. Bona ngokwabo abahlanganyeli ne-monolith, kuphela iphendukela kubo ukuxazulula izinkinga ezithile. Usebenzisa lezi zinsizakalo, ungaqala ukushintshela ekwakhiweni okusha, ulungise ingqalasizinda ekuzo, uzame ezinye izindlela ezihlobene nemitapo yolwazi yenethiwekhi, njll. Asinawo amaqembu enhlanganweni yethu angakwazanga ukudala isevisi yokuqinisekisa.

Indlela yesithathu yokwaba ama-microservicesLesi esisisebenzisayo siqondile kancane kithi. Lokhu ukususwa kokucabanga kwebhizinisi kusukela kusendlalelo se-UI. Uhlelo lwethu lokusebenza oluyinhloko lwe-UI ideskithophu; yona, njenge-backend, ibhalwe ku-C#. Onjiniyela ngezikhathi ezithile benza amaphutha futhi badlulisela izingxenye zomqondo ku-UI okufanele ngabe zikhona ngemuva futhi ziphinde zisetshenziswe.

Uma ubheka isibonelo sangempela kusuka kukhodi yengxenye ye-UI, ungabona ukuthi iningi lalesi sixazululo liqukethe ingqondo yebhizinisi langempela eliwusizo kwezinye izinqubo, hhayi nje ekwakheni ifomu le-UI.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

I-logic ye-UI yangempela itholakala kuphela emigqeni embalwa yokugcina. Siyidlulisele kuseva ukuze iphinde isetshenziswe, ngaleyo ndlela sinciphise i-UI futhi sizuze izakhiwo ezifanele.

Indlela yesine nebaluleke kakhulu yokuhlukanisa ama-microservices, okwenza kube nokwenzeka ukunciphisa i-monolith, ukususwa kwezinsizakalo ezikhona ngokucubungula. Uma sikhipha amamojula akhona njengoba enjalo, umphumela awuhlali uthandwa ngabathuthukisi, futhi inqubo yebhizinisi kungenzeka ukuthi isiphelelwe yisikhathi kusukela umsebenzi wadalwa. Ngokwenza kabusha, singakwazi ukusekela inqubo entsha yebhizinisi ngoba izidingo zebhizinisi zihlala zishintsha. Singathuthukisa ikhodi yomthombo, sisuse iziphambeko ezaziwayo, futhi sakhe imodeli yedatha engcono. Ziningi izinzuzo ezitholakalayo.

Ukwehlukanisa izinsizakalo ekucutshungulweni kuxhunywe ngokungenakuhlukaniswa nomqondo womongo ohlanganisiwe. Lona umqondo ovela ku-Domain Driven Design. Kusho isigaba semodeli yesizinda lapho yonke imigomo yolimi olulodwa ichazwa ngendlela ehlukile. Ake sibheke umongo womshwalense kanye nezikweletu njengesibonelo. Sinesicelo se-monolithic, futhi sidinga ukusebenza ne-akhawunti kumshwalense. Silindele ukuthi unjiniyela athole ikilasi le-Akhawunti ekhona komunye umhlangano, alibhekise ekilasini Lomshwalense, futhi sizoba nekhodi yokusebenza. Isimiso se-DRY sizohlonishwa, umsebenzi uzokwenziwa ngokushesha ngokusebenzisa ikhodi ekhona.

Ngenxa yalokho, kuvela ukuthi izimo zama-akhawunti nomshuwalense zixhunyiwe. Njengoba izidingo ezintsha zivela, lokhu kuhlanganisa kuzophazamisa intuthuko, kwandise inkimbinkimbi yengqondo yebhizinisi eseyivele iyinkimbinkimbi. Ukuze uxazulule le nkinga, udinga ukuthola imingcele phakathi kwezingqikithi kukhodi futhi ususe ukuphulwa kwazo. Isibonelo, kumshwalense, kungenzeka ukuthi inombolo ye-akhawunti yeBhange Elikhulu enezinombolo ezingu-20 kanye nosuku i-akhawunti eyavulwa ngalo kuyokwanela.

Ukuze sihlukanise lezi zimo ezinqunyelwe komunye nomunye futhi siqale inqubo yokuhlukanisa ama-microservices kusixazululo se-monolithic, sisebenzise indlela efana nokudala ama-API angaphandle ngaphakathi kohlelo lokusebenza. Ukube besazi ukuthi imojuli ethile kufanele ibe isevisi encane, ngandlela thize ilungiswe ngaphakathi kwenqubo, khona-ke ngokushesha sashaya izingcingo kumqondo ongeyomunye umongo okhawulelwe ngamakholi angaphandle. Isibonelo, nge-REST noma i-WCF.

Sinqume ngokuqinile ukuthi ngeke siyigweme ikhodi ezodinga ukuthengiselana okusabalalisiwe. Esimweni sethu, kwaba lula kakhulu ukulandela lo mthetho. Asikahlangani nezimo lapho ukuthengiswa okuqinile okusabalalisiwe kudingekile ngempela - ukuvumelana kokugcina phakathi kwamamojula kwanele.

Ake sibheke isibonelo esithile. Sinomqondo we-orchestrator - ipayipi ecubungula ibhizinisi "lohlelo lokusebenza". Udala iklayenti, i-akhawunti kanye nekhadi lasebhange ngokulandelana. Uma iklayenti ne-akhawunti zidalwe ngempumelelo, kodwa ukudalwa kwekhadi kwehluleka, uhlelo lokusebenza aluhambisi esimweni "sokuphumelela" futhi luhlala kusimo "sekhadi elingadalwanga". Ngokuzayo, umsebenzi ongemuva uzowulanda bese uwuqeda. Uhlelo lube sesimweni sokungahambisani isikhathi eside, kodwa ngokuvamile sanelisekile ngalokhu.

Uma kuvela isimo lapho kudingeka ukuthi kugcinwe ingxenye yedatha ngokungashintshi, cishe sizoya ekuhlanganisweni kwesevisi ukuze siyicubungule ngenqubo eyodwa.

Ake sibheke isibonelo sokwaba i-microservice. Ungayiletha kanjani ekukhiqizeni ngokuphephile uma kuqhathaniswa? Kulesi sibonelo, sinengxenye ehlukile yesistimu - imojula yesevisi yokukhokha, enye yezingxenye zekhodi esingathanda ukwenza i-microservice.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Okokuqala, sakha i-microservice ngokubhala kabusha ikhodi. Senza ngcono izici ezithile ebesingajabule ngazo. Senza izimfuneko zebhizinisi ezintsha ezivela kukhasimende. Sengeza i-API Gateway ekuxhumaneni phakathi kwe-UI ne-backend, ezohlinzeka ngokudluliswa kwekholi.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Okulandelayo, sikhulula lokhu kulungiselelwa ukuthi kusebenze, kodwa esimweni sokuhlola. Iningi labasebenzisi bethu basasebenza nezinqubo zebhizinisi ezindala. Kubasebenzisi abasha, sakha inguqulo entsha yohlelo lokusebenza lwe-monolithic engasaqukethe le nqubo. Empeleni, sinenhlanganisela ye-monolith kanye ne-microservice esebenza njengomshayeli wendiza.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Ngomshayeli wendiza ophumelelayo, siyaqonda ukuthi ukucushwa okusha kuyasebenza ngempela, singasusa i-monolith endala ku-equation futhi sishiye ukucushwa okusha esikhundleni sesixazululo esidala.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Sekukonke, sisebenzisa cishe zonke izindlela ezikhona zokuhlukanisa ikhodi yomthombo ye-monolith. Zonke zisivumela ukuthi sehlise usayizi wezingxenye zohlelo lokusebenza futhi sizihumushele kumalabhulali amasha, senze ikhodi yomthombo engcono.

Ukusebenza nge-database


I-database ingahlukaniswa ibe yimbi kunekhodi yomthombo, njengoba iqukethe hhayi kuphela i-schema yamanje, kodwa futhi idatha yomlando eqoqwe.

I-database yethu, njengabanye abaningi, yayinesinye isici esibalulekile - usayizi wayo omkhulu. Lesi sizindalwazi saklanywa ngokuya ngengqondo yebhizinisi eyinkimbinkimbi ye-monolith, kanye nobudlelwano obuqoqwe phakathi kwamathebula ezimo ezihlukahlukene ezinemingcele.

Esimweni sethu, phezulu kuzo zonke izinkinga (idatha enkulu, ukuxhumana okuningi, ngezinye izikhathi imingcele engacacile phakathi kwamatafula), kwavela inkinga eyenzeka kumaphrojekthi amaningi amakhulu: ukusetshenziswa kwethempulethi yedatha eyabelwe. Idatha ithathwe kumathebula ngokubuka, ngokuphindaphinda, futhi yathunyelwa kwamanye amasistimu lapho lokhu kuphindaphinda kwakudingeka khona. Ngenxa yalokho, asikwazanga ukususa amathebula ku-schema esihlukile ngoba asetshenziswe ngokuqhubekayo.

Ukuhlukaniswa okufanayo kuzimo ezilinganiselwe kukhodi kusisiza ekuhlukaniseni. Imvamisa isinika umbono omuhle wokuthi siyidiliza kanjani idatha ezingeni lesizindalwazi. Siyaqonda ukuthi yimaphi amathebula ayingxenye yengqikithi eyodwa eboshelwe nokuthi yiliphi kwelinye.

Sisebenzise izindlela ezimbili zomhlaba jikelele zokuhlukanisa isizindalwazi: ukwahlukanisa amatafula akhona kanye nokuhlukanisa ngokucubungula.

Ukuhlukanisa amathebula akhona kuyindlela enhle ongayisebenzisa uma isakhiwo sedatha sisihle, sihlangabezana nezidingo zebhizinisi, futhi wonke umuntu ujabulile ngaso. Kulokhu, singahlukanisa amathebula akhona abe yi-schema ehlukile.

Umnyango onokucutshungulwa uyadingeka lapho imodeli yebhizinisi isishintshe kakhulu, futhi amatafula engasasanelisi nhlobo.

Ukuhlukanisa amatafula akhona. Kudingeka sinqume ukuthi yini esizoyihlukanisa. Ngaphandle kwalolu lwazi, akukho lutho oluzosebenza, futhi lapha ukuhlukaniswa kwezimo ezinqunyelwe kukhodi kuzosisiza. Njengomthetho, uma ukwazi ukuqonda imingcele yezingqikithi kukhodi yomthombo, kuyacaca ukuthi yimaphi amathebula okufanele afakwe ohlwini lomnyango.

Ake sicabange ukuthi sinesixazululo lapho amamojula amabili e-monolith asebenzisana nesizindalwazi esisodwa. Kudingeka siqinisekise ukuthi imojuli eyodwa kuphela esebenzisana nesigaba samathebula ahlukanisiwe, futhi enye iqala ukuxhumana nayo nge-API. Okokuqala, kwanele ukuthi ukuqoshwa kuphela kwenziwa nge-API. Lesi yisimo esidingekayo ukuze sikhulume ngokuzimela kwama-microservices. Ukufunda ukuxhumana kungahlala inqobo nje uma kungekho nkinga enkulu.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Isinyathelo esilandelayo ukuthi singahlukanisa ingxenye yekhodi esebenza ngamatafula ahlukanisiwe, noma ngaphandle kokucubungula, sibe yi-microservice ehlukile futhi siyiqhube ngenqubo ehlukile, isitsha. Lena kuzoba isevisi ehlukile enoxhumo kusizindalwazi se-monolith kanye nalawo mathebula angahlobene ngqo nayo. I-monolith isasebenzisana ukuze ifundwe nengxenye ekhiphekayo.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Kamuva sizosusa lokhu kuxhumana, okungukuthi, ukufunda idatha kusuka kuhlelo lokusebenza lwe-monolithic kusuka kumathebula ahlukanisiwe nakho kuzodluliselwa ku-API.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Okulandelayo, sizokhetha ku-database evamile amatafula lapho kuphela i-microservice entsha esebenza khona. Singahambisa amathebula ku-schema esihlukile noma ngisho siwayise kusizindalwazi esihlukile somzimba. Kusenokuxhumana kokufunda phakathi kwe-microservice kanye nedathabheyisi ye-monolith, kepha akukho okufanele ukhathazeke ngakho, kulokhu kucushwa kungaphila isikhathi eside impela.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Isinyathelo sokugcina ukususa ngokuphelele konke ukuxhumana. Kulokhu, kungase kudingeke ukuthi sithuthe idatha kusuka kusizindalwazi esiyinhloko. Kwesinye isikhathi sifuna ukuphinda sisebenzise idatha ethile noma uhla lwemibhalo oluphindaphindwe kusuka kumasistimu angaphandle kuzigcinilwazi ezimbalwa. Lokhu kwenzeka kithi ngezikhathi ezithile.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Umnyango wokucutshungulwa. Le ndlela ifana kakhulu neyokuqala, kuphela ngokulandelana okuphambene. Ngokushesha sabe isizindalwazi esisha kanye ne-microservice entsha esebenzisana ne-monolith nge-API. Kodwa ngesikhathi esifanayo, kusala isethi yamathebula esizindalwazi esifuna ukuwasusa esikhathini esizayo. Asisayidingi; siyishintshe ngemodeli entsha.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Ukuze lolu hlelo lusebenze, cishe sizodinga isikhathi soshintsho.

Kukhona-ke izindlela ezimbili ezingenzeka.

Okokuqala: siphinda yonke idatha kusizindalwazi esisha nesidala. Kulokhu, sinokuphindaphindeka kwedatha futhi izinkinga zokuvumelanisa zingavela. Kodwa singathatha amaklayenti amabili ahlukene. Enye izosebenza nenguqulo entsha, enye nendala.

Owesibili: sihlukanisa idatha ngokuya ngemibandela ethile yebhizinisi. Isibonelo, sibe nemikhiqizo engu-5 ohlelweni egcinwe kusizindalwazi esidala. Sibeka owesithupha emsebenzini webhizinisi elisha kusigcinalwazi esisha. Kodwa sizodinga Isango Le-API elizovumelanisa le datha futhi libonise iklayenti ukuthi lizothola kuphi futhi ini.

Zombili izindlela ziyasebenza, khetha kuye ngesimo.

Ngemuva kokuthi siqinisekile ukuthi yonke into iyasebenza, ingxenye ye-monolith esebenza nezakhiwo ezindala ze-database ingakhutshazwa.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Isinyathelo sokugcina ukususa izakhiwo zedatha endala.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Ukufingqa, singasho ukuthi sinezinkinga nge-database: kunzima ukusebenza nayo uma kuqhathaniswa nekhodi yomthombo, kunzima kakhulu ukwabelana, kodwa kungenziwa futhi kufanele kwenziwe. Sithole izindlela ezisivumela ukuthi senze lokhu ngokuphepha, kodwa kuselula ukwenza amaphutha ngedatha kunekhodi yomthombo.

Ukusebenza ngekhodi yomthombo


Yile ndlela umdwebo wekhodi yomthombo owawubukeka ngayo lapho siqala ukuhlaziya iphrojekthi ye-monolithic.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Ingase ihlukaniswe ngokwezigaba ezintathu. Lolu ungqimba lwamamojula aqalisiwe, ama-plugin, izinsizakalo kanye nemisebenzi yomuntu ngamunye. Eqinisweni, lawa kwakungamaphuzu okungena ngaphakathi kwesisombululo se-monolithic. Wonke ayevalwe ngokuqinile nge-Common layer. Ibinomqondo webhizinisi ukuthi izinsiza zabelane ngayo kanye nokuxhumana okuningi. Isevisi ngayinye ne-plugin kusetshenziswa ama-assemblies avamile afika kwangu-10 noma ngaphezulu, kuye ngosayizi wawo nonembeza wonjiniyela.

Sibe nenhlanhla yokuba nemitapo yolwazi yengqalasizinda engasetshenziswa ngokuhlukana.

Kwesinye isikhathi kwakuvela isimo lapho ezinye izinto ezijwayelekile zingezona ezalolu ungqimba, kodwa kwakuyimitapo yolwazi yengqalasizinda. Lokhu kwaxazululwa ngokuqamba kabusha.

Ukukhathazeka okukhulu kwakuwukuqukethwe okulinganiselwe. Kwenzeka ukuthi izingqikithi ze-3-4 zixutshwe emhlanganweni owodwa ojwayelekile futhi zisetshenziswe komunye nomunye ngaphakathi kwemisebenzi efanayo yebhizinisi. Bekudingeka ukuqonda ukuthi lokhu kungahlukaniswa kuphi futhi kuhambisane nemiphi imingcele, nokuthi yini okufanele yenziwe ngokulandelayo ngokwenza lokhu kuhlukaniswa kube amaqoqo ekhodi yomthombo.

Senze imithetho eminingana yenqubo yokuhlukanisa amakhodi.

Okokuqala: Sasingasafuni ukwabelana ngengqondo yebhizinisi phakathi kwamasevisi, imisebenzi nama-plugin. Besifuna ukwenza ingqondo yebhizinisi izimele ngaphakathi kwama-microservices. I-Microservices, ngakolunye uhlangothi, icatshangwa kahle njengezinsizakalo ezikhona ngokuzimela ngokuphelele. Ngikholelwa ukuthi le ndlela iwukumosha ngandlela thize, futhi kunzima ukuyifinyelela, ngoba, ngokwesibonelo, izinsizakalo ku-C# noma kunjalo zizoxhunywa umtapo wezincwadi ojwayelekile. Isistimu yethu ibhalwe ngo-C#; asikasebenzisi obunye ubuchwepheshe. Ngakho-ke, sanquma ukuthi singakwazi ukusebenzisa imihlangano evamile yobuchwepheshe. Into esemqoka ukuthi aziqukethe izingcezu ze-logic yebhizinisi. Uma une- wrapper elula phezu kwe-ORM oyisebenzisayo, ukuyikopisha kusuka kusevisi kuya kusevisi kubiza kakhulu.

Ithimba lethu lithanda umklamo oqhutshwa yisizinda, ngakho ukwakheka kuka-anyanisi bekusifaneleka kakhulu. Isisekelo samasevisi ethu akusona isendlalelo sokufinyelela idatha, kodwa inhlanganisela enengqondo yesizinda, equkethe ingqondo yebhizinisi kuphela futhi engenakho ukuxhumana nengqalasizinda. Ngesikhathi esifanayo, singakwazi ukuguqula ngokuzimela umhlangano wesizinda ukuze sixazulule izinkinga ezihlobene nezinhlaka.

Kulesi sigaba sihlangabezane nenkinga yethu yokuqala enkulu. Insizakalo bekufanele ibhekisele kumhlangano wesizinda esisodwa, besifuna ukwenza umqondo uzimele, futhi isimiso se-DRY sisiphazamise kakhulu lapha. Onjiniyela babefuna ukusebenzisa kabusha amakilasi avela emihlanganweni engomakhelwane ukuze bagweme ukuphindaphinda, futhi ngenxa yalokho, izizinda zaqala ukuxhunywa ndawonye futhi. Sihlaziye imiphumela futhi sanquma ukuthi mhlawumbe inkinga isendaweni yedivayisi yokugcina ikhodi yomthombo. Besinenqolobane enkulu equkethe yonke ikhodi yomthombo. Isixazululo sawo wonke umsebenzi kwakunzima kakhulu ukuhlanganisa emshinini wendawo. Ngakho-ke, izixazululo ezincane ezihlukene zenzelwe izingxenye zephrojekthi, futhi akekho owanqabela ukungeza umhlangano othile ovamile noma wesizinda kuzo nokuzisebenzisa kabusha. Ithuluzi kuphela elingazange lisivumele ukuthi senze lokhu ukubuyekezwa kwekhodi. Kodwa ngezinye izikhathi nayo yahluleka.

Sabe sesiqala ukuthuthela kumodeli enezindawo zokugcina ezihlukene. Ingqondo yebhizinisi ayisagelezi isuka kusevisi iye kusevisi, izizinda sezizimele ngempela. Izimo ezihlanganisiwe zisekelwa ngokucacile. Siyisebenzisa kanjani kabusha imitapo yolwazi yengqalasizinda? Sazihlukanisa zibe yindawo yokugcina ehlukile, bese sizifaka kumaphakheji we-Nuget, esiwafaka ku-Artifactory. Nganoma yiluphi ushintsho, ukuhlanganisa nokushicilela kwenzeka ngokuzenzakalelayo.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Izinsizakalo zethu ziqale ukubhekisela kumaphakheji wengqalasizinda yangaphakathi ngendlela efanayo neyangaphandle. Silanda imitapo yolwazi yangaphandle kwa-Nuget. Ukuze sisebenze ne-Artifactory, lapho sibeka khona la maphakheji, sasebenzisa abaphathi bephakheji ababili. Ezinqolobaneni ezincane sasisebenzisa futhi i-Nuget. Ezinqolobaneni ezinezinsizakalo eziningi, sisebenzise i-Paket, ehlinzeka ngokungaguquguquki okwengeziwe phakathi kwamamojula.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Ngakho-ke, ngokusebenza ngekhodi yomthombo, ukushintsha kancane ukwakheka nokuhlukanisa amaqoqo, senza izinsiza zethu zizimele.

Izinkinga zengqalasizinda


Iningi lezinkinga zokuthuthela kuma-microservices zihlobene nengqalasizinda. Uzodinga ukuthunyelwa okuzenzakalelayo, uzodinga imitapo yolwazi emisha ukuze usebenzise ingqalasizinda.

Ukufakwa mathupha ezindaweni

Ekuqaleni, safaka isixazululo sezindawo mathupha. Ukwenza le nqubo ngokuzenzakalelayo, sidale ipayipi le-CI/CD. Sikhethe inqubo yokulethwa eqhubekayo ngoba ukuthunyelwa okuqhubekayo akukakamukeleki kithi ngokombono wezinqubo zebhizinisi. Ngakho-ke, ukuthumela ukusebenza kwenziwa kusetshenziswa inkinobho, futhi ngokuhlolwa - ngokuzenzakalelayo.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Sisebenzisa i-Atlassian, i-Bitbucket ukuze sigcine ikhodi yomthombo kanye ne-Bamboo ekwakheni. Sithanda ukubhala i-build scripts ku-Cake ngoba iyafana ne-C#. Amaphakheji enziwe ngomumo eza ku-Artifactory, futhi i-Ansible ifika ngokuzenzakalelayo kumaseva okuhlola, ngemva kwalokho ingahlolwa ngokushesha.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Ukugawula okuhlukile


Ngesinye isikhathi, omunye wemibono ye-monolith kwakuwukuhlinzeka ngokugawula okuhlanganyelwe. Besidinga futhi ukuqonda ukuthi yini okufanele siyenze ngamalogi angawodwana akumadiski. Amalogi ethu abhalelwe amafayela ombhalo. Sinqume ukusebenzisa isitaki esijwayelekile se-ELK. Asizange sibhalele i-ELK ngokuqondile ngabahlinzeki, kodwa sinqume ukuthi sizoshintsha amalogi ombhalo futhi sibhale i-ID yokulandela umkhondo kuwo njengesihlonzi, sengeze igama lesevisi, ukuze lawa malogi ahlukaniswe kamuva.

Ushintsho olusuka ku-monolith luye kuma-microservices: umlando nokusebenza

Sisebenzisa i-Filebeat, sithola ithuba lokuqoqa amalogi ethu kumaseva, bese siwaguqula, sisebenzise i-Kibana ukwakha imibuzo ku-UI futhi sibone ukuthi ikholi ihambe kanjani phakathi kwezinsizakalo. I-Trace ID isiza kakhulu ngalokhu.

Ukuhlola nokulungisa amaphutha ahlobene namasevisi


Ekuqaleni, asizange siqonde ngokugcwele ukuthi singasusa kanjani iphutha kumasevisi athuthukiswayo. Yonke into yayilula nge-monolith; sasiyiqhuba ngomshini wendawo. Ekuqaleni bazama ukwenza okufanayo nge-microservices, kodwa ngezinye izikhathi ukuze uqalise ngokugcwele i-microservice eyodwa udinga ukwethula ezinye eziningana, futhi lokhu akulungile. Sibone ukuthi sidinga ukuthuthela kumodeli lapho sishiya emshinini wendawo kuphela isevisi noma amasevisi esifuna ukuwasusa. Amasevisi asele asetshenziswa eziphakelini ezifana nokucushwa nge-prod. Ngemva kokulungisa iphutha, ngesikhathi sokuhlolwa, kumsebenzi ngamunye, izinsizakalo ezishintshiwe kuphela ezikhishwa kuseva yokuhlola. Ngakho-ke, isisombululo sihlolwa ngendlela esizovela ngayo ekukhiqizeni esikhathini esizayo.

Kunamaseva asebenzisa kuphela izinguqulo zokukhiqiza zamasevisi. Lawa maseva ayadingeka uma kwenzeka kuba nezigameko, ukuhlola ukulethwa ngaphambi kokuthunyelwa kanye nokuqeqeshwa kwangaphakathi.

Sengeze inqubo yokuhlola ezenzakalelayo sisebenzisa ilabhulali ye-Specflow edumile. Ukuhlola kuqala ngokuzenzakalela kusetshenziswa i-NUnit ngokushesha ngemva kokuthunyelwa ku-Ansible. Uma ukumbozwa komsebenzi kuzenzakalela ngokugcwele, asikho isidingo sokuhlola okwenziwa ngesandla. Nakuba ngezinye izikhathi ukuhlolwa okwengeziwe okungeziwe kusadingeka. Sisebenzisa omaka ku-Jira ukuze sinqume ukuthi iziphi izivivinyo okufanele zisebenze ngenkinga ethile.

Ukwengeza, isidingo sokuhlolwa komthwalo sinyukile; ngaphambilini bekwenziwa ezimweni ezingavamile kuphela. Sisebenzisa i-JMeter ukwenza izivivinyo, i-InfluxDB ukuze sizigcine, kanye ne-Grafana ukuze sakhe amagrafu enqubo.

Yini esiyizuzile?


Okokuqala, sisuse umqondo "wokukhululwa". Sekuphelile ukukhishwa okunyantisayo kwezinyanga ezimbili lapho le colossus isetshenziswa endaweni yokukhiqiza, ephazamisa izinqubo zebhizinisi okwesikhashana. Manje sisebenzisa amasevisi ngokwesilinganiso njalo ezinsukwini ezingu-1,5, siwahlanganisa ngoba aqala ukusebenza ngemva kokugunyazwa.

Akukho ukwehluleka okubulalayo ohlelweni lwethu. Uma sikhipha isevisi encane enesiphazamisi, khona-ke ukusebenza okuhlotshaniswa nayo kuzophulwa, futhi yonke eminye imisebenzi ngeke ithinteke. Lokhu kuthuthukisa kakhulu ukuzizwisa komsebenzisi.

Singakwazi ukulawula iphethini yokusebenzisa. Ungakhetha amaqembu ezinsizakalo ngokwehlukana naso sonke isixazululo, uma kunesidingo.

Ngaphezu kwalokho, siyinciphise kakhulu inkinga ngomugqa omkhulu wokuthuthukiswa. Manje sesinamaqembu emikhiqizo ahlukene asebenza namanye amasevisi ngokuzimela. Inqubo ye-Scrum isivele ilingana kahle lapha. Ithimba elithile lingase libe nomnikazi womkhiqizo ohlukile olinikeza imisebenzi.

Isifingqo

  • Ama-Microservices afaneleka kahle ukubola kwezinhlelo eziyinkimbinkimbi. Ngenqubo, siqala ukuqonda ukuthi yini ohlelweni lwethu, yiziphi izimo ezilinganiselwe ezikhona, lapho imingcele yabo ilele. Lokhu kukuvumela ukuthi usabalalise kahle ukuthuthukiswa phakathi kwamamojula futhi uvimbele ukudideka kwekhodi.
  • Ama-Microservices ahlinzeka ngezinzuzo zenhlangano. Zivame ukukhulunywa ngazo kuphela njengezakhiwo, kodwa noma yikuphi ukwakheka kuyadingeka ukuxazulula izidingo zebhizinisi, hhayi ngokwazo. Ngakho-ke, singasho ukuthi ama-microservices afaneleka kahle ekuxazululeni izinkinga emaqenjini amancane, njengoba iScrum isithandwa kakhulu manje.
  • Ukwehlukana kuyinqubo ephindaphindayo. Awukwazi ukuthatha uhlelo lokusebenza futhi umane uluhlukanise lube ngama-microservices. Umkhiqizo owumphumela awunakwenzeka ukuthi usebenze. Lapho unikezela ngezinsizakalo ezincane, kuyazuzisa ukubhala kabusha ifa elikhona, okungukuthi, ukuliguqula libe ikhodi esiyithandayo nesihlangabezana kangcono nezidingo zebhizinisi ngokuya ngokusebenza nesivinini.

    Isixwayiso esincane: Izindleko zokuthuthela kuma-microservices zibaluleke kakhulu. Kuthathe isikhathi eside ukuxazulula inkinga yengqalasizinda iyodwa. Ngakho-ke uma unohlelo lokusebenza oluncane olungadingi ukukala okuthile, ngaphandle uma unenani elikhulu lamakhasimende aqhudelana nokunaka kweqembu lakho nesikhathi, khona-ke ama-microservices angase angabi yilokho okudingayo namuhla. Kuyabiza impela. Uma uqala inqubo ngama-microservices, izindleko zizoba ngaphezulu uma uqala iphrojekthi efanayo ngokuthuthukiswa kwe-monolith.

    PS Indaba ethinta inhliziyo (futhi sengathi ingeyakho) - ngokusho isixhumanisi.
    Nansi inguqulo ephelele yombiko.

Source: www.habr.com

Engeza amazwana