Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

M'nkhaniyi, ndilankhula za momwe polojekiti yomwe ndikugwirayo inasinthira kuchoka ku monolith yaikulu kukhala ma microservices.

Ntchitoyi inayamba mbiri yake kalekale, kumayambiriro kwa chaka cha 2000. Mabaibulo oyambirira analembedwa mu Visual Basic 6. Patapita nthawi, zinaonekeratu kuti chitukuko cha chinenerochi chidzakhala chovuta kuthandizira mtsogolo, popeza IDE ndipo chinenerocho sichimakula bwino. Kumapeto kwa zaka za m'ma 2000, adaganiza zosinthira ku C # yodalirika kwambiri. Baibulo latsopanolo linalembedwa mofanana ndi kukonzanso kwakale, pang'onopang'ono ndondomeko yowonjezereka inalembedwa mu .NET. Backend mu C # poyambirira idangoyang'ana pa zomangamanga zautumiki, koma panthawi yachitukuko, malaibulale wamba okhala ndi malingaliro adagwiritsidwa ntchito, ndipo ntchito zidakhazikitsidwa mwanjira imodzi. Zotsatira zake zinali ntchito yomwe tidatcha "service monolith."

Chimodzi mwazabwino zochepa za kuphatikiza uku chinali kuthekera kwa mautumiki kuyimbirana wina ndi mnzake kudzera mu API yakunja. Panali zofunikira zomveka zosinthira ku ntchito yolondola kwambiri, ndipo mtsogolomo, zomangamanga za microservice.

Tinayamba ntchito yathu yowola chakumapeto kwa 2015. Sitinafikebe pamalo abwino - pali mbali zina za polojekiti yayikulu yomwe singatchulidwe kuti monoliths, koma sizikuwoneka ngati ma microservices. Komabe, kupita patsogolo n’kofunika kwambiri.
Ndilankhula za izo m'nkhani.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Zamkatimu

Zomangamanga ndi zovuta za yankho lomwe lilipo


Poyamba, zomangamanga zinkawoneka ngati izi: UI ndi ntchito yosiyana, gawo la monolithic linalembedwa mu Visual Basic 6, ntchito ya .NET ndi gulu la mautumiki ogwirizana omwe akugwira ntchito ndi database yayikulu.

Kuipa kwa njira yapitayi

Mfundo imodzi yolephera
Tinali ndi mfundo imodzi yolephera: ntchito ya .NET inayenda m'njira imodzi. Ngati gawo lililonse lalephera, pulogalamu yonseyo idalephera ndipo idayenera kuyambiranso. Popeza timapanga njira zambiri za ogwiritsa ntchito osiyanasiyana, chifukwa chakulephera m'modzi mwa iwo, aliyense sakanatha kugwira ntchito kwakanthawi. Ndipo pakachitika cholakwika pulogalamu, ngakhale zosunga zobwezeretsera sizinathandize.

Mzere wazowonjezera
Drawback iyi ndi m'malo mwa bungwe. Pulogalamu yathu ili ndi makasitomala ambiri, ndipo onse akufuna kuyikonza mwachangu momwe angathere. M'mbuyomu, zinali zosatheka kuchita izi mofanana, ndipo makasitomala onse adayima pamzere. Izi zinali zoipa kwa mabizinesi chifukwa adayenera kutsimikizira kuti ntchito yawo inali yofunika. Ndipo gulu lachitukuko lidathera nthawi kukonza mzerewu. Izi zinatenga nthawi yambiri ndi khama, ndipo mankhwalawo sakanatha kusintha mofulumira monga momwe akanafunira.

Kugwiritsa ntchito bwino zinthu
Tikamachitira misonkhano munjira imodzi, nthawi zonse tinkakopera zosintha kuchokera pa seva kupita ku seva. Tinkafuna kuyika ntchito zodzaza kwambiri padera kuti tisawononge chuma ndikukhala ndi mphamvu zotha kusintha ndondomeko yathu yotumizira.

Zovuta kukhazikitsa matekinoloje amakono
Vuto lodziwika bwino kwa onse opanga: pali chikhumbo chofuna kuyambitsa matekinoloje amakono mu polojekitiyi, koma palibe mwayi. Ndi yankho lalikulu la monolithic, zosintha zilizonse zalaibulale yamakono, osatchulapo za kusintha kwatsopano, zimasanduka ntchito yosakhala yaing'ono. Zimatenga nthawi yaitali kuti zitsimikizire kwa mtsogoleri wa gulu kuti izi zidzabweretsa mabonasi ambiri kuposa mitsempha yowonongeka.

Kuvuta kutulutsa zosintha
Ili linali vuto lalikulu kwambiri - tinali kutulutsa zotulutsa miyezi iwiri iliyonse.
Kutulutsidwa kulikonse kunakhala tsoka lenileni kwa banki, ngakhale kuyesedwa ndi kuyesetsa kwa opanga. Bizinesiyo idamvetsetsa kuti kumayambiriro kwa sabata zina mwazinthu zake sizingagwire ntchito. Ndipo otukulawo adamvetsetsa kuti sabata ya zochitika zazikulu zimawayembekezera.
Aliyense anali ndi chikhumbo chosintha mkhalidwewo.

