Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Muchinyorwa chino, ini ndichataura nezve kuti chirongwa chandiri kushanda pachiri chakashandurwa sei kubva kune hombe monolith kuita seti ye microservices.

Chirongwa ichi chakatanga nhoroondo yaro kare kare, pakutanga kwa2000. Zvinyorwa zvekutanga zvakanyorwa muVisual Basic 6. Nokufamba kwenguva, zvakava pachena kuti kukura mumutauro uyu kwaizova kwakaoma kutsigira mune ramangwana, sezvo IDE uye mutauro wacho pachawo hauna kunyatsokudziridzwa. Pakupera kwema2000s, zvakasarudzwa kuti zvichinje kune C # inovimbisa. Shanduro itsva yakanyorwa maererano nekudzokorora kwekare, zvishoma nezvishoma kodhi yakawanda yakanyorwa mu.NET. Backend muC # yakatanga yakatarisana nekuvaka sevhisi, asi panguva yekusimudzira, maraibhurari akajairwa ane pfungwa akashandiswa, uye masevhisi akatangwa mune imwechete maitiro. Mhedzisiro yaive application yatakadaidza kuti "sevhisi monolith."

Imwe yemabhenefiti mashoma emusanganiswa uyu kwaive kugona kwemasevhisi kufonerana kuburikidza nekunze API. Paive nezvinodiwa zvakajeka zvekuchinja kune imwe sevhisi chaiyo, uye mune ramangwana, microservice architecture.

Takatanga basa redu rekuparara panosvika 2015. Isu hatisati tasvika padanho rakanaka - kuchine zvikamu zvepurojekiti hombe isingakwanise kunzi monoliths, asi haina kutaridzika senge microservices. Kunyange zvakadaro, kufambira mberi kunokosha.
Ndichataura nezvazvo munyaya.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Zviri mukati

Architecture uye matambudziko emhinduro iripo


Pakutanga, chivakwa chakaita seizvi: UI ishandiso yakaparadzana, chikamu che monolithic chakanyorwa muVisual Basic 6, iyo .NET application is a set of related services inoshanda nedatabase yakakura zvakaringana.

Kuipa kwemhinduro yapfuura

Imwe pfungwa yekukundikana
Isu takanga tine chibodzwa chimwe chekutadza: iyo .NET application yakamhanya mune imwechete maitiro. Kana chero module ikatadza, application yese yakatadza uye yaifanira kutangwazve. Sezvo isu tichigadzirisa huwandu hukuru hwemaitiro evashandisi vakasiyana, nekuda kwekutadza mune imwe yavo, munhu wese aisakwanisa kushanda kwenguva yakati. Uye kana paine kukanganisa kwesoftware, kunyangwe backup haina kubatsira.

Mutsara wekuvandudzwa
Iyi drawback ndeye sangano. Yedu application ine vatengi vazhinji, uye vese vanoda kuivandudza nekukurumidza sezvinobvira. Pakutanga, zvakanga zvisingabviri kuita izvi zvakafanana, uye vatengi vose vakamira mumutsetse. Kuita uku kwaive kwakashata kumabhizinesi nekuti vaifanira kuratidza kuti basa ravo rakakosha. Uye timu yekusimudzira yakapedza nguva ichironga mutsara uyu. Izvi zvakatora nguva yakawanda nesimba, uye chigadzirwa pakupedzisira hachina kukwanisa kuchinja nekukurumidza sezvavaizoda.

Suboptimal kushandiswa kwezviwanikwa
Paunenge uchitambira masevhisi mune imwe chete maitiro, isu taigara tichiteedzera zvizere kumisikidzwa kubva kune server kuenda kune server. Isu taida kuisa masevhisi akaremerwa zvakanyanya zvakasiyana kuitira kuti tisatambise zviwanikwa uye tiwane hutongi hunochinjika pamusoro pechirongwa chedu chekuendesa.

Zvakaoma kushandisa michina yemazuva ano
Dambudziko rinozivikanwa kune vese vanogadzira: pane chishuwo chekuunza tekinoroji yemazuva ano muprojekiti, asi hapana mukana. Iine hombe yemonolithic mhinduro, chero gadziriso yeraibhurari yazvino, tisingarevi shanduko kune imwe nyowani, inoshanduka kuita basa risiri diki. Zvinotora nguva yakareba kuratidza kumutungamiri wechikwata kuti izvi zvichaunza mamwe mabhonasi pane kutambisa tsinga.

Dambudziko rekupa shanduko
Iri ndiro raive dambudziko rakaipisisa - taiburitsa zvinyorwa mumwedzi miviri yega yega.
Kuburitswa kwega kwega kwakashanduka kuita njodzi chaiyo kubhangi, kunyangwe kuyedzwa uye kuedza kwevagadziri. Bhizinesi rakanzwisisa kuti pakutanga kwevhiki mamwe maitiro ayo aisazoshanda. Uye vanogadzira vakanzwisisa kuti vhiki yezviitiko zvakakomba zvakavamirira.
Munhu wose aiva nechido chokuchinja mamiriro acho ezvinhu.

