Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Nyob rau hauv tsab xov xwm no, kuv mam li tham txog yuav ua li cas lub project kuv ua hauj lwm rau hloov los ntawm ib tug loj monolith mus rau ib tug txheej ntawm microservices.

Lub phiaj xwm pib nws keeb kwm ntev dhau los, thaum pib ntawm 2000. Thawj cov ntawv tau sau hauv Visual Basic 6. Lub sijhawm dhau los, nws tau pom tseeb tias kev txhim kho hauv hom lus no yuav nyuaj rau kev txhawb nqa yav tom ntej, txij li IDE thiab cov lus nws tus kheej yog tsim los tsis zoo. Thaum kawg ntawm xyoo 2000s, nws tau txiav txim siab hloov mus rau C# kev cog lus ntau dua. Tus tshiab version tau sau nyob rau hauv parallel nrog kev kho dua tshiab, maj mam ntau thiab ntau code tau sau nyob rau hauv .NET. Backend hauv C# tau pib tsom mus rau kev pabcuam kev tsim vaj tsev, tab sis thaum lub sijhawm txhim kho, cov tsev qiv ntawv uas muaj logic tau siv, thiab cov kev pabcuam tau pib ua haujlwm hauv ib txheej txheem. Qhov tshwm sim yog ib daim ntawv thov uas peb hu ua "kev pabcuam monolith."

Ib qho ntawm ob peb qhov zoo ntawm kev sib xyaw ua ke no yog lub peev xwm ntawm cov kev pabcuam hu rau ib leeg los ntawm API sab nraud. Muaj qhov yuav tsum tau ua ua ntej rau kev hloov mus rau qhov kev pabcuam kom raug, thiab yav tom ntej, microservice architecture.

Peb pib peb txoj haujlwm ntawm decomposition nyob ib ncig ntawm 2015. Peb tseem tsis tau mus txog lub xeev zoo tshaj plaws - tseem muaj qee qhov ntawm txoj haujlwm loj uas tsis tuaj yeem hu ua monoliths, tab sis lawv tsis zoo li microservices. Txawm li cas los xij, kev vam meej yog qhov tseem ceeb.
Kuv yuav tham txog nws hauv tsab xov xwm.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Txheem

Architecture thiab teeb meem ntawm cov kev daws teeb meem uas twb muaj lawm


Thaum xub thawj, lub architecture zoo li no: UI yog ib daim ntawv thov cais, qhov monolithic yog sau rau hauv Visual Basic 6, daim ntawv thov .NET yog ib txheej ntawm cov kev pabcuam cuam tshuam ua haujlwm nrog cov ntaub ntawv loj loj.

Qhov tsis zoo ntawm qhov kev daws teeb meem dhau los

Ib qho kev ua tsis tiav
Peb muaj ib qho kev ua tsis tiav: daim ntawv thov .NET tau khiav hauv ib txheej txheem. Yog tias ib qho module ua tsis tiav, tag nrho daim ntawv thov ua tsis tiav thiab yuav tsum tau rov pib dua. Txij li thaum peb automate ntau tus txheej txheem rau cov neeg siv sib txawv, vim yog qhov tsis ua haujlwm ntawm ib qho ntawm lawv, txhua tus neeg tsis tuaj yeem ua haujlwm rau qee lub sijhawm. Thiab nyob rau hauv cov ntaub ntawv ntawm ib tug software yuam kev, txawm backup tsis pab.

Queue ntawm kev txhim kho
Qhov teeb meem no yog lub koom haum. Peb daim ntawv thov muaj ntau tus neeg siv khoom, thiab lawv txhua tus xav txhim kho nws sai li sai tau. Yav dhau los, nws tsis tuaj yeem ua qhov no sib npaug, thiab txhua tus neeg siv khoom sawv hauv kab. Cov txheej txheem no tsis zoo rau kev lag luam vim lawv yuav tsum tau ua pov thawj tias lawv txoj haujlwm tseem ceeb. Thiab pab pawg txhim kho tau siv sijhawm los npaj cov kab no. Qhov no tau siv sijhawm ntau thiab siv zog, thiab cov khoom kawg tsis tuaj yeem hloov pauv sai npaum li lawv xav tau.

Kev siv cov peev txheej zoo tshaj plaws
Thaum hosting cov kev pabcuam hauv ib txheej txheem, peb ib txwm tau theej tag nrho cov kev teeb tsa los ntawm server mus rau server. Peb xav muab cov kev pabcuam thauj khoom hnyav tshaj plaws sib cais kom tsis txhob nkim cov peev txheej thiab tau txais kev tswj hwm yooj yim dua ntawm peb txoj kev xa tawm.

Tsis yooj yim rau kev siv cov thev naus laus zis niaj hnub no
Ib qho teeb meem paub txog txhua tus neeg tsim khoom: muaj lub siab xav qhia cov thev naus laus zis niaj hnub rau hauv qhov project, tab sis tsis muaj sijhawm. Nrog rau kev daws teeb meem loj monolithic, txhua qhov hloov tshiab ntawm lub tsev qiv ntawv tam sim no, tsis hais txog kev hloov pauv mus rau ib qho tshiab, hloov mus rau hauv txoj haujlwm tsis tseem ceeb. Nws yuav siv sij hawm ntev los ua pov thawj rau tus thawj coj hauv pab pawg tias qhov no yuav ua rau muaj txiaj ntsig ntau dua li qhov poob siab.