Zoyembekeza kuchokera ku microservices


Nkhani ya zigawo pamene zakonzeka. Kupereka zigawozi zikakonzeka mwa kuwola yankho ndikulekanitsa njira zosiyanasiyana.

Magulu ang'onoang'ono ogulitsa. Izi ndizofunikira chifukwa gulu lalikulu lomwe likugwira ntchito pa monolith yakale linali lovuta kuyendetsa. Gulu loterolo linakakamizika kugwira ntchito motsatira ndondomeko yolimba, koma ankafuna kulenga komanso kudziimira. Ndi magulu ang'onoang'ono okha omwe angakwanitse izi.

Kupatulidwa kwa ntchito m'njira zosiyanasiyana. Momwemo, ndimafuna kuzipatula muzotengera, koma mautumiki ambiri olembedwa mu NET Framework amathamanga pa Windows okha. Ntchito zochokera ku NET Core tsopano zikuwonekera, koma zilipo zochepa.

Kusinthasintha kwa kutumiza. Tikufuna kuphatikiza mautumiki momwe tikufunira, osati momwe kachidindo imakakamiza.

Kugwiritsa ntchito matekinoloje atsopano. Izi ndizosangalatsa kwa aliyense wopanga mapulogalamu.

Mavuto a kusintha


Inde, ngati zinali zosavuta kuswa monolith kukhala microservices, sipakanakhala chifukwa choyankhula pamisonkhano ndikulemba nkhani. Pali misampha yambiri munjira iyi; Ndifotokoza zazikulu zomwe zidatilepheretsa.

Vuto loyamba zofananira pama monoliths ambiri: kulumikizana kwamalingaliro abizinesi. Tikalemba monolith, tikufuna kugwiritsanso ntchito makalasi athu kuti tisalembe khodi yosafunika. Ndipo mukasamukira ku ma microservices, izi zimakhala zovuta: ma code onse amalumikizana mwamphamvu, ndipo ndizovuta kulekanitsa mautumiki.

Pa nthawi yoyambira ntchito, malo osungiramo zinthu anali ndi ntchito zoposa 500 ndi mizere yoposa 700 zikwi. Ichi ndi chisankho chachikulu ndi vuto lachiwiri. Sizinali zotheka kungotenga ndikugawaniza kukhala ma microservices.

Vuto lachitatu - kusowa kwa zomangamanga zofunikira. M'malo mwake, tinali kukopera pamanja code code ku maseva.

Momwe mungasunthire kuchokera ku monolith kupita ku microservices


Kupereka Microservices

Choyamba, tidatsimikiza tokha kuti kulekanitsa ma microservices ndi njira yobwerezabwereza. Nthawi zonse tinkafunikira kupanga zovuta zamabizinesi molumikizana. Momwe tidzagwiritsire ntchito izi mwaukadaulo ndilo vuto lathu. Chifukwa chake, tidakonzekera njira yobwerezabwereza. Sizigwira ntchito mwanjira ina iliyonse ngati muli ndi pulogalamu yayikulu ndipo sinakonzekere kulembedwanso.

Kodi timagwiritsa ntchito njira ziti popatula ma microservices?

Njira yoyamba - suntha ma module omwe alipo ngati ntchito. Pachifukwa ichi, tinali ndi mwayi: panali ntchito zolembetsedwa kale zomwe zimagwira ntchito pogwiritsa ntchito protocol ya WCF. Anapatulidwa kukhala mipingo yosiyana. Tidawayika padera, ndikuwonjezera choyambitsa chaching'ono panyumba iliyonse. Linalembedwa pogwiritsa ntchito laibulale yabwino ya Topshelf, yomwe imakupatsani mwayi woyendetsa pulogalamuyi ngati ntchito komanso ngati chotonthoza. Izi ndizosavuta kuwongolera chifukwa palibe mapulojekiti owonjezera omwe amafunikira yankho.

Ntchitozi zidalumikizidwa molingana ndi malingaliro abizinesi, popeza amagwiritsa ntchito misonkhano wamba ndipo amagwira ntchito ndi database wamba. Sangatchulidwe kuti ma microservices mu mawonekedwe awo oyera. Komabe, tikhoza kupereka mautumikiwa mosiyana, m'njira zosiyanasiyana. Izi zokha zinapangitsa kuti athe kuchepetsa chikoka chawo kwa wina ndi mzake, kuchepetsa vutoli ndi chitukuko chofanana ndi mfundo imodzi yolephera.

Kusonkhana ndi wolandirayo ndi mzere umodzi wa code mu kalasi ya Program. Tinabisa ntchito ndi Topshelf m'kalasi lothandizira.

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

       }
    }
}