Zvinotarisirwa kubva ku microservices


Nyaya yezvikamu kana yakagadzirira. Kuendeswa kwezvikamu kana zvakagadzirirwa nekuora mhinduro uye kuparadzanisa maitiro akasiyana.

Zvikwata zviduku zvezvigadzirwa. Izvi zvakakosha nekuti timu hombe yaishanda pane yekare monolith yaive yakaoma kubata. Chikwata chakadaro chakamanikidzwa kushanda maererano nehurongwa hwakasimba, asi vaida humwe hunyanzvi uye rusununguko. Zvikwata zvidiki chete zvaikwanisa kuita izvi.

Kusarudzika kwesevhisi nenzira dzakasiyana. Zvakanakisa, ndaida kuitsaura mumidziyo, asi nhamba huru yebasa rakanyorwa muNET Framework rinomhanya chete paWindows. Masevhisi anoenderana ne.NET Core ave kuoneka, asi kwasara mashoma.

Deployment flexibility. Tinoda kusanganisa masevhisi nenzira yatinoda, uye kwete nzira iyo kodhi inomanikidza.

Kushandisa matekinoroji matsva. Izvi zvinonakidza kune chero programmer.

Matambudziko ekuchinja


Ehe, kana zvaive nyore kutyora monolith kuita microservices, paisazove nechikonzero chekutaura nezvazvo pamisangano uye kunyora zvinyorwa. Kune akawanda misungo mukuita uku; Ini ndichatsanangura iwo makuru akatitadzisa.

Dambudziko rekutanga zvakajairwa kune mazhinji monoliths: kubatana kwebhizinesi logic. Patinonyora monolith, tinoda kushandisa zvakare makirasi edu kuitira kuti tisanyora kodhi isina kufanira. Uye kana uchienda kune microservices, izvi zvinova dambudziko: kodhi yese yakanyatsobatanidzwa, uye zvakaoma kuparadzanisa masevhisi.

Panguva yekutanga kwebasa, repository yaive nemapurojekiti anopfuura 500 uye anopfuura 700 zviuru mitsara yekodhi. Ichi chisarudzo chikuru uye dambudziko rechipiri. Zvaisaita kungoitora nekuipatsanura kuita mamicroservices.

Dambudziko rechitatu - kushaikwa kwezvivakwa zvinodiwa. Muchokwadi, isu takanga tichitevedzera kodhi kodhi kumaseva.

Maitiro ekufamba kubva ku monolith kuenda ku microservices


Kupa Microservices

Chekutanga, isu takabva tazvisarudzira isu pachedu kuti kupatsanurwa kwemamicroservices inzira yekudzokorora. Isu taigara tichidikanwa kukudziridza matambudziko ebhizinesi mukuwirirana. Mashandisiro atichaita izvi nehunyanzvi ratove dambudziko redu. Naizvozvo, takagadzirira nzira yekudzokorora. Izvo hazvishande neimwe nzira kana uine yakakura application uye haina kutanga yagadzirira kunyorwazve.

Ndedzipi nzira dzatinoshandisa kupatsanura mamicroservices?

Nzira yekutanga - fambisa mamodule aripo semasevhisi. Panyaya iyi, takaita rombo rakanaka: pakanga paine masevhisi akanyoreswa akashanda achishandisa WCF protocol. Vakaparadzaniswa kuva magungano akasiyana. Isu takavatakura zvakasiyana, tichiwedzera diki yekuvhura kune imwe neimwe kuvaka. Yakanga yakanyorwa uchishandisa iyo inoshamisa Topshelf raibhurari, iyo inokutendera iwe kumhanyisa chishandiso zvese sevhisi uye sekoni. Izvi zvakanakira debugging sezvo pasina mamwe mapurojekiti anodiwa mumhinduro.

Iwo masevhisi akabatana zvinoenderana nebhizinesi logic, sezvo ivo vaishandisa magungano akajairwa uye vaishanda neyakajairwa dhatabhesi. Vaisatombodanwa kunzi microservices mune yavo yakachena fomu. Nekudaro, isu tinogona kupa masevhisi aya zvakasiyana, nenzira dzakasiyana. Izvi zvega zvakaita kuti zvikwanisike kuderedza simba ravo pane mumwe nemumwe, kuderedza dambudziko nekukura kwakafanana uye imwe pfungwa yekukundikana.

Gungano pamwe nemugamuchiri ingori mutsara mumwe chete wekodhi mukirasi yePurogiramu. Takavanza basa neTopshelf mukirasi yebetsero.

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

       }
    }
}