Nyuaj muab cov kev hloov pauv
Qhov no yog qhov teeb meem loj tshaj plaws - peb tau tso tawm txhua ob lub hlis.
Txhua qhov kev tso tawm tau dhau los ua kev puas tsuaj tiag tiag rau lub txhab nyiaj, txawm tias muaj kev sim thiab kev siv zog ntawm cov neeg tsim khoom. Lub lag luam nkag siab tias thaum pib ntawm lub lim tiam qee qhov kev ua haujlwm yuav tsis ua haujlwm. Thiab cov neeg tsim khoom nkag siab tias ib lub lim tiam ntawm qhov xwm txheej loj tos lawv.
Txhua tus muaj lub siab xav hloov qhov xwm txheej.

Kev cia siab los ntawm microservices


Teeb meem ntawm cov khoom siv thaum npaj txhij. Kev xa khoom ntawm cov khoom thaum npaj tau los ntawm decomposing cov tshuaj thiab sib cais cov txheej txheem sib txawv.

Cov khoom me me pab pawg. Qhov no yog qhov tseem ceeb vim tias ib pab pawg loj ua haujlwm ntawm lub qub monolith yog qhov nyuaj los tswj. Cov pab pawg no raug yuam ua haujlwm raws li cov txheej txheem nruj, tab sis lawv xav tau kev muaj tswv yim thiab kev ywj pheej ntau dua. Tsuas yog pab pawg me tuaj yeem them tau qhov no.

Kev cais cov kev pabcuam hauv cov txheej txheem sib cais. Qhov zoo tshaj plaws, kuv xav cais nws hauv ntim, tab sis ntau cov kev pabcuam sau rau hauv .NET Framework tsuas yog khiav ntawm Windows. Cov kev pabcuam raws li .NET Core tam sim no tau tshwm sim, tab sis tseem muaj qee qhov ntawm lawv.

Deployment yooj. Peb xav muab cov kev pab cuam raws li peb xav tau, thiab tsis yog txoj kev cai yuam nws.

Kev siv cov thev naus laus zis tshiab. Qhov no yog qhov nthuav rau txhua tus programmer.

Teeb meem kev hloov


Tau kawg, yog tias nws yooj yim los rhuav tshem lub monolith rau hauv microservices, yuav tsis tas yuav tham txog nws ntawm cov rooj sib tham thiab sau cov ntawv. Muaj ntau qhov pitfalls nyob rau hauv cov txheej txheem no; Kuv yuav piav qhia txog cov tseem ceeb uas cuam tshuam peb.

Thawj qhov teeb meem feem ntau ntawm monoliths: coherence ntawm kev lag luam logic. Thaum peb sau ib lub monolith, peb xav rov siv peb cov chav kawm kom tsis txhob sau cov lej tsis tsim nyog. Thiab thaum tsiv mus rau microservices, qhov no dhau los ua teeb meem: tag nrho cov cai yog nruj heev ua ke, thiab nws nyuaj rau cais cov kev pabcuam.

Thaum lub sij hawm pib ua hauj lwm, lub repository muaj ntau tshaj 500 tej yaam num thiab ntau tshaj 700 txhiab kab code. Qhov no yog qhov kev txiav txim siab loj heev thiab teeb meem thib ob. Nws tsis tuaj yeem tsuas yog coj nws thiab faib rau hauv microservices.

Qhov teeb meem thib peb - tsis muaj infrastructure tsim nyog. Qhov tseeb, peb tau manually luam cov code rau cov servers.

Yuav ua li cas txav los ntawm monolith mus rau microservices


Kev muab Microservices

Ua ntej, peb tau txiav txim siab tam sim rau peb tus kheej tias kev sib cais ntawm microservices yog txheej txheem rov ua dua. Peb yeej ib txwm xav kom tsim teeb meem kev lag luam nyob rau hauv parallel. Yuav ua li cas peb yuav siv qhov no technically twb yog peb qhov teeb meem. Yog li ntawd, peb tau npaj rau qhov txheej txheem rov ua dua. Nws yuav tsis ua hauj lwm lwm txoj kev yog tias koj muaj ib daim ntawv thov loj thiab nws tsis tau pib npaj rov sau dua.

Peb siv txoj kev twg los cais microservices?

Thawj txoj kev - txav cov modules uas twb muaj lawm ua cov kev pabcuam. Hauv qhov no, peb muaj hmoo: twb tau sau npe cov kev pabcuam uas ua haujlwm siv WCF raws tu qauv. Lawv tau muab cais ua nyias pawg. Peb xa lawv cais, ntxiv ib lub launcher me me rau txhua qhov tsim. Nws tau sau siv lub tsev qiv ntawv zoo Topshelf, uas tso cai rau koj los khiav daim ntawv thov ob qho tib si raws li kev pabcuam thiab ua lub console. Qhov no yog qhov yooj yim rau kev debugging vim tsis muaj cov haujlwm ntxiv uas yuav tsum tau ua hauv kev daws teeb meem.

Cov kev pabcuam tau txuas nrog raws li kev lag luam logic, txij li lawv tau siv cov rooj sibtham thiab ua haujlwm nrog cov ntaub ntawv sib txawv. Lawv tsis tuaj yeem hu ua microservices hauv lawv daim ntawv ntshiab. Txawm li cas los xij, peb tuaj yeem muab cov kev pabcuam no cais, hauv cov txheej txheem sib txawv. Qhov no ib leeg ua rau nws tuaj yeem txo lawv txoj kev cuam tshuam rau ib leeg, txo qhov teeb meem nrog kev txhim kho kev sib txuas thiab ib qho kev ua tsis tiav.

Kev sib sau ua ke nrog tus tswv tsev tsuas yog ib kab ntawm cov cai hauv chav kawm Program. Peb tau zais ua haujlwm nrog Topshelf hauv chav pabcuam pabcuam.

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

       }
    }
}

