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.
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.
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.
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
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.
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.
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.
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.
Ndi woyendetsa woyendetsa bwino, timamvetsetsa kuti kusinthika kwatsopano kumagwira ntchito, tikhoza kuchotsa monolith yakale ku equation ndikusiya kukonzanso kwatsopano m'malo mwa njira yakale.
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.
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.
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.
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.
Pambuyo pake tidzachotsa kugwirizanitsa uku, ndiko kuti, kuwerenga deta kuchokera ku ntchito ya monolithic kuchokera ku matebulo olekanitsidwa kudzasamutsidwanso ku API.
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.
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.
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.
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.
Chomaliza ndikuchotsa zida zakale za data.
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.
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.
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.
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.
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.
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.