Yechipiri nzira yekugovera microservices ndeye: vagadzirire kugadzirisa matambudziko matsva. Kana panguva imwechete iyo monolith isingakure, izvi zvatove zvakanakisa, zvinoreva kuti tiri kufamba munzira yakarurama. Kugadzirisa matambudziko matsva, takaedza kugadzira masevhisi akasiyana. Kana paive nemukana wakadaro, saka takagadzira mamwe "canonical" masevhisi anogadzirisa zvizere yavo data data, dhatabhesi rakasiyana.

Isu, sevazhinji, takatanga nekutendesa uye nemvumo masevhisi. Vakakwana pane izvi. Ivo vakazvimiririra, sekutonga, vane yakaparadzana data data. Ivo pachavo havabatanidzi ne monolith, chete inotendeukira kwavari kugadzirisa mamwe matambudziko. Uchishandisa masevhisi aya, unogona kutanga shanduko kuenda kune chivakwa chitsva, gadzirisa zvivakwa pazviri, edza dzimwe nzira dzine chekuita netiweki raibhurari, nezvimwe. Isu hatina chero zvikwata musangano redu izvo zvisingakwanisi kugadzira sevhisi yehuchokwadi.

Nzira yechitatu yekugovera microservicesIyo yatinoshandisa yakatinakira zvishoma. Uku ndiko kubviswa kwebhizinesi logic kubva kuUI layer. Yedu huru UI application idesktop; iyo, senge backend, yakanyorwa muC #. Vagadziri vacho nguva nenguva vaikanganisa uye vaiendesa zvikamu zvepfungwa kuUI iyo yaifanira kunge iripo kumashure uye kushandiswa zvakare.

Kana iwe ukatarisa muenzaniso chaiwo kubva kukodhi yechikamu cheUI, unogona kuona kuti yakawanda yeiyi mhinduro ine chaiyo bhizinesi logic iyo inobatsira mune mamwe maitiro, kwete kungovaka iyo UI fomu.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Iyo chaiyo UI logic iripo chete mumitsetse miviri yekupedzisira. Takachiendesa kuseva kuitira kuti ishandiswe zvakare, nokudaro kuderedza UI uye kuwana dhizaini chaiyo.

Yechina uye inonyanya kukosha nzira yekuparadzanisa microservices, iyo inoita kuti zvikwanise kuderedza monolith, ndiko kubviswa kwemabasa aripo nekugadzirisa. Kana isu tichitora mamodule aripo sezvaari, mhedzisiro yacho haisi nguva dzose kune vanogadzira, uye maitiro ebhizinesi anogona kunge asisina nguva kubva pakagadzirwa kushanda. Ne refactoring, tinogona kutsigira bhizinesi idzva nekuti zvinodiwa zvebhizinesi zviri kuramba zvichichinja. Isu tinokwanisa kuvandudza iyo kodhi kodhi, kubvisa zvinozivikanwa kukanganisa, uye kugadzira iri nani data modhi. Kune akawanda mabhenefiti arikuitika.

Kuparadzanisa masevhisi kubva pakugadziriswa kwakabatana zvisingaite kune pfungwa yeakaganhurwa mamiriro. Iyi ipfungwa kubva kuDomain Driven Design. Zvinoreva chikamu cheiyo domain modhi umo mazwi ese emutauro mumwechete anotsanangurwa zvakasiyana. Ngatitarisei mamiriro einishuwarenzi nemabhiri semuenzaniso. Isu tine monolithic application, uye isu tinofanirwa kushanda neaccount muinishuwarenzi. Isu tinotarisira kuti mugadziri awane kirasi iripo yeAccount mune imwe gungano, itaure kubva kukirasi yeInishuwarenzi, uye isu tichave nekodhi yekushanda. Nheyo yeDRY icharemekedzwa, basa richaitwa nokukurumidza nekushandisa kodhi iripo.

Nekuda kweizvozvo, zvinoitika kuti mamiriro eakaunti uye inishuwarenzi akabatana. Sezvo zvinodiwa zvitsva zvinobuda, kubatanidza uku kunozokanganisa budiriro, zvichiwedzera kuomarara kweiyo yatove yakaoma bhizinesi logic. Kuti ugadzirise dambudziko iri, unofanirwa kutsvaga miganhu pakati pemamiriro ezvinhu mukodhi uye kubvisa kukanganisa kwavo. Semuenzaniso, mumamiriro einishuwarenzi, zvinogoneka kuti nhamba yeakaundi yeCentral Bank yemakumi maviri uye zuva rakavhurwa account inokwana.

Kuti tiparadzanise aya akasungirirwa mamiriro kubva kune mumwe nemumwe uye kutanga maitiro ekuparadzanisa microservices kubva kune monolithic mhinduro, takashandisa nzira yakadai sekugadzira ekunze APIs mukati mekushandisa. Dai isu taiziva kuti imwe module inofanirwa kuve microservice, neimwe nzira yakagadziridzwa mukati mekuita, saka isu takabva tangofona kune iyo logic ndeyeimwe mamiriro akaganhurirwa kuburikidza nekufona kwekunze. Semuenzaniso, kuburikidza neREST kana WCF.