Qhov thib ob txoj kev los faib microservices yog: tsim kom lawv daws teeb meem tshiab. Yog hais tias nyob rau tib lub sij hawm lub monolith tsis loj hlob, qhov no twb zoo heev, uas txhais tau hais tias peb tab tom tsiv mus rau txoj kev yog. Txhawm rau daws cov teeb meem tshiab, peb sim tsim cov kev pabcuam cais. Yog tias muaj lub sijhawm zoo li no, peb tau tsim ntau "canonical" cov kev pabcuam uas tswj hwm lawv tus kheej cov ntaub ntawv qauv, cais cov ntaub ntawv.

Peb, zoo li ntau tus, pib nrog kev pabcuam kev lees paub thiab kev tso cai. Lawv zoo tag nrho rau qhov no. Lawv muaj kev ywj pheej, raws li txoj cai, lawv muaj cov ntaub ntawv sib cais. Lawv lawv tus kheej tsis cuam tshuam nrog monolith, tsuas yog nws tig rau lawv los daws qee qhov teeb meem. Siv cov kev pabcuam no, koj tuaj yeem pib hloov mus rau qhov tshiab architecture, debug cov txheej txheem ntawm lawv, sim qee qhov kev cuam tshuam nrog cov tsev qiv ntawv network, thiab lwm yam. Peb tsis muaj ib pab pawg hauv peb lub koom haum uas tsis tuaj yeem tsim kev pabcuam kev lees paub.

Qhov thib peb txoj hauv kev faib microservicesQhov peb siv yog me ntsis tshwj xeeb rau peb. Qhov no yog kev tshem tawm kev lag luam logic los ntawm txheej UI. Peb lub ntsiab UI daim ntawv thov yog desktop; nws, zoo li lub backend, yog sau nyob rau hauv C #. Cov neeg tsim tawm ib ntus ua yuam kev thiab hloov qhov chaw ntawm cov logic mus rau UI uas yuav tsum muaj nyob rau hauv lub backend thiab tau rov qab siv dua.

Yog tias koj saib qhov piv txwv tiag tiag los ntawm cov cai ntawm UI ntu, koj tuaj yeem pom tias feem ntau ntawm cov kev daws teeb meem no muaj cov laj thawj ntawm kev lag luam tiag uas muaj txiaj ntsig zoo hauv lwm cov txheej txheem, tsis yog rau kev tsim daim ntawv UI xwb.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Qhov tiag tiag UI logic tsuas yog muaj nyob rau hauv ob peb kab kawg. Peb xa nws mus rau tus neeg rau zaub mov kom nws tuaj yeem rov qab siv tau, yog li txo qhov UI thiab ua tiav cov qauv tsim nyog.

Qhov thib plaub thiab tseem ceeb tshaj plaws txoj kev cais microservices, uas ua rau nws muaj peev xwm txo tau cov monolith, yog kev tshem tawm cov kev pabcuam uas twb muaj lawm nrog kev ua haujlwm. Thaum peb tshem tawm cov modules uas twb muaj lawm, qhov tshwm sim tsis yog ib txwm rau cov neeg tsim khoom nyiam, thiab cov txheej txheem kev lag luam yuav dhau los ua dhau los txij li kev ua haujlwm tau tsim. Nrog refactoring, peb tuaj yeem txhawb txoj kev lag luam tshiab vim tias kev lag luam yuav tsum tau hloov tas li. Peb tuaj yeem txhim kho qhov chaws, tshem tawm qhov tsis xws luag, thiab tsim cov qauv ntaub ntawv zoo dua. Muaj ntau cov txiaj ntsig tau txais.

Kev sib cais cov kev pabcuam los ntawm kev ua haujlwm yog inextricably txuas rau lub tswvyim ntawm cov ntsiab lus bounded. Nov yog lub tswvyim los ntawm Domain Driven Design. Nws txhais tau hais tias ib ntu ntawm tus qauv sau npe nyob rau hauv uas tag nrho cov ntsiab lus ntawm ib hom lus tau txhais tshwj xeeb. Cia peb saib cov ntsiab lus ntawm kev tuav pov hwm thiab cov nqi them ua piv txwv. Peb muaj daim ntawv thov monolithic, thiab peb yuav tsum tau ua haujlwm nrog tus account hauv kev pov hwm. Peb cia siab tias tus tsim tawm yuav nrhiav tau ib chav Account uas twb muaj lawm nyob rau hauv lwm lub rooj sib txoos, siv nws los ntawm Insurance chav kawm, thiab peb yuav muaj cov cai ua haujlwm. Txoj cai DRY yuav raug hwm, txoj haujlwm yuav ua tiav sai dua los ntawm kev siv cov cai uas twb muaj lawm.

Yog li ntawd, nws hloov tawm tias cov ntsiab lus ntawm cov nyiaj thiab kev tuav pov hwm txuas nrog. Raws li cov kev xav tau tshiab tshwm sim, qhov kev sib txuas no yuav cuam tshuam nrog kev txhim kho, ua rau muaj kev nyuaj ntawm kev lag luam uas twb muaj lawm. Txhawm rau daws qhov teeb meem no, koj yuav tsum nrhiav cov ciam teb ntawm cov ntsiab lus hauv cov cai thiab tshem tawm lawv cov kev ua txhaum cai. Piv txwv li, nyob rau hauv cov ntsiab lus ntawm kev tuav pov hwm, nws muaj peev xwm heev uas 20-tus lej Central Bank tus lej account thiab hnub qhib tus account yuav txaus.