Njira yachiwiri yoperekera ma microservices ndi: pangani kuti athetse mavuto atsopano. Ngati nthawi yomweyo monolith sikukula, izi ndi zabwino kwambiri, zomwe zikutanthauza kuti tikuyenda bwino. Kuti tithetse mavuto atsopano, tinayesetsa kupanga mautumiki osiyana. Ngati panali mwayi wotero, ndiye kuti tidapanga mautumiki ambiri "ovomerezeka" omwe amawongolera kwathunthu mtundu wawo wa data, database yosiyana.

Ife, monga ambiri, tinayamba ndi ntchito zotsimikizira ndi zololeza. Iwo ndi angwiro kwa izi. Iwo ali odziimira okha, monga lamulo, ali ndi deta yosiyana. Iwo okha samalumikizana ndi monolith, koma amatembenukira kwa iwo kuti athetse mavuto ena. Pogwiritsa ntchito mautumikiwa, mukhoza kuyamba kusintha kwa zomangamanga zatsopano, kukonza zowonongeka pa iwo, kuyesa njira zina zokhudzana ndi malaibulale a pa intaneti, ndi zina zotero. Tilibe magulu aliwonse m'gulu lathu omwe sangathe kupanga ntchito zotsimikizira.

Njira yachitatu kugawa microservicesZomwe timagwiritsa ntchito ndizokhazikika pang'ono kwa ife. Uku ndikuchotsa malingaliro abizinesi pagawo la UI. Ntchito yathu yayikulu ya UI ndi desktop; izo, monga kumbuyo, zimalembedwa mu C #. Madivelopa nthawi ndi nthawi amalakwitsa ndikusamutsa magawo amalingaliro ku UI omwe amayenera kukhalapo kumbuyo ndikugwiritsidwanso ntchito.

Ngati muyang'ana chitsanzo chenichenicho kuchokera ku code ya gawo la UI, mukhoza kuona kuti zambiri mwa njirazi zili ndi malingaliro enieni a bizinesi omwe ali othandiza muzinthu zina, osati kungomanga mawonekedwe a UI.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Lingaliro lenileni la UI lili m'mizere ingapo yomaliza. Tinasamutsira ku seva kuti igwiritsidwenso ntchito, potero kuchepetsa UI ndikukwaniritsa kamangidwe koyenera.

Njira yachinayi komanso yofunika kwambiri yodzipatula ma microservices, zomwe zimapangitsa kuchepetsa monolith, ndikuchotsa ntchito zomwe zilipo kale ndi processing. Tikatulutsa ma module omwe alipo monga momwe alili, zotsatira zake sizikhala zokonda kwa opanga, ndipo bizinesi ikhoza kukhala yachikale kuyambira pomwe ntchitoyo idapangidwa. Ndi refactoring, titha kuthandizira njira yatsopano yamabizinesi chifukwa zofunikira zamabizinesi zikusintha nthawi zonse. Titha kukonza kachidindo kochokera, kuchotsa zolakwika zodziwika, ndikupanga mtundu wabwino kwambiri wa data. Pali zabwino zambiri zomwe zikubwera.

Kulekanitsa mautumiki kuchokera pakukonza kumalumikizidwa mosadukiza ndi lingaliro la malire. Ili ndi lingaliro lochokera ku Domain Driven Design. Zikutanthauza gawo lachitsanzo chadongosolo lomwe mawu onse a chinenero chimodzi amatanthauzidwa mwapadera. Tiyeni tione nkhani ya inshuwalansi ndi mabilu monga chitsanzo. Tili ndi pulogalamu ya monolithic, ndipo tifunika kugwira ntchito ndi akauntiyi mu inshuwaransi. Tikuyembekeza kuti wopangayo apeze kalasi ya Akaunti yomwe ilipo pamsonkhano wina, ndikuyitchula kuchokera kugulu la Inshuwaransi, ndipo tidzakhala ndi code yogwirira ntchito. Mfundo ya DRY idzalemekezedwa, ntchitoyi idzachitidwa mofulumira pogwiritsa ntchito code yomwe ilipo.

Zotsatira zake, zimakhala kuti zochitika zamaakaunti ndi inshuwaransi zimalumikizidwa. Zofunikira zatsopano zikatuluka, kuphatikiza uku kudzasokoneza chitukuko, ndikuwonjezera zovuta zamabizinesi omwe kale anali ovuta. Kuti muthetse vutoli, muyenera kupeza malire pakati pa zochitika mu code ndikuchotsa zolakwa zawo. Mwachitsanzo, pankhani ya inshuwaransi, ndizotheka kuti nambala ya akaunti ya Central Bank yokhala ndi manambala 20 komanso tsiku lomwe akauntiyo idatsegulidwa likhala lokwanira.