Isu takasarudza zvakasimba kuti isu hatingadzivise kodhi iyo inoda kugoverwa kutengeserana. Muchiitiko chedu, zvakava nyore kutevera mutemo uyu. Isu hatisati tasangana nemamiriro ezvinhu apo kutengeserana kwakagovaniswa kunonyatso kudiwa - kuwirirana kwekupedzisira pakati pemamodule kwakaringana.

Ngatitarisei muenzaniso chaiwo. Tine pfungwa yeorchestrator - pombi inogadzirisa chikamu che "application". Anogadzira mutengi, account uye kadhi rekubhengi. Kana mutengi neakaunti zvakaitwa zvinobudirira, asi kugadzirwa kwekadhi kukatadza, chishandiso hachifambisi kune "rakabudirira" chimiro uye chinoramba chiri mu "kadhi risina kugadzirwa". Mune ramangwana, chiitiko chekumashure chinochisimudza nekuchipedza. Iyo sisitimu yave iri mumamiriro ekusaenderana kwenguva yakati, asi isu tinowanzo kugutsikana neizvi.

Kana mamiriro ezvinhu akaitika kana zvichidikanwa kuchengetedza chikamu che data nguva dzose, isu tichaenda kunobatanidzwa sevhisi kuitira kuti tigadzirise mune imwe maitiro.

Ngatitarisei muenzaniso wekugovera microservice. Iwe unogona sei kuiunza pakugadzirwa zvakachengetedzeka? Mumuenzaniso uyu, isu tine chikamu chakasiyana chehurongwa - yekubhadhara sevhisi module, chimwe chezvikamu zvekodhi zvatingade kuita microservice.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Chekutanga pane zvese, tinogadzira microservice nekunyorazve kodhi. Tiri kuvandudza zvimwe zvatisina kufara nazvo. Isu tinoshandisa bhizinesi idzva zvinodiwa kubva kune mutengi. Isu tinowedzera API Gedhi kune hukama pakati peUI neiyo backend, iyo ichapa yekufona kutumira.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Tevere, isu tinosunungura iyi gadziriso mukushanda, asi mune yekutyaira mamiriro. Vazhinji vevashandisi vedu vachiri kushanda nemaitiro ekare ebhizinesi. Kune vashandisi vatsva, tiri kugadzira vhezheni itsva yemonolithic application iyo isisina maitiro aya. Chaizvoizvo, isu tine musanganiswa we monolith uye microservice inoshanda semutyairi.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Nemutyairi wendege akabudirira, tinonzwisisa kuti kugadziridzwa kutsva kunoshanda zvechokwadi, tinogona kubvisa monolith yekare kubva kuequation uye kusiya iyo nyowani yekugadzirisa panzvimbo yemhinduro yekare.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Pakazara, isu tinoshandisa dzinenge dzese nzira dziripo dzekutsemura iyo source code ye monolith. Ese anotitendera kudzikisa saizi yezvikamu zvekushandisa uye kuzvishandura kumaraibhurari matsva, tichigadzira zvirinani sosi kodhi.

Kushanda ne database


Iyo dhatabhesi inogona kukamurwa zvakanyanya kupfuura iyo kodhi kodhi, sezvo isina chete schema yazvino, asiwo yakaunganidzwa yenhoroondo data.

Dhatabhesi yedu, sevamwe vazhinji, yaive neimwe yakakosha drawback - hukuru hwayo. Iri dhatabhesi rakagadzirwa zvinoenderana neyakaomesesa bhizinesi logic ye monolith, uye hukama hwakaunganidzwa pakati pematafura eakasiyana akaganhurwa mamiriro.

Muchiitiko chedu, pamusoro pematambudziko ose (database yakakura, yakawanda yekubatanidza, dzimwe nguva miganhu isina kujeka pakati pematafura), dambudziko rakamuka rinoitika mumapurojekiti akawanda makuru: kushandiswa kweiyo yakagoverwa database template. Dhata yakatorwa kubva pamatafura kuburikidza nekuona, kuburikidza nekudzokorora, uye kutumirwa kune mamwe masisitimu kwaidiwa kudzokorora uku. Nekuda kweizvozvo, hatina kukwanisa kufambisa matafura mune imwe schema yakaparadzana nekuti aishandiswa nesimba.

Kupatsanura kwakafanana muzvikamu zvishoma mukodhi kunotibatsira mukuparadzana. Zvinowanzotipa zano rakanaka remabatiro atinoita iyo data padanho redhatabhesi. Isu tinonzwisisa kuti ndeapi matafura ari eimwe yakaganhurwa mamiriro uye ndeapi kune imwe.