Txhawm rau cais cov ntsiab lus uas cuam tshuam los ntawm ib leeg thiab pib txheej txheem ntawm kev sib cais microservices los ntawm kev daws teeb meem monolithic, peb siv txoj hauv kev xws li tsim cov APIs sab nraud hauv daim ntawv thov. Yog tias peb paub tias qee qhov module yuav tsum dhau los ua microservice, qee qhov hloov pauv hauv cov txheej txheem, tom qab ntawd peb tam sim hu xov tooj mus rau lub logic uas yog rau lwm cov ntsiab lus txwv los ntawm kev hu sab nraud. Piv txwv li, ntawm REST lossis WCF.

Peb tau txiav txim siab ruaj khov tias peb yuav tsis zam cov lej uas yuav xav tau kev faib khoom lag luam. Hauv peb qhov xwm txheej, nws tau dhau los ua qhov yooj yim ua raws li txoj cai no. Peb tseem tsis tau ntsib cov xwm txheej uas yuav tsum tau muaj kev faib tawm nruj heev - qhov kawg sib xws ntawm cov modules txaus txaus.

Cia peb saib ib qho piv txwv. Peb muaj lub tswv yim ntawm ib tug orchestrator - lub raj xa dej uas ua cov haujlwm ntawm "daim ntawv thov". Nws tsim ib tus neeg siv khoom, tus account thiab daim npav rho nyiaj hauv lem. Yog tias tus neeg siv khoom thiab tus lej tsim tau tiav, tab sis daim npav tsim tsis tau, daim ntawv thov tsis txav mus rau qhov "ua tiav" thiab tseem nyob hauv "daim npav tsis tsim" xwm txheej. Nyob rau hauv lub neej yav tom ntej, kev ua haujlwm tom qab yuav khaws nws thiab ua kom tiav. Lub kaw lus tau nyob hauv lub xeev tsis sib xws rau qee lub sijhawm, tab sis peb feem ntau txaus siab rau qhov no.

Yog tias qhov xwm txheej tshwm sim thaum nws tsim nyog los khaws ib feem ntawm cov ntaub ntawv, peb feem ntau yuav mus rau kev sib koom ua ke ntawm cov kev pabcuam txhawm rau ua haujlwm hauv ib txheej txheem.

Cia peb saib ib qho piv txwv ntawm kev faib cov microservice. Koj tuaj yeem coj nws mus rau kev tsim khoom zoo li cas? Hauv qhov piv txwv no, peb muaj ib feem ntawm qhov system - ib qho kev pabcuam them nyiaj, ib qho ntawm cov tshooj cai uas peb xav ua microservice.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Ua ntej tshaj plaws, peb tsim microservice los ntawm kev rov sau cov lej. Peb tab tom txhim kho qee yam uas peb tsis txaus siab rau. Peb ua raws li kev ua lag luam tshiab los ntawm cov neeg siv khoom. Peb ntxiv API Gateway rau kev sib txuas ntawm UI thiab lub backend, uas yuav muab kev hu xov tooj xa mus.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Tom ntej no, peb tso qhov kev teeb tsa no rau hauv kev ua haujlwm, tab sis nyob rau hauv lub xeev tsav. Feem ntau ntawm peb cov neeg siv tseem ua haujlwm nrog cov txheej txheem kev lag luam qub. Rau cov neeg siv tshiab, peb tab tom tsim ib qho tshiab ntawm daim ntawv thov monolithic uas tsis muaj cov txheej txheem no lawm. Qhov tseem ceeb, peb muaj kev sib xyaw ua ke ntawm monolith thiab microservice ua haujlwm ua tus tsav.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Nrog rau kev ua tiav kev tsav tsheb, peb nkag siab tias qhov kev teeb tsa tshiab tuaj yeem ua haujlwm tau tiag tiag, peb tuaj yeem tshem tawm cov qub monolith ntawm qhov sib npaug thiab tawm hauv qhov kev teeb tsa tshiab los ntawm kev daws qhov qub.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Nyob rau hauv tag nrho, peb siv yuav luag tag nrho cov uas twb muaj lawm txoj kev rau splitting lub hauv paus code ntawm ib tug monolith. Tag nrho cov no tso cai rau peb txo qhov luaj li cas ntawm qhov chaw ntawm daim ntawv thov thiab txhais rau cov tsev qiv ntawv tshiab, ua kom zoo dua qhov chaws.

Ua haujlwm nrog database


Cov ntaub ntawv tuaj yeem muab faib ua qhov phem tshaj qhov chaws, vim nws tsis tsuas yog cov schema tam sim no, tab sis kuj suav nrog cov ntaub ntawv keeb kwm.

Peb cov ntaub ntawv, zoo li ntau lwm tus, muaj lwm qhov teeb meem tseem ceeb - nws loj loj. Cov ntaub ntawv no tau tsim los raws li kev lag luam sib txawv ntawm kev lag luam ntawm monolith, thiab kev sib raug zoo sib xyaw ntawm cov ntxhuav ntawm ntau cov ntsiab lus bounded.

Nyob rau hauv peb cov ntaub ntawv, mus rau sab saum toj tag nrho cov teeb meem (loj database, ntau kev sib txuas, tej zaum tsis meej ciam teb ntawm cov ntxhuav), ib tug teeb meem tshwm sim uas tshwm sim nyob rau hauv ntau yam loj tej yaam num: kev siv ntawm cov sib koom database template. Cov ntaub ntawv tau muab los ntawm cov ntxhuav los ntawm kev saib, los ntawm kev rov ua dua, thiab xa mus rau lwm lub tshuab uas xav tau kev rov ua dua tshiab. Raws li qhov tshwm sim, peb tsis tuaj yeem txav cov ntxhuav mus rau hauv ib qho kev sib cais vim lawv tau siv zog.