Kuti tisiyanitse zomwe zili malirezi kuchokera kwa wina ndi mzake ndikuyamba njira yolekanitsa ma microservices kuchokera ku monolithic yankho, tinagwiritsa ntchito njira monga kupanga ma API akunja mkati mwa pulogalamuyi. Tikadadziwa kuti gawo lina liyenera kukhala laling'ono, losinthidwa mwanjira ina, ndiye kuti nthawi yomweyo tidayimba foni kumalingaliro omwe ali amtundu wina wocheperako kudzera pama foni akunja. Mwachitsanzo, kudzera pa REST kapena WCF.

Tinasankha motsimikiza kuti sitingapewe ma code omwe angafune kugawidwa. Kwa ife, zinali zosavuta kutsatira lamuloli. Sitinakumanepo ndi zochitika zomwe kugawanika kokhazikika kumafunikiradi - kusasinthika komaliza pakati pa ma module ndikokwanira.

Tiyeni tione chitsanzo chapadera. Tili ndi lingaliro la oimba - payipi yomwe imayendetsa gulu la "application". Amapanga kasitomala, akaunti ndi khadi la banki motsatira. Ngati kasitomala ndi akaunti zidapangidwa bwino, koma kupangidwa kwa makhadi sikulephera, kugwiritsa ntchito sikusunthira ku "kuchita bwino" ndipo kumakhalabe mu "khadi lomwe silinapangidwe". M'tsogolomu, ntchito yakumbuyo idzayitenga ndikumaliza. Dongosololi lakhala likusagwirizana kwakanthawi, koma timakhutira ndi izi.

Zinthu zikachitika pakafunika kusungitsa mbali ya datayo mosadukiza, titha kupita kukaphatikiza ntchitoyo kuti tiyikonze munjira imodzi.

Tiyeni tiwone chitsanzo cha kugawa microservice. Kodi mungabweretse bwanji kuti ipangidwe bwino? Mu chitsanzo ichi, tili ndi gawo losiyana la dongosolo - gawo la utumiki wa malipiro, imodzi mwa zigawo za code zomwe tikufuna kupanga microservice.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Choyamba, timapanga microservice polembanso code. Tikuwongolera mbali zina zomwe sitinasangalale nazo. Timakhazikitsa zofunikira zamabizinesi atsopano kuchokera kwa kasitomala. Timawonjezera API Gateway ku mgwirizano pakati pa UI ndi backend, zomwe zidzapereke kutumiza mafoni.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Kenako, timamasula izi kuti zigwire ntchito, koma mumayendedwe oyendetsa. Ambiri mwa ogwiritsa ntchito athu akugwirabe ntchito ndi njira zamabizinesi akale. Kwa ogwiritsa ntchito atsopano, tikupanga mtundu watsopano wa pulogalamu ya monolithic yomwe ilibenso njirayi. Kwenikweni, tili ndi kuphatikiza kwa monolith ndi microservice yomwe ikugwira ntchito ngati woyendetsa ndege.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Ndi woyendetsa woyendetsa bwino, timamvetsetsa kuti kusinthika kwatsopano kumagwira ntchito, tikhoza kuchotsa monolith yakale ku equation ndikusiya kukonzanso kwatsopano m'malo mwa njira yakale.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Pazonse, timagwiritsa ntchito pafupifupi njira zonse zomwe zilipo pogawa ma code source a monolith. Zonsezi zimatilola kuti tichepetse kukula kwa magawo a pulogalamuyo ndikumasulira ku malaibulale atsopano, ndikupanga khodi yabwinoko.

Kugwira ntchito ndi database


Nawonso database imatha kugawidwa moyipa kuposa magwero, popeza ilibe schema yokhayo, komanso idasonkhanitsa mbiri yakale.

Nawonso achichepere athu, monga ena ambiri, anali ndi drawback ina yofunika - kukula kwake kwakukulu. Malo osungirako zinthuwa adapangidwa motsatira ndondomeko yabizinesi yovuta kwambiri ya monolith, komanso maubwenzi omwe amasonkhanitsidwa pakati pa ma tebulo azinthu zosiyanasiyana.

Kwa ife, pamwamba pa zovuta zonse (zosungirako zazikulu, maulumikizano ambiri, nthawi zina malire osadziwika bwino pakati pa matebulo), vuto linabuka lomwe limapezeka m'mapulojekiti akuluakulu ambiri: kugwiritsa ntchito template yogawana nawo. Deta idatengedwa kuchokera kumatebulo kudzera mukuwona, kudzera kubwereza, ndikutumizidwa ku machitidwe ena komwe kubwerezaku kunali kofunikira. Zotsatira zake, sitinathe kusuntha matebulowo kukhala schema yosiyana chifukwa adagwiritsidwa ntchito mwachangu.

Kugawanika komweko muzochitika zochepa mu code kumatithandiza pa kupatukana. Nthawi zambiri zimatipatsa lingaliro labwino la momwe timawonongera deta pamlingo wa database. Timamvetsetsa kuti ndi magome ati omwe ali amtundu umodzi ndi wina.