Isu takashandisa nzira mbiri dzepasirese dzekugovera dhatabhesi: kupatsanura kwematafura aripo uye kupatsanura nekugadzirisa.

Kupatsanura matafura aripo inzira yakanaka yekushandisa kana iyo data chimiro yakanaka, inosangana nezvinodiwa zvebhizinesi, uye munhu wese anofara nazvo. Muchiitiko ichi, tinogona kuparadzanisa matafura aripo mune imwe schema yakasiyana.

Dhipatimendi rine kugadzirisa rinodiwa kana bhizinesi rebhizimisi rachinja zvikuru, uye matafura haasati atigutsa zvachose.

Kutsemura matafura aripo. Tinofanira kusarudza chatichaparadzanisa. Pasina ruzivo urwu, hapana chichashanda, uye pano kuparadzaniswa kwemiganhu yakasungwa mukodhi kuchatibatsira. Sezvo mutemo, kana iwe uchikwanisa kunzwisisa miganhu yezvimiro mune iyo kodhi kodhi, zvinova pachena kuti ndeapi matafura anofanirwa kuverengerwa murondedzero yedhipatimendi.

Ngatimbofungidzira kuti isu tine mhinduro umo maviri monolith modules anopindirana neimwe dhatabhesi. Isu tinofanirwa kuve nechokwadi chekuti module imwe chete inodyidzana nechikamu chematafura akapatsanurwa, uye imwe inotanga kupindirana nayo kuburikidza neAPI. Kutanga, zvakakwana kuti kurekodha chete kunoitwa kuburikidza neAPI. Ichi chimiro chinodiwa kuti isu titaure nezve rusununguko rwe microservices. Kuverenga kubatana kunogona kuramba chero bedzi pasina dambudziko guru.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Nhanho inotevera ndeyekuti isu tinokwanisa kupatsanura chikamu chekodhi chinoshanda nematafura akapatsanurwa, ane kana asina kugadziridzwa, mune yakaparadzana microservice uye kuimhanyisa mune imwe nzira, mudziyo. Iri richava sevhisi yakaparadzana ine chinongedzo kune monolith dhatabhesi uye iwo matafura asingaenderane nawo zvakananga. Iyo monolith ichiri kupindirana yekuverenga nechikamu chinobviswa.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Gare gare isu tichabvisa kubatana uku, ndiko kuti, kuverenga data kubva kune monolithic application kubva kumatafura akapatsanurwa ichaendeswawo kuAPI.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Tevere, isu tichasarudza kubva kune yakajairwa dhatabhesi matafura ayo chete iyo itsva microservice inoshanda. Tinogona kufambisa matafura kune yakaparadzana schema kana kunyange kune yakaparadzana yenyama dhatabhesi. Pachine hukama hwekuverenga pakati peiyo microservice uye monolith dhatabhesi, asi hapana chekunetseka nazvo; mune iyi gadziriso inogona kurarama kwenguva yakati rebei.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Nhanho yekupedzisira ndeyekubvisa zvachose zvese zvinongedzo. Muchiitiko ichi, isu tingangoda kutamisa data kubva kune huru database. Dzimwe nguva isu tinoda kushandisa zvakare imwe data kana madhairekitori akadzokororwa kubva kunze masisitimu mune akati wandei dhatabhesi. Izvi zvinoitika kwatiri nguva nenguva.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Dhipatimendi rekugadzirisa. Iyi nzira yakafanana neyokutanga, chete munhevedzano yakarongeka. Isu tinongopa dhatabhesi nyowani uye nyowani microservice inosangana nemonolith kuburikidza neAPI. Asi panguva imwe cheteyo, kuchine seti yematafura edatabase yatinoda kudzima mune ramangwana. Hatichachida; takachitsiva mumhando itsva.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Kuti chirongwa ichi chishande, isu tingangoda nguva yekuchinja.

Pane ipapo nzira mbiri dzinogoneka.

Yokutanga: isu tinodzokorora data rese mune itsva uye yekare dhatabhesi. Muchiitiko ichi, isu tine data redundancy uye matambudziko ekuwiriranisa angamuka. Asi tinogona kutora vatengi vaviri vakasiyana. Imwe ichashanda neshanduro itsva, imwe neyekare.

Yechipiri: Isu tinogovanisa data zvinoenderana nemamwe mabhizinesi maitiro. Semuenzaniso, takanga tine zvigadzirwa zvishanu muhurongwa izvo zvakachengetwa mudura rekare. Isu tinoisa yechitanhatu mukati mebasa idzva rebhizinesi mune dhatabhesi nyowani. Asi isu tichada API Gedhi rinozowiriranisa iyi data uye kuratidza mutengi kupi uye chii chekutora kubva.

Nzira mbiri dzinoshanda, sarudza zvichienderana nemamiriro ezvinhu.