Tib qhov kev faib rau hauv cov ntsiab lus txwv hauv cov cai pab peb sib cais. Nws feem ntau muab peb lub tswv yim zoo nkauj ntawm yuav ua li cas peb rhuav tshem cov ntaub ntawv ntawm qib database. Peb nkag siab tias lub rooj twg yog nyob rau hauv ib lub ntsiab lus bounded thiab qhov twg rau lwm tus.

Peb siv ob txoj hauv kev thoob ntiaj teb ntawm kev faib cov ntaub ntawv: muab faib cov rooj uas twb muaj lawm thiab muab faib nrog kev ua haujlwm.

Kev faib tawm cov rooj uas twb muaj lawm yog ib txoj hauv kev zoo siv yog tias cov ntaub ntawv qauv zoo, ua tau raws li kev lag luam, thiab txhua tus zoo siab nrog nws. Hauv qhov no, peb tuaj yeem cais cov rooj uas twb muaj lawm rau hauv ib qho kev sib cais.

Ib chav haujlwm nrog kev ua haujlwm yog xav tau thaum tus qauv kev lag luam tau hloov pauv ntau, thiab cov ntxhuav tsis txaus siab rau peb txhua.

Splitting cov ntxhuav uas twb muaj lawm. Peb yuav tsum txiav txim siab seb peb yuav cais dab tsi. Yog tsis muaj qhov kev paub no, tsis muaj dab tsi yuav ua haujlwm, thiab ntawm no kev sib cais ntawm cov ntsiab lus uas muaj nyob rau hauv txoj cai yuav pab tau peb. Raws li txoj cai, yog tias koj tuaj yeem nkag siab txog cov ciam teb ntawm cov ntsiab lus hauv qhov chaws, nws paub meej tias cov ntxhuav twg yuav tsum suav nrog hauv cov npe rau lub tuam tsev.

Cia peb xav txog tias peb muaj cov kev daws teeb meem uas ob lub monolith modules cuam tshuam nrog ib qho database. Peb yuav tsum xyuas kom meej tias tsuas yog ib qho module cuam tshuam nrog ntu ntawm cov rooj sib cais, thiab lwm qhov pib cuam tshuam nrog nws ntawm API. Yuav pib nrog, nws yog qhov txaus uas tsuas yog kaw tau los ntawm API. Qhov no yog qhov tsim nyog rau peb los tham txog kev ywj pheej ntawm microservices. Kev sib txuas nyeem ntawv tuaj yeem nyob twj ywm yog tias tsis muaj teeb meem loj.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Cov kauj ruam tom ntej yog peb tuaj yeem cais ntu ntawm cov cai uas ua haujlwm nrog cov rooj sib cais, nrog lossis tsis muaj kev ua haujlwm, mus rau hauv ib qho kev pabcuam microservice thiab khiav nws hauv cov txheej txheem cais, ib lub thawv. Qhov no yuav yog ib qho kev pabcuam cais nrog kev sib txuas rau cov ntaub ntawv monolith thiab cov ntxhuav uas tsis cuam tshuam ncaj qha rau nws. Lub monolith tseem cuam tshuam rau kev nyeem ntawv nrog rau qhov detachable.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Tom qab ntawd peb yuav tshem tawm qhov kev sib txuas no, uas yog, nyeem cov ntaub ntawv los ntawm daim ntawv thov monolithic los ntawm cov rooj sib cais kuj yuav raug xa mus rau API.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Tom ntej no, peb yuav xaiv los ntawm cov ntaub ntawv dav dav cov ntxhuav uas tsuas yog cov microservice tshiab ua haujlwm. Peb tuaj yeem txav cov ntxhuav mus rau ib qho schema cais lossis txawm tias mus rau ib qho chaw sib cais ntawm lub cev. Tseem muaj kev sib txuas ntawm kev nyeem ntawv ntawm microservice thiab monolith database, tab sis tsis muaj dab tsi txhawj txog, hauv qhov kev teeb tsa no nws tuaj yeem nyob ntev heev.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Cov kauj ruam kawg yog kom tshem tawm tag nrho cov kev sib txuas. Nyob rau hauv cov ntaub ntawv no, peb yuav tsum tau migrate cov ntaub ntawv los ntawm lub ntsiab database. Qee lub sij hawm peb xav rov siv qee cov ntaub ntawv lossis cov ntawv qhia rov qab los ntawm cov kab ke sab nraud hauv ntau lub databases. Qhov no tshwm sim rau peb ib ntus.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Kev ua haujlwm department. Txoj kev no zoo ib yam li thawj zaug, tsuas yog rov qab txiav txim. Peb tam sim ntawd faib cov ntaub ntawv tshiab thiab microservice tshiab uas cuam tshuam nrog monolith ntawm API. Tab sis nyob rau tib lub sijhawm, tseem muaj cov txheej txheem database uas peb xav rho tawm yav tom ntej. Peb tsis xav tau nws lawm; peb hloov nws hauv tus qauv tshiab.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Rau qhov txheej txheem no ua haujlwm, peb yuav xav tau lub sijhawm hloov pauv.

Tom qab ntawd muaj ob txoj hauv kev ua tau.

Thawj: peb duplicate tag nrho cov ntaub ntawv nyob rau hauv cov tshiab thiab qub databases. Hauv qhov no, peb muaj cov ntaub ntawv redundancy thiab synchronization teeb meem yuav tshwm sim. Tab sis peb tuaj yeem nqa ob tus neeg siv khoom sib txawv. Ib tug yuav ua hauj lwm nrog tus tshiab version, lwm tus nrog tus qub.