Tidagwiritsa ntchito njira ziwiri zapadziko lonse lapansi zogawanitsa nkhokwe: kugawa matebulo omwe alipo komanso kugawa ndi kukonza.

Kugawaniza matebulo omwe alipo ndi njira yabwino yogwiritsira ntchito ngati dongosolo la data lili bwino, likukwaniritsa zofunikira zamabizinesi, ndipo aliyense ali wokondwa nazo. Pankhaniyi, titha kulekanitsa matebulo omwe alipo kukhala schema yosiyana.

Dipatimenti yokhala ndi kukonza ndiyofunikira pamene mtundu wabizinesi wasintha kwambiri, ndipo matebulo sakutikhutitsa nkomwe.

Kugawa matebulo omwe alipo. Tiyenela kusankha zimene tidzalekanitsa. Popanda chidziwitso ichi, palibe chomwe chidzagwire ntchito, ndipo apa kulekanitsa kwa malire ozungulira mu code kudzatithandiza. Monga lamulo, ngati mutha kumvetsetsa malire azinthu zomwe zili mu code source, zimawonekeratu kuti ndi matebulo ati omwe ayenera kuphatikizidwa pamndandanda wa dipatimentiyo.

Tiyerekeze kuti tili ndi yankho lomwe ma module awiri a monolith amalumikizana ndi database imodzi. Tiyenera kuonetsetsa kuti gawo limodzi lokha limagwirizana ndi gawo la matebulo olekanitsidwa, ndipo linalo limayamba kuyanjana nalo kudzera pa API. Poyamba, ndikwanira kuti kujambula kokha kumachitika kudzera mu API. Izi ndi zofunika kuti tilankhule za ufulu wa microservices. Kulumikizana kowerenga kumatha kukhalabe ngati palibe vuto lalikulu.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Chotsatira ndichoti titha kulekanitsa gawo la code lomwe limagwira ntchito ndi matebulo olekanitsidwa, kapena popanda kukonza, mu microservice yosiyana ndikuyiyendetsa mwanjira ina, chidebe. Uwu udzakhala ntchito yosiyana yolumikizana ndi database ya monolith ndi matebulo omwe sagwirizana nawo. Monolith imalumikizanabe powerenga ndi gawo lomwe limachotsedwa.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Pambuyo pake tidzachotsa kugwirizanitsa uku, ndiko kuti, kuwerenga deta kuchokera ku ntchito ya monolithic kuchokera ku matebulo olekanitsidwa kudzasamutsidwanso ku API.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Kenako, tidzasankha kuchokera m'dawunilodi wamba matebulo omwe microservice yatsopano yokha imagwira ntchito. Titha kusuntha matebulo ku schema yosiyana kapena ku database yosiyana. Palinso kulumikizana kowerengera pakati pa microservice ndi database ya monolith, koma palibe chodetsa nkhawa, pakusinthidwa uku kumatha kukhala nthawi yayitali.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Chomaliza ndikuchotsa zolumikizira zonse. Pankhaniyi, tingafunike kusamutsa deta kuchokera ku database yayikulu. Nthawi zina timafuna kugwiritsanso ntchito data kapena zolemba zomwe zatengedwa kuchokera kuzinthu zakunja m'malo angapo. Izi zimachitika kwa ife nthawi ndi nthawi.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Processing dipatimenti. Njirayi ndi yofanana kwambiri ndi yoyamba, yongosintha. Nthawi yomweyo timagawira database yatsopano ndi microservice yatsopano yomwe imalumikizana ndi monolith kudzera pa API. Koma nthawi yomweyo, pamakhalabe ma tebulo a database omwe tikufuna kuwachotsa mtsogolomo. Sitikuzifunanso, tidazilowetsa m'chitsanzo chatsopano.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Kuti ndondomekoyi igwire ntchito, tidzafunika nthawi yosinthira.

Pali njira ziwiri zomwe zingatheke.

Yoyamba: timapanga deta yonse muzosunga zatsopano ndi zakale. Pachifukwa ichi, tili ndi kuperewera kwa data komanso zovuta zamalunzanitsidwe zitha kubuka. Koma tikhoza kutenga makasitomala awiri osiyana. Wina adzagwira ntchito ndi mtundu watsopano, wina ndi wakale.

chachiwiri: timagawanitsa deta molingana ndi njira zina zamabizinesi. Mwachitsanzo, tinali ndi zinthu 5 m'dongosolo lomwe linasungidwa mu database yakale. Timayika yachisanu ndi chimodzi mkati mwa ntchito yatsopano yabizinesi mu database yatsopano. Koma tidzafunika API Gateway yomwe ingalunzanitse deta iyi ndikuwonetsa kasitomala komwe angapeze komanso zomwe angapeze.

Njira ziwirizi zimagwira ntchito, sankhani malinga ndi momwe zinthu zilili.