Mushure mokunge tine chokwadi chokuti zvinhu zvose zvinoshanda, chikamu che monolith chinoshanda nemaitiro ekare e database chinogona kuvharwa.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Nhanho yekupedzisira ndeyekubvisa zvimiro zvekare data.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Kupfupisa, tinogona kutaura kuti tine matambudziko nedhatabhesi: zvakaoma kushanda nayo kana ichienzaniswa nekodhi yekodhi, yakanyanya kuoma kugovera, asi inogona uye inofanira kuitwa. Tawana dzimwe nzira dzinotitendera kuti tiite izvi zvakachengeteka, asi zviri nyore kuita zvikanganiso nedata pane nekodhi kodhi.

Kushanda nekodhi kodhi


Izvi ndizvo zvaitaridzika sosi yekodhi dhizaini patakatanga kuongorora iyo monolithic purojekiti.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Inogona kukamurwa kuita zvidimbu zvitatu. Iyi inhete yemamodule akatangwa, plugins, masevhisi uye zviitiko zvemunhu. Muchokwadi, aya aive ekupinda mukati meiyo monolithic mhinduro. Ose akanga akavharwa zvakasimba neCommon layer. Yakanga iine bhizinesi pfungwa iyo masevhisi akagovaniswa uye akawanda ekubatanidza. Sevhisi yega yega uye plugin inoshandiswa kusvika gumi kana kupfuura magungano akajairika, zvichienderana nehukuru hwavo uye hana yevagadziri.

Takaita rombo rakanaka kuva nemaraibhurari ezvivakwa aigona kushandiswa akaparadzana.

Dzimwe nguva mamiriro ezvinhu aimuka apo zvimwe zvinhu zvakajairwa zvisiri zveiyi dhizaini, asi aive maraibhurari ezvivakwa. Izvi zvakagadziriswa nekutumidza zita.

Kunyanya kunetseka kwaiva miganhu yemiganhu. Zvakaitika kuti 3-4 mamiriro akavhenganiswa mune imwechete Yakajairwa gungano uye akashandisa mumwe nemumwe mukati memamwe mabasa ebhizinesi. Zvaive zvakakodzera kuti tinzwisise kuti izvi zvaigona kugovaniswa kupi uye pamwe nemiganhu ipi, uye zvekuzotevera nekugadzira mepu iyi kuita magungano ekodhi.

Isu takagadzira akati wandei mitemo yekodhi yekuparadzanisa maitiro.

Yokutanga: Isu takanga tisisade kugovera bhizinesi logic pakati pemasevhisi, zviitiko uye plugins. Isu taida kuita bhizinesi logic yakazvimirira mukati memicroservices. Microservices, kune rumwe rutivi, inofungidzirwa semasevhisi aripo akazvimirira zvachose. Ini ndinotenda kuti nzira iyi inoparadza, uye zvakaoma kuita, nekuti, semuenzaniso, masevhisi muC # achave akabatana neraibhurari yakajairika. Sisitimu yedu yakanyorwa muC #; hatisati tashandisa mamwe matekinoroji. Saka, takasarudza kuti taigona kushandisa magungano akajairika. Chinhu chikuru ndechekuti ivo havana chero zvidimbu zvebhizinesi logic. Kana uine wrapper zviri nyore pamusoro peORM yauri kushandisa, wobva waikopa kubva kune sevhisi kuenda kune sevhisi kunodhura zvakanyanya.

Chikwata chedu chinofarira dhizaini-inotungamirwa nedhizaini, saka zvivakwa zvehanyanisi zvaive zvakatikodzera. Hwaro hwemasevhisi edu hausi iwo data yekuwana layer, asi gungano rine domain logic, iyo ine chete bhizinesi logic uye isina hukama neiyo zvivakwa. Panguva imwecheteyo, isu tinogona kuzvimiririra kugadzirisa iyo domain assembly kugadzirisa matambudziko ane chekuita nehurongwa.

Panguva ino takasangana nedambudziko redu rekutanga. Iyo sevhisi yaifanira kutaura kune imwe domain assembly, isu taida kuita iyo logic yakazvimirira, uye iyo DRY musimboti waitikanganisa zvakanyanya pano. Vagadziri vacho vaida kushandisa zvakare makirasi kubva kumagungano akavakidzana kuti vadzivise kudzokorora, uye semhedzisiro, madomasi akatanga kubatanidzwa pamwechete zvakare. Isu takaongorora mhedzisiro uye tikafunga kuti pamwe dambudziko riripo munzvimbo yeiyo sosi kodhi yekuchengetedza mudziyo. Isu takanga tine hombe repository ine ese source code. Mhinduro yebasa rose yakanga yakaoma zvikuru kubatanidza pamuchina womunzvimbomo. Naizvozvo, mhinduro diki dzakapatsanurwa dzakagadzirwa kune zvikamu zvepurojekiti, uye hapana akarambidza kuwedzera imwe yakajairwa kana dura regungano kwavari nekuishandisa zvakare. Chishandiso chete chaisatitendera kuita izvi yaive yekuongorora kodhi. Asi dzimwe nguva zvakakundikanawo.