Qhov thib ob: peb faib cov ntaub ntawv raws li qee yam kev lag luam. Piv txwv li, peb muaj 5 yam khoom hauv qhov system uas tau muab khaws cia rau hauv cov ntaub ntawv qub. Peb muab qhov thib rau hauv kev ua lag luam tshiab hauv cov ntaub ntawv tshiab. Tab sis peb yuav xav tau API Gateway uas yuav synchronize cov ntaub ntawv no thiab qhia tus neeg siv khoom qhov twg thiab yuav tau txais dab tsi los ntawm.

Ob txoj kev ua haujlwm, xaiv nyob ntawm qhov xwm txheej.

Tom qab peb paub tseeb tias txhua yam ua haujlwm, ib feem ntawm monolith uas ua haujlwm nrog cov txheej txheem qub database tuaj yeem raug kaw.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Cov kauj ruam kawg yog tshem tawm cov ntaub ntawv qub.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Txhawm rau kom ua tiav, peb tuaj yeem hais tias peb muaj teeb meem nrog cov ntaub ntawv: nws nyuaj rau kev ua haujlwm nrog nws piv rau qhov chaws, nws nyuaj dua rau kev qhia, tab sis nws tuaj yeem ua tau thiab yuav tsum tau ua. Peb tau pom qee txoj hauv kev uas tso cai rau peb ua qhov no kom nyab xeeb, tab sis nws tseem yooj yim dua los ua yuam kev nrog cov ntaub ntawv dua li nrog cov cai.

Ua haujlwm nrog qhov chaws


Qhov no yog qhov kos duab kos duab zoo li thaum peb pib txheeb xyuas qhov project monolithic.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Nws tuaj yeem muab faib ua peb txheej. Qhov no yog ib txheej ntawm launched modules, plugins, kev pab cuam thiab ib tug neeg ua si. Qhov tseeb, cov no yog cov ntsiab lus nkag hauv kev daws teeb meem monolithic. Tag nrho cov ntawm lawv tau nruj nreem kaw nrog ib tug Common txheej. Nws muaj kev lag luam logic uas cov kev pabcuam sib koom thiab ntau qhov kev sib txuas. Txhua qhov kev pabcuam thiab plugin siv txog li 10 lossis ntau lub rooj sib tham, nyob ntawm lawv qhov loj thiab lub siab ntawm cov neeg tsim khoom.

Peb muaj hmoo kom muaj cov tsev qiv ntawv hauv tsev uas tuaj yeem siv sib cais.

Qee lub sij hawm muaj qhov xwm txheej tshwm sim thaum qee yam khoom siv tsis tau koom nrog cov txheej txheem no, tab sis yog cov tsev qiv ntawv hauv tsev. Qhov no tau daws los ntawm kev hloov npe.

Qhov kev txhawj xeeb loj tshaj plaws yog bounded contexts. Nws tshwm sim tias 3-4 cov ntsiab lus tau muab sib xyaw rau hauv ib qho kev sib dhos thiab siv ib leeg hauv tib txoj haujlwm ua lag luam. Nws yog ib qho tsim nyog yuav tsum nkag siab qhov twg qhov no tuaj yeem muab faib thiab raws li thaj tsam li cas, thiab yuav ua li cas ntxiv nrog rau daim ntawv qhia kev faib tawm no rau hauv cov cai sib dhos.

Peb tau tsim ntau txoj cai rau cov txheej txheem sib cais.

Thawj: Peb tsis xav qhia kev lag luam logic ntawm cov kev pabcuam, kev ua ub no thiab plugins. Peb xav ua lag luam logic ywj siab nyob rau hauv microservices. Microservices, ntawm qhov tod tes, yog qhov zoo xav tias yog cov kev pabcuam uas muaj nyob ntawm nws tus kheej. Kuv ntseeg tias txoj hauv kev no yog qhov khib nyiab me ntsis, thiab nws nyuaj rau ua tiav, vim hais tias, piv txwv li, cov kev pabcuam hauv C # yuav nyob rau hauv txhua rooj plaub txuas nrog lub tsev qiv ntawv txheem. Peb qhov system tau sau hauv C#; peb tseem tsis tau siv lwm yam thev naus laus zis. Yog li ntawd, peb txiav txim siab tias peb tuaj yeem them taus siv cov kev sib koom ua ke. Qhov tseem ceeb tshaj plaws yog tias lawv tsis muaj ib feem ntawm kev lag luam logic. Yog tias koj muaj qhov yooj yim wrapper hla ORM koj siv, ces luam tawm ntawm kev pabcuam mus rau kev pabcuam yog kim heev.

Peb pab neeg no yog ib tug kiv cua ntawm sau-driven tsim, yog li dos architecture yog ib tug zoo haum rau peb. Lub hauv paus ntawm peb cov kev pabcuam tsis yog cov ntaub ntawv nkag mus rau txheej, tab sis kev sib dhos nrog cov logic sau, uas tsuas muaj kev lag luam logic thiab tsis muaj kev sib txuas nrog cov txheej txheem. Nyob rau tib lub sijhawm, peb tuaj yeem hloov kho tus kheej ntawm lub rooj sib txoos los daws cov teeb meem ntsig txog lub moj khaum.