Titatsimikiza kuti zonse zimagwira ntchito, gawo la monolith lomwe limagwira ntchito ndi zida zakale za database likhoza kulemala.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Chomaliza ndikuchotsa zida zakale za data.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Mwachidule, tinganene kuti tili ndi mavuto ndi database: n'zovuta kugwira nawo ntchito poyerekeza ndi code source, n'zovuta kugawana, koma zingatheke ndipo ziyenera kuchitika. Tapeza njira zina zomwe zimatilola kuchita izi mosatekeseka, komabe ndikosavuta kulakwitsa ndi data kuposa ndi code code.

Kugwira ntchito ndi source code


Izi ndi zomwe gwero la code code linkawoneka pamene tinayamba kusanthula polojekiti ya monolithic.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Itha kugawidwa pafupifupi magawo atatu. Ichi ndi gawo la ma module omwe adakhazikitsidwa, mapulagini, mautumiki ndi zochitika zapayekha. M'malo mwake, awa anali malo olowera mkati mwa njira ya monolithic. Onse anali osindikizidwa mwamphamvu ndi Common layer. Zinali ndi malingaliro abizinesi omwe mautumikiwa amagawana komanso kulumikizana kwambiri. Ntchito iliyonse ndi pulogalamu yowonjezera zimagwiritsidwa ntchito mpaka 10 kapena kupitilirapo misonkhano wamba, kutengera kukula kwawo komanso chikumbumtima cha omwe akupanga.

Tinali ndi mwayi wokhala ndi malaibulale a zomangamanga omwe angagwiritsidwe ntchito padera.

Nthawi zina zinthu zinkachitika pamene zinthu zina zomwe wamba sizinali za gululi, koma zinali zosungiramo mabuku. Izi zidathetsedwa posintha dzina.

Chodetsa nkhaΕ΅a chachikulu chinali nkhani zokhazikika. Zinachitika kuti zochitika za 3-4 zidasakanizidwa mumsonkhano umodzi Wamba ndipo zimagwiritsidwa ntchito wina ndi mzake mkati mwa ntchito zomwezo. Zinali zofunikira kumvetsetsa komwe izi zingagawidwe komanso malire ake, ndi zomwe tingachite polemba magawowa kukhala magwero amisonkho.

Tapanga malamulo angapo a ndondomeko yogawa ma code.

Yoyamba: Sitikufunanso kugawana malingaliro abizinesi pakati pa mautumiki, zochitika ndi mapulagini. Tinkafuna kupanga malingaliro abizinesi odziyimira pawokha mkati mwa ma microservices. Ma Microservices, kumbali ina, amaganiziridwa ngati mautumiki omwe amapezeka paokha. Ndikukhulupirira kuti njirayi ndi yowononga, ndipo n'zovuta kukwaniritsa, chifukwa, mwachitsanzo, ntchito za C # zidzalumikizidwa ndi laibulale yokhazikika. Dongosolo lathu lalembedwa mu C #; sitinagwiritsebe ntchito ukadaulo wina. Conco, tinaganiza kuti tikwanitse kugwilitsila nchito misonkhano yanthawi zonse. Chachikulu ndichakuti alibe zidutswa zamalingaliro abizinesi. Ngati muli ndi cholembera chosavuta pa ORM yomwe mukugwiritsa ntchito, ndiye kuti kukopera kuchokera ku ntchito kupita ku ntchito ndikokwera mtengo kwambiri.

Gulu lathu ndi lokonda mapangidwe oyendetsedwa ndi domain, kotero kamangidwe ka anyezi kunali koyenera kwa ife. Maziko a mautumiki athu si malo opezera deta, koma msonkhano wokhala ndi logic logic, yomwe ili ndi malingaliro abizinesi okha ndipo alibe mgwirizano ndi zomangamanga. Panthawi imodzimodziyo, tikhoza kusintha paokha chigawo cha domain kuti tithetse mavuto okhudzana ndi ma frameworks.

Pa nthawiyi tinakumana ndi vuto lalikulu loyamba. Utumikiwu umayenera kutanthauza msonkhano umodzi wokha, timafuna kuti malingaliro akhale odziyimira pawokha, ndipo mfundo ya DRY idatilepheretsa kwambiri pano. Madivelopa amafuna kugwiritsanso ntchito makalasi ochokera kumisonkhano yoyandikana kuti apewe kubwereza, ndipo chifukwa chake, madambwe adayambanso kulumikizidwa. Tidasanthula zotsatirazo ndipo tidaganiza kuti mwina vuto lilinso mdera lachida chosungirako ma code source. Tinali ndi nkhokwe yayikulu yokhala ndi magwero onse. Njira yothetsera polojekiti yonseyi inali yovuta kwambiri kusonkhanitsa pamakina apanyumba. Chifukwa chake, mayankho ang'onoang'ono ang'onoang'ono adapangidwa pagawo la polojekitiyo, ndipo palibe amene adaletsa kuwonjezera pagulu kapena madomeni ndikuwagwiritsanso ntchito. Chida chokhacho chomwe sichinatilole kuchita izi chinali kuwunika kwa code. Koma nthawi zina zinakanikanso.