Ipapo takatanga kutamira kune modhi ine akasiyana repositori. Bhizinesi pfungwa haichayerera kubva kune sevhisi kuenda kune sevhisi, madomasi ave azvimiririra zvechokwadi. Mamiriro ezvinhu akasungirirwa anotsigirwa zvakajeka. Tinoshandisa sei zvakare maraibhurari ezvivakwa? Isu takazviparadzanisa mune imwe nzvimbo yekuchengetedza, tozoisa muNuget mapakeji, ayo isu tinoisa muArtifactory. Nekuchinja kupi zvako, kuungana uye kushambadza zvinongoitika.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Masevhisi edu akatanga kunongedzera mukati mezvivakwa mapakeji nenzira yakafanana neyekunze. Isu tinorodha ekunze maraibhurari kubva kuNuget. Kuti tishande neArtifactory, kwatakaisa mapakeji aya, takashandisa mamaneja maviri epasuru. Mumatura madiki takashandisawo Nuget. Mumarepositori ane akawanda masevhisi, takashandisa Paket, iyo inopa yakawanda vhezheni kuenderana pakati pemamodule.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Nokudaro, nekushanda pane kodhi yekodhi, kushandura zvishoma zvivakwa uye kupatsanura matura, tinoita kuti masevhisi edu awedzere kuzvimiririra.

Matambudziko ezvivakwa


Mazhinji ekudzika kwekuenda kune mamicroservices ane chekuita nehupfumi. Iwe unozoda otomatiki kutumirwa, iwe unozoda maraibhurari matsva kuti umhanye zvivakwa.

Manual installation munzvimbo

Pakutanga, isu takaisa mhinduro yenzvimbo nemaoko. Kugadzirisa maitiro aya, takagadzira pombi yeCI/CD. Isu takasarudza kuenderera mberi kwekuendesa maitiro nekuti kuenderera mberi kwekuendesa hakusati kwagamuchirwa kwatiri kubva pakuona kwemaitiro ebhizinesi. Nokudaro, kutumira kushanda kunoitwa uchishandisa bhatani, uye yekuedza - pakarepo.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Isu tinoshandisa Atlassian, Bitbucket yekuchengetedza kodhi kodhi uye Bamboo yekuvaka. Isu tinoda kunyora kuvaka zvinyorwa muKeke nekuti yakafanana neC #. Mapakeji akagadzirwa anouya kuArtifactory, uye Ansible anongoerekana asvika kumaseva ebvunzo, mushure mezvo anogona kuyedzwa nekukurumidza.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Kutema matanda kwakasiyana


Pane imwe nguva, imwe yemafungiro emonolith yaive yekugovera kugovanisa matanda. Taifanirawo kunzwisisa zvekuita nematanda ega ega ari pamadisk. Mabhuku edu anonyorerwa mameseji mafaira. Takasarudza kushandisa yakajairwa ELK stack. Hatina kunyorera ELK zvakananga kuburikidza nevanopa, asi takasarudza kuti tichagadzirisa zvinyorwa zvinyorwa uye tinyore trace ID mazviri sechiziviso, tichiwedzera zita rebasa, kuitira kuti matanda aya agokwanisa kuparadzaniswa gare gare.

Shanduko kubva ku monolith kuenda ku microservices: nhoroondo uye maitiro

Tichishandisa Filebeat, tinowana mukana wekuunganidza matanda edu kubva kumaseva, toashandura, shandisa Kibana kuvaka mibvunzo muUI uye ona kuti kufona kwakafamba sei pakati pemasevhisi. Trace ID inobatsira zvakanyanya neizvi.

Kuedza uye debugging ane hukama masevhisi


Pakutanga, takanga tisinganzwisise zvizere maitiro ekugadzirisa masevhisi ari kugadzirwa. Zvese zvaive nyore nemonolith; takaimhanyisa pamushini wemuno. Pakutanga vakaedza kuita zvakafanana ne microservices, asi dzimwe nguva kuti utange zvizere microservice imwe unofanirwa kuvhura mamwe akati wandei, uye izvi zvinokanganisa. Takaona kuti tinofanirwa kutamira kune modhi kwatinosiya pamushini wemuno chete sevhisi kana masevhisi atinoda kugadzirisa. Iwo asara masevhisi anoshandiswa kubva kumaseva anofanana nekumisikidzwa neprod. Mushure mekugadzirisa, panguva yekuedzwa, kune rimwe nerimwe basa, chete masevhisi akashandurwa anopihwa kune bvunzo server. Nokudaro, mhinduro inoedzwa nenzira iyo ichaonekwa mukugadzirwa mune ramangwana.