Nyob rau theem no peb ntsib peb thawj qhov teeb meem loj. Cov kev pabcuam yuav tsum tau xa mus rau ib lub rooj sibtham, peb xav ua kom lub logic ywj pheej, thiab DRY lub hauv paus ntsiab lus cuam tshuam rau peb ntawm no. Cov neeg tsim khoom xav rov siv cov chav kawm los ntawm cov neeg nyob sib ze kom tsis txhob muaj kev sib tw, thiab vim li ntawd, cov thawj coj tau pib txuas ua ke dua. Peb tau txheeb xyuas cov txiaj ntsig thiab txiav txim siab tias tej zaum qhov teeb meem kuj yog nyob rau hauv thaj chaw ntawm qhov chaw code cia khoom. Peb muaj ib tug loj repository uas muaj tag nrho cov qhov chaws code. Kev daws rau tag nrho qhov project yog qhov nyuaj heev los sib sau ua ke ntawm lub tshuab hauv zos. Yog li ntawd, cais cov kev daws teeb meem me me tau tsim rau qee qhov ntawm qhov project, thiab tsis muaj leej twg txwv tsis pub ntxiv qee qhov kev sib sau ua ke rau lawv thiab rov siv dua. Tib lub cuab yeej uas tsis pub peb ua qhov no yog kev tshuaj xyuas cov cai. Tab sis qee zaus kuj ua tsis tau.

Tom qab ntawd peb pib tsiv mus rau ib qho qauv nrog cais cov chaw khaws cia. Kev lag luam logic tsis ntws los ntawm kev pabcuam rau kev pabcuam, cov thawj coj tau ua ywj pheej tiag tiag. Cov ntsiab lus uas muaj nyob nrog tau txhawb kom meej meej. Peb yuav siv cov tsev qiv ntawv hauv tsev li cas? Peb cais lawv mus rau hauv ib lub repository cais, ces muab tso rau hauv Nuget tej pob khoom, uas peb muab tso rau hauv Artifactory. Nrog txhua qhov kev hloov pauv, kev sib dhos thiab kev tshaj tawm tshwm sim tau.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Peb cov kev pabcuam tau pib siv cov pob khoom siv hauv vaj hauv tsev tib yam li cov khoom siv sab nraud. Peb rub tawm cov tsev qiv ntawv sab nraud los ntawm Nuget. Txhawm rau ua haujlwm nrog Artifactory, qhov twg peb tso cov pob no, peb siv ob tus thawj tswj pob. Hauv cov chaw cia me me peb kuj siv Nuget. Hauv repositories nrog ntau cov kev pabcuam, peb siv Paket, uas muab ntau qhov sib xws ntawm cov qauv.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Yog li, los ntawm kev ua haujlwm ntawm lub hauv paus code, me ntsis hloov lub architecture thiab cais cov repositories, peb ua rau peb cov kev pab cuam ntau ywj siab.

Cov teeb meem hauv vaj tse


Feem ntau ntawm cov downsides mus rau microservices yog cov infrastructure ntsig txog. Koj yuav xav tau automated xa mus, koj yuav xav tau cov tsev qiv ntawv tshiab los khiav cov txheej txheem.

Manual installation nyob rau hauv ib puag ncig

Thaum pib, peb tau nruab qhov kev daws teeb meem rau ib puag ncig manually. Txhawm rau kom ua tiav cov txheej txheem no, peb tsim CI / CD pipeline. Peb tau xaiv cov txheej txheem xa khoom tas mus li vim tias kev xa mus tas li tseem tsis tau txais rau peb los ntawm qhov pom ntawm cov txheej txheem kev lag luam. Yog li ntawd, xa mus rau kev ua haujlwm yog nqa tawm siv lub pob, thiab rau kev sim - txiav.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Peb siv Atlassian, Bitbucket rau qhov chaws cia thiab Xyoob rau lub tsev. Peb nyiam sau cov ntawv tsim hauv ncuav mog qab zib vim nws zoo ib yam li C#. Cov pob khoom npaj tau tuaj rau Artifactory, thiab Ansible tau txais mus rau cov servers xeem, tom qab ntawd lawv tuaj yeem sim tam sim ntawd.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Cais cais


Nyob rau hauv ib lub sij hawm, ib qho ntawm cov tswv yim ntawm lub monolith yog los muab kev sib koom txiav. Peb kuj yuav tsum nkag siab tias yuav ua li cas nrog tus kheej cov cav uas nyob hauv cov disks. Peb cov ntaub ntawv sau rau hauv cov ntawv nyeem. Peb txiav txim siab siv tus qauv ELK pawg. Peb tsis tau sau rau ELK ncaj qha los ntawm cov chaw muab kev pabcuam, tab sis txiav txim siab tias peb yuav ua tiav cov ntawv teev lus thiab sau tus lej ID hauv lawv ua tus cim, ntxiv cov npe kev pabcuam, kom cov cav no tuaj yeem txheeb xyuas tom qab.

Kev hloov ntawm monolith mus rau microservices: keeb kwm thiab kev coj ua

Siv Filebeat, peb tau txais lub sijhawm los sau peb cov cav los ntawm cov servers, tom qab ntawd hloov lawv, siv Kibana los tsim cov lus nug hauv UI thiab saib seb qhov kev hu mus li cas ntawm cov kev pabcuam. Trace ID pab ntau nrog qhov no.

Kev sim thiab debugging txog kev pabcuam


Thaum pib, peb tsis nkag siab tag nrho yuav ua li cas debug cov kev pabcuam raug tsim. Txhua yam yooj yim nrog lub monolith; peb khiav nws ntawm lub tshuab hauv zos. Thaum xub thawj lawv sim ua tib yam nrog microservices, tab sis qee zaum kom tag nrho tso ib qho microservice koj yuav tsum tau tso ob peb lwm tus, thiab qhov no tsis yooj yim. Peb pom tau hais tias peb yuav tsum tau txav mus rau tus qauv uas peb tawm ntawm lub tshuab hauv zos tsuas yog cov kev pabcuam lossis cov kev pabcuam uas peb xav tau debug. Cov kev pabcuam ntxiv yog siv los ntawm cov servers uas phim cov kev teeb tsa nrog prod. Tom qab kev debugging, thaum lub sij hawm sim, rau txhua txoj haujlwm, tsuas yog cov kev hloov pauv tau muab rau cov neeg rau zaub mov kuaj. Yog li, qhov kev daws teeb meem yog sim hauv daim ntawv uas nws yuav tshwm sim hauv kev tsim khoom yav tom ntej.