Kenako tinayamba kusamukira ku chitsanzo chokhala ndi nkhokwe zosiyana. Malingaliro abizinesi sakuyendanso kuchokera ku ntchito kupita ku ntchito, madambwe adziyimira pawokha. Zolemba malire zimathandizidwa momveka bwino. Kodi timagwiritsanso ntchito bwanji malaibulale a zomangamanga? Tidawalekanitsa m'malo osungiramo ena, kenako ndikuyika m'maphukusi a Nuget, omwe timayika mu Artifactory. Ndi kusintha kulikonse, kuphatikiza ndi kufalitsa kumachitika zokha.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Ntchito zathu zidayamba kutengera maphukusi amkati momwemonso zakunja. Timatsitsa malaibulale akunja kuchokera ku Nuget. Kuti tigwire ntchito ndi Artifactory, komwe tinayika mapepalawa, tinagwiritsa ntchito oyang'anira phukusi awiri. M'malo ang'onoang'ono tidagwiritsanso ntchito Nuget. M'malo osungira okhala ndi mautumiki angapo, tidagwiritsa ntchito Paket, yomwe imapereka kusasinthika kwamitundu yambiri pakati pa ma module.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Chifukwa chake, pogwira ntchito pamakina oyambira, kusintha pang'ono kapangidwe kake ndikulekanitsa nkhokwe, timapanga mautumiki athu kukhala odziyimira pawokha.

Mavuto a zomangamanga


Zambiri mwazovuta zakusamukira ku ma microservices ndizokhudzana ndi zomangamanga. Mudzafunika kutumizidwa zokha, mudzafunika malaibulale atsopano kuti mugwiritse ntchito zomangamanga.

Kuyika pamanja m'malo

Poyamba, tidayika njira yothetsera madera pamanja. Kuti izi zitheke, tidapanga payipi ya CI/CD. Tinasankha njira yobweretsera mosalekeza chifukwa kutumizidwa mosalekeza sikunavomerezedwebe kwa ife kuchokera pamalingaliro abizinesi. Choncho, kutumiza ntchito kumachitika pogwiritsa ntchito batani, ndi kuyesa - basi.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Timagwiritsa ntchito Atlassian, Bitbucket posungira ma source code ndi Bamboo pomanga. Timakonda kulemba zolemba mu Keke chifukwa ndizofanana ndi C #. Maphukusi okonzeka amabwera ku Artifactory, ndipo Ansible amangofika kumaseva oyesera, pambuyo pake akhoza kuyesedwa nthawi yomweyo.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Patulani mitengo


Panthawi ina, imodzi mwa malingaliro a monolith inali kupereka mitengo yogawana nawo. Tinkafunikanso kumvetsetsa zoyenera kuchita ndi zipika za munthu aliyense zomwe zili pa disks. Zolemba zathu zimalembedwa kuti zilembedwe mafayilo. Tinaganiza zogwiritsa ntchito stack ya ELK. Sitinalembere kwa ELK mwachindunji kudzera mwa opereka chithandizo, koma tinaganiza kuti tisinthe zolembazo ndikulemba zizindikiro za ID momwemo monga chizindikiritso, ndikuwonjezera dzina lautumiki, kuti zipikazi zidulidwe pambuyo pake.

Kusintha kuchokera ku monolith kupita ku microservices: mbiri ndi machitidwe

Pogwiritsa ntchito Filebeat, timapeza mwayi wosonkhanitsa zipika zathu kuchokera ku maseva, kenako ndikuzisintha, gwiritsani ntchito Kibana kuti mupange mafunso mu UI ndikuwona momwe kuyimbako kunayendera pakati pa mautumiki. Trace ID imathandiza kwambiri ndi izi.

Kuyesa ndi kukonza zolakwika zokhudzana ndi ntchito


Poyamba, sitinamvetsetse bwino momwe tingathetsere ntchito zomwe zikupangidwa. Chilichonse chinali chosavuta ndi monolith; tinkayendetsa pamakina akomweko. Poyamba anayesa kuchita chimodzimodzi ndi ma microservices, koma nthawi zina kuti mutsegule microservice imodzi muyenera kuyambitsa ena angapo, ndipo izi ndizosasangalatsa. Tinazindikira kuti tifunika kusamukira ku chitsanzo kumene timasiya pamakina apafupi ndi ntchito kapena ntchito zomwe tikufuna kukonza. Ntchito zotsalira zimagwiritsidwa ntchito kuchokera ku maseva omwe amafanana ndi kasinthidwe ndi prod. Pambuyo pakuwongolera, pakuyesa, pa ntchito iliyonse, ntchito zosinthidwa zokha zimaperekedwa ku seva yoyesera. Choncho, yankho limayesedwa mu mawonekedwe omwe lidzawonekere popanga mtsogolo.