Kune maseva anongomhanyisa ekugadzira shanduro dzemasevhisi. Aya maseva anodiwa kana pane zviitiko, kutarisa kuendeswa kusati kwatumirwa uye nekudzidziswa kwemukati.

Isu takawedzera otomatiki yekuyedza maitiro tichishandisa yakakurumbira Specflow raibhurari. Miedzo inomhanya otomatiki uchishandisa NUnit pakarepo mushure mekutumirwa kubva kuAnsible. Kana iyo basa yekuvhara iri yakazara otomatiki, saka hapana chikonzero chekuongororwa kwemaoko. Kunyangwe dzimwe nguva yekuwedzera manyore yekuyedza ichiri kudikanwa. Isu tinoshandisa ma tag muJira kuona kuti ndedzipi bvunzo dzekuita kune imwe nyaya.

Pamusoro pezvo, kudiwa kwekuyedzwa kwemutoro kwakawedzera; kare zvaiitwa chete mune zvisingawanzo zviitiko. Isu tinoshandisa JMeter kumhanyisa bvunzo, InfluxDB kuzvichengeta, uye Grafana kuvaka maitiro magirafu.

Chii chatakawana?


Kutanga, takabvisa pfungwa ye "kusunungurwa". Kwapera mwedzi miviri kuburitswa kunotyisa apo iyi colossus yakaiswa munzvimbo yekugadzira, ichikanganisa kwenguva bhizinesi maitiro. Iye zvino isu tinotumira masevhisi paavhareji mazuva ega ega 1,5, tichiaisa mumapoka nekuti anopinda mukushanda mushure mekubvumidzwa.

Hapana kukundikana kunouraya muhurongwa hwedu. Kana tikasunungura microservice ine bug, ipapo kushanda kwakabatana nayo kuchatyoka, uye mamwe mabasa ose haazokanganiswi. Izvi zvinovandudza zvakanyanya ruzivo rwemushandisi.

Tinogona kudzora maitiro ekutumira. Iwe unogona kusarudza mapoka emasevhisi akasiyana kubva kune yasara mhinduro, kana zvichidikanwa.

Mukuwedzera, isu takaderedza zvakanyanya dambudziko nemutsara mukuru wekuvandudza. Isu tave nezvikwata zvakasiyana zvezvigadzirwa zvinoshanda nemamwe masevhisi zvakazvimirira. Iyo Scrum process yatove yakanaka kukwana pano. Chikwata chakasarudzika chinogona kunge chine Muridzi Wechigadzirwa chakasiyana anochipa mabasa.

Summary

  • Microservices yakanyatsokodzera pakuora yakaoma masisitimu. Mukuita izvi, tinotanga kunzwisisa zviri muhurongwa hwedu, ndeapi mamiriro akaganhurirwa aripo, pane miganhu yavo. Izvi zvinokutendera kuti ugovane zvakanaka kuvandudzwa pakati pemamodule uye kudzivirira kuvhiringidzika kwekodhi.
  • Microservices inopa mabhenefiti esangano. Ivo vanowanzo taurwa nezvayo chete sezvivakwa, asi chero zvivakwa zvinodiwa kugadzirisa bhizinesi zvinodiwa, uye kwete pachazvo. Naizvozvo, tinogona kutaura kuti mamicroservices akanyatsokodzera kugadzirisa matambudziko muzvikwata zvidiki, zvichipihwa kuti Scrum yakakurumbira zvino.
  • Kuparadzana inzira inodzokororwa. Iwe haugone kutora application uye kungoikamura kuita mamicroservices. Chigadzirwa chinoguma hachikwanisiki kushanda. Pakutsaurira mamicroservices, zvinobatsira kunyora zvakare nhaka iripo, kureva kuti, kuishandura kuita kodhi yatinoda uye inozadzisa zvirinani zvinodiwa nebhizinesi maererano nekushanda uye nekukurumidza.

    A small caveat: Mari yekufambisa kune microservices yakakosha. Zvakatora nguva yakareba kugadzirisa dambudziko rezvivakwa chete. Saka kana iwe uine diki application isingade chaiyo kuyera, kunze kwekunge uine nhamba huru yevatengi vanokwikwidza kutarisisa kwechikwata chako uye nguva, saka mamicroservices anogona kunge asiri iwo auri kuda nhasi. Inodhura chaizvo. Kana iwe ukatanga maitiro nema microservices, ipapo mari inozotanga yakakwira kupfuura kana iwe ukatanga purojekiti imwechete nekuvandudzwa kwe monolith.

    PS Imwe nyaya yemanzwiro (uye sekunge iwe pachako) - maererano batanidzo.
    Heino vhezheni yakazara yemushumo.

Source: www.habr.com

Voeg