Muaj cov servers uas tsuas yog khiav cov kev pabcuam ntau lawm. Cov servers no yuav tsum muaj nyob rau hauv cov xwm txheej, txhawm rau txheeb xyuas kev xa khoom ua ntej xa mus thiab rau kev cob qhia sab hauv.

Peb tau ntxiv cov txheej txheem ntsuas kev siv tshuab siv lub tsev qiv ntawv nrov Specflow. Kev sim khiav tau siv NUnit tam sim ntawd tom qab xa tawm los ntawm Ansible. Yog hais tias qhov kev pab them nqi ua haujlwm yog tag nrho tsis siv neeg, ces tsis tas yuav tsum muaj kev xeem ntawv. Txawm hais tias qee zaum ntxiv kev ntsuas phau ntawv tseem xav tau. Peb siv cov cim npe hauv Jira los txiav txim seb qhov kev xeem twg los khiav rau ib qho teeb meem tshwj xeeb.

Tsis tas li ntawd, qhov kev xav tau rau kev kuaj load tau nce; yav tas los nws tau ua tsuas yog nyob rau hauv tsawg zaus. Peb siv JMeter los khiav cov kev xeem, InfluxDB los khaws lawv, thiab Grafana los tsim cov txheej txheem graphs.

Peb tau ua tiav dab tsi?


Ua ntej, peb tau tshem ntawm lub tswvyim ntawm "tso tawm". ploj mus yog ob lub hlis monstrous tso tawm thaum lub colossus no tau muab tso rau hauv ib puag ncig tsim khoom, cuam tshuam rau kev lag luam ib ntus. Tam sim no peb xa cov kev pab cuam nyob rau nruab nrab txhua txhua 1,5 hnub, pab pawg vim lawv mus ua haujlwm tom qab kev pom zoo.

Tsis muaj kev ua tsis tiav hauv peb lub cev. Yog tias peb tso microservice nrog cov kab laum, ces qhov kev ua haujlwm cuam tshuam nrog nws yuav tawg, thiab tag nrho lwm yam kev ua haujlwm yuav tsis cuam tshuam. Qhov no zoo heev txhim kho cov neeg siv kev paub.

Peb tuaj yeem tswj tus qauv xa tawm. Koj tuaj yeem xaiv cov pab pawg ntawm cov kev pabcuam cais los ntawm cov kev daws teeb meem, yog tias tsim nyog.

Tsis tas li ntawd, peb tau txo qhov teeb meem loj nrog cov kab loj ntawm kev txhim kho. Tam sim no peb muaj cov khoom sib cais uas ua haujlwm nrog qee qhov kev pabcuam ntawm nws tus kheej. Cov txheej txheem Scrum twb zoo haum ntawm no. Ib pab neeg tshwj xeeb tuaj yeem muaj tus tswv Cov Khoom Siv cais uas muab cov haujlwm rau nws.

Txoj kev xaus

  • Microservices yog zoo haum rau decomposing complex systems. Nyob rau hauv tus txheej txheem, peb pib to taub dab tsi nyob rau hauv peb lub cev, dab tsi txwv cov ntsiab lus muaj, nyob qhov twg lawv ciam teb. Qhov no tso cai rau koj kom raug faib cov kev txhim kho ntawm cov modules thiab tiv thaiv kev tsis sib haum xeeb.
  • Microservices muab cov txiaj ntsig ntawm lub koom haum. Lawv feem ntau tham txog tsuas yog architecture, tab sis ib qho kev tsim vaj tsev yog xav tau los daws cov kev xav tau ntawm kev lag luam, thiab tsis yog ntawm nws tus kheej. Yog li ntawd, peb tuaj yeem hais tias microservices yog qhov zoo rau kev daws teeb meem hauv pab pawg me, vim tias Scrum yog nrov heev tam sim no.
  • Kev sib cais yog ib qho txheej txheem rov ua dua. Koj tsis tuaj yeem siv daim ntawv thov thiab tsuas yog faib rau hauv microservices. Cov khoom tshwm sim tsis zoo li yuav ua haujlwm. Thaum dedicating microservices, nws yog qhov zoo rau rov sau cov keeb kwm uas twb muaj lawm, uas yog, tig nws mus rau hauv cov cai uas peb nyiam thiab zoo dua ua tau raws li kev lag luam xav tau ntawm kev ua haujlwm thiab ceev.

    Ib qho me me caveat: Tus nqi ntawm kev tsiv mus rau microservices yog qhov tseem ceeb heev. Nws siv sijhawm ntev los daws cov teeb meem hauv vaj tse ib leeg. Yog li yog tias koj muaj ib daim ntawv thov me me uas tsis tas yuav muaj kev ntsuas tshwj xeeb, tshwj tsis yog tias koj muaj coob tus neeg siv khoom sib tw rau koj pab neeg cov kev xav thiab sijhawm, ces microservices yuav tsis yog qhov koj xav tau hnub no. Nws kim heev. Yog tias koj pib cov txheej txheem nrog microservices, ces cov nqi pib yuav siab dua yog tias koj pib ua tib txoj haujlwm nrog kev txhim kho ntawm monolith.

    PS Ib zaj dab neeg xav ntau (thiab zoo li yog rau koj tus kheej) - raws li txuas.
    Nov yog daim ntawv qhia tag nrho.

Tau qhov twg los: www.hab.com

Ntxiv ib saib