Pali ma seva omwe amangogwiritsa ntchito mitundu yopangira. Ma seva awa amafunikira pakachitika zochitika, kuyang'ana kutumizidwa musanatumizidwe komanso maphunziro amkati.

Tawonjezera njira yoyesera yokha pogwiritsa ntchito laibulale yotchuka ya Specflow. Mayesero amadziyendetsa okha pogwiritsa ntchito NUnit atangotumizidwa kuchokera ku Ansible. Ngati ntchito Kuphunzira ndi basi kwathunthu, ndiye palibe chifukwa kuyezetsa pamanja. Ngakhale nthawi zina kuyesa kwamanja kumafunikabe. Timagwiritsa ntchito ma tag ku Jira kuti tidziwe mayeso omwe tingathe kuchita pa nkhani inayake.

Kuphatikiza apo, kufunikira koyezetsa katundu kwawonjezeka; m'mbuyomu zinkachitika nthawi zina. Timagwiritsa ntchito JMeter kuyesa mayeso, InfluxDB kuwasunga, ndi Grafana kupanga ma graph opangira.

Kodi tapindula chiyani?


Choyamba, tinachotsa lingaliro la "kumasulidwa". Zapita miyezi iwiri yotulutsidwa pamene colossus iyi idatumizidwa kumalo opangira zinthu, ndikusokoneza kwakanthawi mabizinesi. Tsopano timatumiza ntchito pafupifupi masiku 1,5 aliwonse, ndikuziika m'magulu chifukwa zimayamba kugwira ntchito pambuyo povomerezedwa.

Palibe zolephera zowopsa m'dongosolo lathu. Ngati titulutsa microservice yokhala ndi cholakwika, ndiye kuti magwiridwe antchito ake adzasweka, ndipo ntchito zina zonse sizidzakhudzidwa. Izi zimathandizira kwambiri ogwiritsa ntchito.

Tikhoza kulamulira ndondomeko yotumizira. Mukhoza kusankha magulu a mautumiki mosiyana ndi yankho lonse, ngati kuli kofunikira.

Kuphatikiza apo, tachepetsa kwambiri vutoli ndi mzere waukulu wowongolera. Tsopano tili ndi magulu osiyanasiyana omwe amagwira ntchito ndi zina mwazochita payekha. Njira ya Scrum ndiyokwanira kale pano. Gulu linalake likhoza kukhala ndi Mwiniwake Wamalonda wina yemwe alipatsa ntchito.

Chidule

  • Ma Microservices ndi oyenera kuwonongeka kwa machitidwe ovuta. Pochita izi, timayamba kumvetsetsa zomwe zili mu dongosolo lathu, zomwe zili zochepa zomwe zilipo, zomwe malire awo ali. Izi zimakupatsani mwayi wogawa zosintha pakati pa ma module ndikupewa kusokoneza ma code.
  • Microservices amapereka phindu la bungwe. Nthawi zambiri amakambidwa ngati zomangamanga, koma zomangamanga zilizonse zimafunikira kuthetsa zosowa za bizinesi, osati paokha. Choncho, tikhoza kunena kuti ma microservices ndi oyenerera kuthetsa mavuto m'magulu ang'onoang'ono, chifukwa Scrum ndi yotchuka kwambiri tsopano.
  • Kulekana ndi njira yobwerezabwereza. Simungathe kutenga pulogalamu ndikungoyigawa kukhala ma microservices. Chotsatiracho sichingagwire ntchito. Popereka ma microservices, ndizopindulitsa kulembanso cholowa chomwe chilipo, ndiye kuti, kusintha kukhala code yomwe timakonda ndikukwaniritsa zosowa zamabizinesi malinga ndi magwiridwe antchito ndi liwiro.

    Chenjezo laling'ono: Ndalama zosamukira ku microservices ndizofunika kwambiri. Zinatenga nthawi yaitali kuti athetse vutoli yekha. Chifukwa chake ngati muli ndi pulogalamu yaying'ono yomwe sifunikira kukweza kwina, pokhapokha mutakhala ndi makasitomala ambiri omwe akupikisana ndi chidwi cha gulu lanu ndi nthawi, ndiye kuti ma microservices sangakhale omwe mukufuna lero. Ndi okwera mtengo ndithu. Ngati muyambitsa ndondomekoyi ndi ma microservices, ndiye kuti ndalamazo zidzakhala zokwera kwambiri kuposa ngati mutayambitsa ntchito yomweyo ndi chitukuko cha monolith.

    PS Nkhani yowonjezereka (ndipo ngati kwa inu nokha) - malinga ndi kugwirizana.
    Nawu mtundu wonse wa lipotilo.

Source: www.habr.com

Kuwonjezera ndemanga