Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Niini nga artikulo, hisgutan nako kung giunsa ang proyekto nga akong gitrabaho nabag-o gikan sa usa ka dako nga monolith ngadto sa usa ka set sa mga microservice.

Ang proyekto nagsugod sa kasaysayan niini sa dugay na nga panahon, sa sinugdanan sa 2000. Ang unang mga bersyon gisulat sa Visual Basic 6. Sa paglabay sa panahon, nahimong tin-aw nga ang pagpalambo niini nga pinulongan mahimong lisud nga suportahan sa umaabot, tungod kay ang IDE ug ang pinulongan mismo dili maayo nga naugmad. Sa katapusan sa 2000s, kini nakahukom sa pagbalhin ngadto sa mas promising C#. Ang bag-ong bersiyon gisulat dungan sa rebisyon sa daan, anam-anam nga nagkadaghang code ang gisulat sa .NET. Ang backend sa C# sa sinugdan naka-focus sa usa ka arkitektura sa serbisyo, apan sa panahon sa pag-uswag, ang kasagarang mga librarya nga adunay lohika gigamit, ug ang mga serbisyo gilunsad sa usa ka proseso. Ang resulta usa ka aplikasyon nga gitawag namon nga "monolith sa serbisyo."

Usa sa pipila ka mga bentaha niini nga kombinasyon mao ang abilidad sa mga serbisyo sa pagtawag sa usag usa pinaagi sa usa ka eksternal nga API. Adunay tin-aw nga mga kinahanglanon alang sa pagbalhin sa usa ka labi ka tama nga serbisyo, ug sa umaabot, arkitektura sa microservice.

Nagsugod kami sa among trabaho sa pagkadunot mga 2015. Wala pa kami makaabot sa usa ka sulundon nga kahimtang - adunay mga bahin sa usa ka dako nga proyekto nga halos dili matawag nga mga monolith, apan dili usab kini sama sa mga microservice. Bisan pa, hinungdanon ang pag-uswag.
Hisgotan ko kini sa artikulo.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Mga sulod

Arkitektura ug mga problema sa kasamtangan nga solusyon


Sa sinugdan, ang arkitektura ingon niini: ang UI usa ka bulag nga aplikasyon, ang monolithic nga bahin gisulat sa Visual Basic 6, ang .NET nga aplikasyon usa ka hugpong sa mga may kalabutan nga serbisyo nga nagtrabaho sa usa ka medyo dako nga database.

Mga disbentaha sa miaging solusyon

Usa ka punto sa kapakyasan
Kami adunay usa ka punto sa kapakyasan: ang .NET nga aplikasyon midagan sa usa ka proseso. Kung adunay bisan unsang module nga napakyas, ang tibuuk nga aplikasyon napakyas ug kinahanglan nga i-restart. Tungod kay gi-automate namon ang daghang mga proseso alang sa lainlaing mga tiggamit, tungod sa kapakyasan sa usa niini, ang tanan dili makatrabaho sa pipila ka panahon. Ug kung adunay sayup sa software, bisan ang pag-backup wala makatabang.

Pila sa mga kalamboan
Kini nga disbentaha kay organisasyonal. Ang among aplikasyon adunay daghang mga kustomer, ug silang tanan gusto nga pauswagon kini sa labing madali. Kaniadto, imposible nga buhaton kini nga managsama, ug ang tanan nga mga kustomer nagbarug sa linya. Negatibo kini nga proseso alang sa mga negosyo tungod kay kinahanglan nilang pamatud-an nga bililhon ang ilang buluhaton. Ug ang development team migahin ug panahon sa pag-organisar niini nga pila. Nagkinahanglan kini og daghang oras ug paningkamot, ug ang produkto sa katapusan dili mausab sa labing madali nga gusto nila.

Suboptimal nga paggamit sa mga kahinguhaan
Kung nag-host sa mga serbisyo sa usa ka proseso, kanunay namong gikopya ang configuration gikan sa server ngadto sa server. Gusto namon nga ibutang ang mga serbisyo nga labi ka bug-at nga gikarga nga gilain aron dili mausik ang mga kahinguhaan ug makakuha labi ka dali nga pagkontrol sa among laraw sa pag-deploy.

Lisod ipatuman ang mga modernong teknolohiya
Usa ka problema nga pamilyar sa tanan nga mga developer: adunay tinguha sa pagpaila sa modernong mga teknolohiya ngadto sa proyekto, apan walay oportunidad. Uban sa usa ka dako nga monolithic nga solusyon, ang bisan unsang pag-update sa kasamtangan nga librarya, wala pay labot ang pagbalhin ngadto sa usa ka bag-o, nahimong usa ka dili importante nga buluhaton. Nagkinahanglan kini og taas nga panahon aron mapamatud-an sa lider sa grupo nga magdala kini og daghang mga bonus kaysa nausik nga mga nerbiyos.

Kalisud sa pag-isyu sa mga pagbag-o
Kini ang labing grabe nga problema - nagpagawas kami mga pagpagawas matag duha ka bulan.
Ang matag pagpagawas nahimong usa ka tinuod nga katalagman alang sa bangko, bisan pa sa pagsulay ug paningkamot sa mga developers. Ang negosyo nakasabut nga sa sinugdanan sa semana ang pipila sa mga gamit niini dili molihok. Ug nasabtan sa mga developer nga usa ka semana nga seryoso nga mga insidente ang naghulat kanila.
Ang tanan adunay tinguha sa pag-usab sa sitwasyon.

Mga gilauman gikan sa microservices


Isyu sa mga sangkap kung andam na. Paghatud sa mga sangkap kung andam na pinaagi sa pagkadunot sa solusyon ug pagbulag sa lainlaing mga proseso.

Gagmay nga mga grupo sa produkto. Importante kini tungod kay ang usa ka dako nga team nga nagtrabaho sa daan nga monolith lisud nga pagdumala. Ang ingon nga grupo napugos sa pagtrabaho sumala sa usa ka estrikto nga proseso, apan gusto nila ang dugang nga pagkamamugnaon ug kagawasan. Gamay ra nga mga team ang maka-afford niini.

Pag-inusara sa mga serbisyo sa lahi nga proseso. Sa sulundon nga paagi, gusto nako nga i-isolate kini sa mga container, apan daghang mga serbisyo nga gisulat sa .NET Framework ang modagan lamang ubos sa WindowsAng mga serbisyo nga gibase sa .NET Core nagpakita na karon, apan pipila ra gihapon niini.

Pagka-flexible sa pag-deploy. Gusto namon nga isagol ang mga serbisyo sa paagi nga kinahanglan namon kini, ug dili sa paagi nga gipugos kini sa code.

Paggamit sa bag-ong mga teknolohiya. Kini mao ang makapaikag sa bisan unsa nga programmer.

Mga problema sa transisyon


Siyempre, kung sayon ​​​​ang pagbungkag sa usa ka monolith ngadto sa mga microservice, dili na kinahanglan nga hisgutan kini sa mga komperensya ug pagsulat og mga artikulo. Adunay daghang mga lit-ag sa kini nga proseso; Akong ihulagway ang mga nag-una nga nakababag kanamo.

Ang una nga problema tipikal alang sa kadaghanan sa mga monolith: pagkahiusa sa lohika sa negosyo. Kung nagsulat kami usa ka monolith, gusto namon nga gamiton pag-usab ang among mga klase aron dili masulat ang wala kinahanglana nga code. Ug kung mobalhin sa mga microservice, kini mahimong problema: ang tanan nga code hugot nga gihiusa, ug lisud ang pagbulag sa mga serbisyo.

Sa panahon sa pagsugod sa trabaho, ang repository adunay labaw pa sa 500 nga mga proyekto ug labaw pa sa 700 ka libo nga linya sa code. Kini usa ka dako nga desisyon ug ikaduha nga problema. Dili mahimo nga kuhaon lang kini ug bahinon kini sa mga microservice.

Ikatulo nga problema - kakulang sa gikinahanglan nga imprastraktura. Sa tinuud, gikopya namon ang gigikanan nga code sa mga server.

Giunsa ang pagbalhin gikan sa monolith hangtod sa mga microservice


Pagtagana sa mga microservice

Una, nahibal-an dayon namon sa among kaugalingon nga ang pagbulag sa mga microservice usa ka proseso nga nagbalikbalik. Kanunay kaming gikinahanglan sa pag-ugmad sa mga problema sa negosyo nga managsama. Kung unsaon nato pag-implementar ning technically mao na ang atong problema. Busa, nag-andam kami alang sa usa ka proseso sa pag-uli. Dili kini molihok sa bisan unsang paagi kung ikaw adunay usa ka dako nga aplikasyon ug kini dili pa andam nga isulat pag-usab.

Unsa nga mga pamaagi ang among gigamit aron mahimulag ang mga microservice?

Ang una nga paagi - pagbalhin sa kasamtangan nga mga module ingon mga serbisyo. Niining bahina, swerte kami: naa nay mga narehistro nga serbisyo nga nagtrabaho gamit ang protocol sa WCF. Gibulag sila sa lainlaing mga asembliya. Gilain namon kini nga gilain, nagdugang usa ka gamay nga launcher sa matag pagtukod. Gisulat kini gamit ang talagsaon nga librarya sa Topshelf, nga nagtugot kanimo sa pagpadagan sa aplikasyon isip usa ka serbisyo ug isip usa ka console. Kini sayon ​​​​alang sa pag-debug tungod kay wala'y dugang nga mga proyekto nga gikinahanglan sa solusyon.

Ang mga serbisyo konektado sumala sa lohika sa negosyo, tungod kay gigamit nila ang mga sagad nga asembliya ug nagtrabaho sa usa ka sagad nga database. Halos dili sila matawag nga mga microservice sa ilang putli nga porma. Bisan pa, mahimo namon nga ihatag kini nga mga serbisyo nga gilain, sa lainlaing mga proseso. Kini lamang ang naghimo niini nga posible nga makunhuran ang ilang impluwensya sa usag usa, nga makunhuran ang problema sa parallel development ug usa ka punto sa kapakyasan.

Ang asembliya uban sa host usa lang ka linya sa code sa klase sa Programa. Among gitago ang trabaho uban sa Topshelf sa usa ka auxiliary nga klase.

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

       }
    }
}

Ang ikaduha nga paagi sa paggahin sa mga microservice mao ang: paghimo kanila aron masulbad ang mga bag-ong problema. Kung sa samang higayon ang monolith dili motubo, kini maayo na, nga nagpasabot nga kita nagalihok sa husto nga direksyon. Aron masulbad ang mga bag-ong problema, gisulayan namon ang paghimo og lahi nga mga serbisyo. Kung adunay ingon nga usa ka oportunidad, nan naghimo kami og daghang mga serbisyo nga "canonical" nga hingpit nga nagdumala sa ilang kaugalingon nga modelo sa datos, usa ka bulag nga database.

Kami, sama sa kadaghanan, nagsugod sa mga serbisyo sa pag-authenticate ug pagtugot. Sila hingpit alang niini. Sila independente, ingon nga usa ka lagda, sila adunay usa ka bulag nga modelo sa datos. Sila sa ilang kaugalingon wala makig-uban sa monolith, lamang kini mobalik ngadto kanila sa pagsulbad sa pipila ka mga problema. Gamit kini nga mga serbisyo, mahimo nimong sugdan ang pagbalhin sa usa ka bag-ong arkitektura, pag-debug sa imprastraktura sa kanila, pagsulay sa pipila nga mga pamaagi nga may kalabotan sa mga librarya sa network, ug uban pa. Wala kami mga team sa among organisasyon nga dili makahimo ug serbisyo sa pag-authenticate.

Ang ikatulo nga paagi sa paggahin microservicesAng usa nga atong gigamit mao ang usa ka gamay nga espesipiko alang kanato. Kini ang pagtangtang sa lohika sa negosyo gikan sa layer sa UI. Ang among nag-unang aplikasyon sa UI mao ang desktop, kini, sama sa backend, gisulat sa C #. Ang mga developer matag karon ug unya nakahimog mga kasaypanan ug gibalhin ang mga bahin sa lohika sa UI nga kinahanglan nga naglungtad sa backend ug gigamit pag-usab.

Kung imong tan-awon ang usa ka tinuod nga pananglitan gikan sa code sa bahin sa UI, imong makita nga kadaghanan niini nga solusyon naglangkob sa tinuod nga lohika sa negosyo nga mapuslanon sa ubang mga proseso, dili lamang sa pagtukod sa porma sa UI.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Ang tinuud nga lohika sa UI naa ra sa katapusan nga mga linya. Among gibalhin kini sa server aron kini magamit pag-usab, sa ingon makunhuran ang UI ug makab-ot ang husto nga arkitektura.

Ang ikaupat ug labing importante nga paagi sa paglain sa mga microservice, nga nagpaposible sa pagpakunhod sa monolith, mao ang pagtangtang sa kasamtangan nga mga serbisyo nga adunay pagproseso. Kung gikuha namon ang naglungtad nga mga module, ang resulta dili kanunay nga gusto sa mga nag-develop, ug ang proseso sa negosyo mahimo’g wala na sa panahon sukad nahimo ang pagpaandar. Uban sa refactoring, makasuporta kami sa usa ka bag-ong proseso sa negosyo tungod kay ang mga kinahanglanon sa negosyo kanunay nga nagbag-o. Mahimo natong pauswagon ang source code, tangtangon ang nahibal-an nga mga depekto, ug makahimo og mas maayong modelo sa datos. Adunay daghang mga benepisyo nga makuha.

Ang pagbulag sa mga serbisyo gikan sa pagproseso dili mabulag nga nalambigit sa konsepto sa limitado nga konteksto. Kini usa ka konsepto gikan sa Domain Driven Design. Kini nagpasabut nga usa ka seksyon sa modelo sa domain diin ang tanan nga mga termino sa usa ka sinultian talagsaon nga gihubit. Atong tan-awon ang konteksto sa insurance ug mga bayronon isip pananglitan. Adunay kami usa ka monolithic nga aplikasyon, ug kinahanglan namon nga magtrabaho kauban ang account sa seguro. Among gipaabot nga ang developer mangita ug kasamtangan nga klase sa Account sa laing asembliya, i-refer kini gikan sa klase sa Insurance, ug aduna kamiy working code. Ang DRY nga prinsipyo respetohon, ang buluhaton mas paspas nga buhaton pinaagi sa paggamit sa kasamtangan nga code.

Ingon usa ka sangputanan, kini nahimo nga ang mga konteksto sa mga account ug insurance konektado. Sa pagtungha sa bag-ong mga kinahanglanon, kini nga pagkadugtong makabalda sa pag-uswag, nga nagdugang sa pagkakomplikado sa komplikado na nga lohika sa negosyo. Aron masulbad kini nga problema, kinahanglan nimo pangitaon ang mga utlanan tali sa mga konteksto sa code ug tangtangon ang ilang mga paglapas. Pananglitan, sa konteksto sa seguro, posible nga ang usa ka 20-digit nga numero sa account sa Central Bank ug ang petsa nga giablihan ang account igo na.

Aron mabulag kini nga mga utlanan nga konteksto gikan sa usag usa ug magsugod sa proseso sa pagbulag sa mga microservice gikan sa usa ka monolithic nga solusyon, gigamit namon ang usa ka pamaagi sama sa paghimo sa mga eksternal nga API sa sulod sa aplikasyon. Kung nahibal-an namon nga ang pipila ka mga module kinahanglan nga mahimong usa ka microservice, sa usa ka paagi gibag-o sa sulod sa proseso, dayon mihimo dayon kami mga tawag sa lohika nga iya sa lain nga limitado nga konteksto pinaagi sa mga eksternal nga tawag. Pananglitan, pinaagi sa REST o WCF.

Kami hugot nga nakahukom nga dili namo likayan ang kodigo nga magkinahanglan sa mga gipang-apod-apod nga mga transaksyon. Sa among kaso, nahimo nga sayon ​​​​ang pagsunod niini nga lagda. Wala pa kami makasugat og mga sitwasyon diin ang estrikto nga gipang-apod-apod nga mga transaksyon gikinahanglan gayud - ang katapusan nga pagkamakanunayon tali sa mga module igo na.

Atong tan-awon ang usa ka espesipikong pananglitan. Kami adunay konsepto sa usa ka orkestra - usa ka pipeline nga nagproseso sa entidad sa "aplikasyon". Naghimo siya usa ka kliyente, usa ka account ug usa ka bank card sa baylo. Kung malampuson nga gihimo ang kliyente ug account, apan napakyas ang paghimo sa kard, ang aplikasyon dili mobalhin sa "malampuson" nga kahimtang ug magpabilin sa kahimtang nga "wala gibuhat". Sa umaabot, ang background nga kalihokan mokuha niini ug mohuman niini. Ang sistema naa sa usa ka kahimtang nga dili managsama sa dugay nga panahon, apan kasagaran kami natagbaw niini.

Kung adunay usa ka sitwasyon nga kinahanglan nga kanunay nga i-save ang bahin sa datos, lagmit moadto kami alang sa pagkonsolida sa serbisyo aron maproseso kini sa usa ka proseso.

Atong tan-awon ang usa ka pananglitan sa paggahin sa usa ka microservice. Sa unsang paagi nimo kini madala sa produksiyon nga medyo luwas? Sa kini nga pananglitan, kami adunay usa ka bulag nga bahin sa sistema - usa ka module sa serbisyo sa payroll, usa sa mga seksyon sa code nga gusto namon himuon nga microservice.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Una sa tanan, naghimo kami usa ka microservice pinaagi sa pagsulat pag-usab sa code. Gipauswag namo ang pipila ka mga aspeto nga wala namo malipay. Gipatuman namon ang bag-ong mga kinahanglanon sa negosyo gikan sa kustomer. Nagdugang kami og API Gateway sa koneksyon tali sa UI ug sa backend, nga maghatag sa pagpasa sa tawag.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Sunod, gibuhian namo kini nga configuration ngadto sa operasyon, apan sa usa ka pilot state. Kadaghanan sa among mga tiggamit nagtrabaho gihapon sa daan nga mga proseso sa negosyo. Alang sa mga bag-ong tiggamit, naghimo kami usa ka bag-ong bersyon sa monolithic nga aplikasyon nga wala na kini nga proseso. Sa tinuud, kami adunay kombinasyon sa usa ka monolith ug usa ka microservice nga nagtrabaho isip usa ka piloto.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Uban sa usa ka malampuson nga piloto, atong nasabtan nga ang bag-ong configuration sa pagkatinuod mahimo, mahimo natong tangtangon ang daan nga monolith gikan sa equation ug ibilin ang bag-ong configuration puli sa daan nga solusyon.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Sa kinatibuk-an, gigamit namon ang hapit tanan nga mga pamaagi sa pagbahin sa source code sa usa ka monolith. Ang tanan niini nagtugot kanamo sa pagpakunhod sa gidak-on sa mga bahin sa aplikasyon ug paghubad niini ngadto sa bag-ong mga librarya, nga naghimo sa mas maayo nga source code.

Pagtrabaho uban sa database


Ang database mahimong mabahin nga mas grabe pa kay sa source code, tungod kay kini naglangkob dili lamang sa kasamtangan nga schema, apan usab sa natipon nga makasaysayan nga datos.

Ang among database, sama sa daghang uban pa, adunay lain nga hinungdanon nga disbentaha - ang kadako niini. Kini nga database gidesinyo sumala sa makuti nga lohika sa negosyo sa usa ka monolith, ug mga relasyon nga natipon tali sa mga lamesa sa lain-laing mga utlanan nga konteksto.

Sa among kaso, sa pag-una sa tanan nga mga kasamok (dako nga database, daghang mga koneksyon, usahay dili klaro nga mga utlanan tali sa mga lamesa), usa ka problema ang mitungha nga mahitabo sa daghang dagkong mga proyekto: ang paggamit sa gipaambit nga template sa database. Ang datos gikuha gikan sa mga lamesa pinaagi sa pagtan-aw, pinaagi sa pagkopya, ug gipadala ngadto sa ubang mga sistema diin kini nga pagkopya gikinahanglan. Isip resulta, dili namo mabalhin ang mga lamesa ngadto sa bulag nga schema tungod kay aktibo kini nga gigamit.

Ang sama nga dibisyon sa limitado nga konteksto sa code makatabang kanato sa panagbulag. Kasagaran kini naghatag kanamo usa ka maayo nga ideya kung giunsa namon gibungkag ang datos sa lebel sa database. Atong nasabtan kung unsang mga lamesa ang nahisakop sa usa ka limitado nga konteksto ug hain sa lain.

Gigamit namo ang duha ka global nga pamaagi sa pagbahin sa database: pagbahin sa kasamtangan nga mga lamesa ug pagbahin sa pagproseso.

Ang pagbulag sa mga kasamtangan nga mga lamesa usa ka maayong pamaagi nga gamiton kung ang istruktura sa datos maayo, nagtagbo sa mga kinahanglanon sa negosyo, ug ang tanan nalipay niini. Niini nga kaso, mahimo natong bulagon ang kasamtangan nga mga lamesa ngadto sa usa ka bulag nga schema.

Ang usa ka departamento nga adunay pagproseso gikinahanglan kung ang modelo sa negosyo nausab pag-ayo, ug ang mga lamesa dili na makatagbaw kanamo.

Pagbahin sa kasamtangan nga mga lamesa. Kinahanglan natong determinahon kon unsay atong bulagon. Kung wala kini nga kahibalo, wala’y molihok, ug dinhi ang pagbulag sa mga limitado nga konteksto sa code makatabang kanato. Ingon sa usa ka lagda, kung masabtan nimo ang mga utlanan sa konteksto sa source code, mahimong klaro kung unsang mga lamesa ang kinahanglan ilakip sa lista alang sa departamento.

Hunahunaa nga kita adunay usa ka solusyon diin ang duha ka monolith modules nakig-uban sa usa ka database. Kinahanglan natong sigurohon nga usa ra ka module ang nakig-interact sa seksyon sa mga separado nga mga lamesa, ug ang lain nagsugod sa pagpakig-uban niini pinaagi sa API. Sa pagsugod, igo na nga ang pagrekord lamang ang gihimo pinaagi sa API. Kini usa ka kinahanglanon nga kondisyon alang sa paghisgot bahin sa kagawasan sa mga microservice. Ang mga koneksyon sa pagbasa mahimong magpabilin basta walay dakong problema.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Ang sunod nga lakang mao nga mahimo natong ibulag ang seksyon sa code nga naglihok sa mga bulag nga lamesa, adunay o wala ang pagproseso, ngadto sa usa ka bulag nga microservice ug ipadagan kini sa usa ka lahi nga proseso, usa ka sudlanan. Kini mahimong usa ka bulag nga serbisyo nga adunay koneksyon sa monolith database ug kadtong mga lamesa nga dili direktang may kalabutan niini. Ang monolith nakig-interact gihapon alang sa pagbasa sa natangtang nga bahin.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Sa ulahi atong tangtangon kini nga koneksyon, nga mao, ang pagbasa sa datos gikan sa usa ka monolithic nga aplikasyon gikan sa gibulag nga mga lamesa ibalhin usab sa API.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Sunod, atong pilion gikan sa kinatibuk-ang database ang mga lamesa diin ang bag-ong microservice lamang ang nagtrabaho. Mahimo natong ibalhin ang mga lamesa sa usa ka bulag nga schema o bisan sa usa ka bulag nga pisikal nga database. Adunay pa usa ka koneksyon sa pagbasa tali sa microservice ug sa monolith database, apan wala’y angay kabalak-an, sa kini nga pagsumpo kini mabuhi sa dugay nga panahon.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Ang katapusan nga lakang mao ang hingpit nga pagtangtang sa tanan nga mga koneksyon. Sa kini nga kaso, mahimo nga kinahanglan namon nga ibalhin ang datos gikan sa panguna nga database. Usahay gusto namong gamiton pag-usab ang pipila ka mga datos o mga direktoryo nga gikopya gikan sa mga eksternal nga sistema sa daghang mga database. Kini mahitabo kanato matag karon ug unya.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Departamento sa pagproseso. Kini nga pamaagi susama kaayo sa una, sa reverse order lamang. Gigahin dayon namo ang bag-ong database ug bag-ong microservice nga nakig-interact sa monolith pinaagi sa API. Apan sa samang higayon, adunay nagpabilin nga usa ka hugpong sa mga lamesa sa database nga gusto namong papason sa umaabot. Wala na namo kini kinahanglana; among gipulihan kini sa bag-ong modelo.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Aron molihok kini nga laraw, lagmit magkinahanglan kami usa ka panahon sa pagbalhin.

Adunay duha ka posible nga mga pamaagi.

Ang una: gidoble namo ang tanang datos sa bag-o ug daan nga mga database. Sa kini nga kaso, kami adunay data redundancy ug ang mga problema sa pag-synchronize mahimong motungha. Apan mahimo natong kuhaon ang duha ka lainlaing kliyente. Ang usa magtrabaho sa bag-ong bersyon, ang lain sa daan.

Ikaduha: gibahin namo ang datos sumala sa pipila ka criteria sa negosyo. Pananglitan, kami adunay 5 nga mga produkto sa sistema nga gitipigan sa daan nga database. Atong ibutang ang ikaunom sulod sa bag-ong buluhaton sa negosyo sa bag-ong database. Apan kinahanglan namon ang usa ka API Gateway nga mag-synchronize niini nga datos ug ipakita sa kliyente kung diin ug kung unsa ang makuha.

Ang duha nga mga pamaagi nagtrabaho, pagpili depende sa sitwasyon.

Human kami makasiguro nga ang tanan molihok, ang bahin sa monolith nga nagtrabaho uban sa daan nga mga istruktura sa database mahimong ma-disable.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Ang katapusang lakang mao ang pagtangtang sa daan nga mga istruktura sa datos.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Sa pag-summarize, mahimo natong isulti nga kita adunay mga problema sa database: lisud ang pagtrabaho niini kon itandi sa source code, mas lisud ang pagpaambit, apan kini mahimo ug kinahanglan nga buhaton. Nakit-an namo ang pipila ka mga paagi nga nagtugot kanamo sa pagbuhat niini nga luwas, apan mas sayon ​​pa nga masayop sa datos kay sa source code.

Nagtrabaho uban ang source code


Mao kini ang hitsura sa source code diagram sa dihang nagsugod kami sa pag-analisar sa monolithic nga proyekto.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Kini mahimong halos bahinon ngadto sa tulo ka mga sapaw. Kini usa ka layer sa gilunsad nga mga module, plugins, serbisyo ug indibidwal nga mga kalihokan. Sa tinuud, kini ang mga punto sa pagsulod sa sulod sa usa ka monolithic nga solusyon. Ang tanan kanila hugot nga gisilyohan sa usa ka Komon nga layer. Kini adunay lohika sa negosyo nga gipaambit sa mga serbisyo ug daghang mga koneksyon. Ang matag serbisyo ug plugin migamit hangtod sa 10 o mas komon nga mga asembliya, depende sa ilang gidak-on ug sa konsensya sa mga developers.

Kami swerte nga adunay mga librarya sa imprastraktura nga mahimong magamit nga gilain.

Usahay ang usa ka sitwasyon mitungha sa diha nga ang pipila ka komon nga mga butang dili tinuod nga iya niini nga layer, apan mga librarya sa imprastraktura. Nasulbad kini pinaagi sa pag-usab sa ngalan.

Ang pinakadako nga kabalaka mao ang limitado nga konteksto. Nahitabo nga ang 3-4 nga konteksto gisagol sa usa ka Komon nga asembliya ug gigamit ang usag usa sulod sa parehas nga mga gimbuhaton sa negosyo. Gikinahanglan nga masabtan kung asa kini mahimong bahinon ug subay sa unsa nga mga utlanan, ug unsa ang sunod nga buhaton sa pagmapa niini nga dibisyon ngadto sa mga source code assemblies.

Naghimo kami og daghang mga lagda alang sa proseso sa pagbahin sa code.

Ang una: Dili na namo gusto nga ipaambit ang lohika sa negosyo tali sa mga serbisyo, kalihokan ug mga plugins. Gusto namon nga himuon nga independente ang lohika sa negosyo sa sulod sa mga microservice. Ang mga microservice, sa laing bahin, giisip nga mga serbisyo nga hingpit nga independente. Nagtuo ako nga kini nga pamaagi medyo us aka us aka us aka us aka us aka lisud nga makab-ot, tungod kay, pananglitan, ang mga serbisyo sa C # sa bisan unsang kaso nga konektado sa usa ka sukaranan nga librarya. Ang among sistema gisulat sa C#; wala pa kami mogamit sa ubang mga teknolohiya. Busa, nakahukom kami nga mahimo namong gamiton ang kasagarang teknikal nga mga asembliya. Ang nag-unang butang mao nga wala sila'y bisan unsang mga tipik sa lohika sa negosyo. Kung ikaw adunay kasayon ​​​​nga wrapper sa ORM nga imong gigamit, unya ang pagkopya niini gikan sa serbisyo ngadto sa serbisyo mahal kaayo.

Ang among team usa ka fan sa domain-driven nga disenyo, busa ang arkitektura sa sibuyas maayo kaayo alang kanamo. Ang sukaranan sa among mga serbisyo dili ang data access layer, apan usa ka asembliya nga adunay domain logic, nga adunay sulud nga lohika sa negosyo ug wala’y koneksyon sa imprastraktura. Sa samang higayon, mahimo natong independente nga usbon ang domain assembly aron masulbad ang mga problema nga may kalabutan sa mga frameworks.

Niini nga yugto nasugatan namo ang among unang seryoso nga problema. Ang serbisyo kinahanglang maghisgot sa usa ka domain assembly, gusto namong himoong independente ang logic, ug ang DRY nga prinsipyo nakababag kanamo dinhi. Gusto sa mga nag-develop nga gamiton pag-usab ang mga klase gikan sa kasikbit nga mga asembliya aron malikayan ang pagdoble, ug ingon usa ka sangputanan, ang mga domain nagsugod nga nasumpay pag-usab. Gisusi namo ang mga resulta ug nakahukom nga tingali ang problema anaa usab sa dapit sa source code storage device. Kami adunay usa ka dako nga repository nga adunay tanan nga source code. Ang Solusyon alang sa tibuok nga proyekto lisud kaayo nga i-assemble sa usa ka lokal nga makina. Busa, ang bulag nga gagmay nga mga solusyon gihimo alang sa mga bahin sa proyekto, ug walay usa nga nagdili sa pagdugang sa pipila ka komon o domain assembly ngadto kanila ug sa paggamit niini pag-usab. Ang bugtong himan nga wala magtugot kanamo sa pagbuhat niini mao ang pagrepaso sa code. Apan usahay napakyas usab kini.

Pagkahuman nagsugod kami sa pagbalhin sa usa ka modelo nga adunay lahi nga mga repositoryo. Ang lohika sa negosyo dili na modagayday gikan sa serbisyo ngadto sa serbisyo, ang mga domain tinuod nga nahimong independente. Gisuportahan nga mas klaro ang mga konteksto nga limitado. Giunsa nato paggamit pag-usab ang mga librarya sa imprastraktura? Among gibulag sila sa usa ka bulag nga repositoryo, unya gibutang kini sa mga pakete sa Nuget, nga among gibutang sa Artifactory. Sa bisan unsang pagbag-o, awtomatikong mahitabo ang asembliya ug publikasyon.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Ang among mga serbisyo nagsugod sa paghisgot sa mga internal nga pakete sa imprastraktura sa parehas nga paagi sama sa mga eksternal. Nag-download kami og mga eksternal nga librarya gikan sa Nuget. Aron magtrabaho kauban ang Artifactory, diin among gibutang kini nga mga pakete, gigamit namon ang duha nga managers sa package. Sa gagmay nga mga repository gigamit usab namon ang Nuget. Sa mga repository nga adunay daghang mga serbisyo, gigamit namon ang Paket, nga naghatag dugang nga pagkamakanunayon sa bersyon tali sa mga module.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Sa ingon, pinaagi sa pagtrabaho sa source code, gamay nga pagbag-o sa arkitektura ug pagbulag sa mga repositoryo, gihimo namon ang among mga serbisyo nga mas independente.

Mga problema sa imprastraktura


Kadaghanan sa mga kapakyasan sa pagbalhin sa mga microservice adunay kalabotan sa imprastraktura. Kinahanglan nimo ang awtomatiko nga pag-deploy, kinahanglan nimo ang mga bag-ong librarya aron mapadagan ang imprastraktura.

Manwal nga pag-instalar sa mga palibot

Sa sinugdan, among gi-install ang solusyon alang sa mga palibot nga mano-mano. Aron ma-automate kini nga proseso, naghimo kami og pipeline sa CI/CD. Gipili namo ang padayon nga proseso sa pagpadala tungod kay ang padayon nga pagdeploy dili pa madawat alang kanamo gikan sa punto sa panglantaw sa mga proseso sa negosyo. Busa, ang pagpadala alang sa operasyon gihimo gamit ang usa ka buton, ug alang sa pagsulay - awtomatiko.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Gigamit namo ang Atlassian, Bitbucket alang sa pagtipig sa source code ug Bamboo alang sa pagtukod. Ganahan mi magsulat ug build scripts sa Cake kay pareha ra sa C#. Ang mga andam nga hinimo nga mga pakete moabut sa Artifactory, ug ang Ansible awtomatik nga makaadto sa mga server sa pagsulay, pagkahuman mahimo silang masulayan dayon.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Gilain nga pag-log


Sa usa ka higayon, usa sa mga ideya sa monolith mao ang paghatag og gipaambit nga pag-log. Kinahanglan usab namon nga masabtan kung unsa ang buhaton sa indibidwal nga mga troso nga naa sa mga disk. Ang among mga log gisulat sa mga text file. Kami nakahukom sa paggamit sa usa ka standard ELK stack. Wala kami nagsulat sa ELK direkta pinaagi sa mga provider, apan nakahukom nga usbon namo ang mga text log ug isulat ang pagsubay sa ID niini isip usa ka identifier, pagdugang sa ngalan sa serbisyo, aron kini nga mga troso ma-parse sa ulahi.

Ang transisyon gikan sa monolith ngadto sa microservices: kasaysayan ug praktis

Uban sa Filebeat, among makolekta ang among mga log gikan sa mga server, dayon i-transform kini, gamita ang Kibana aron paghimo og mga pangutana sa UI, ug tan-awa kung giunsa ang pag-ruta sa tawag taliwala sa mga serbisyo. Ang mga Trace ID makatabang kaayo niini.

Pagsulay ug pag-debug sa mga serbisyo nga may kalabotan


Sa sinugdan, wala kami hingpit nga nakasabut kung giunsa ang pag-debug sa mga serbisyo nga gihimo. Ang tanan yano sa monolith; gipadagan namo kini sa lokal nga makina. Sa sinugdan gisulayan nila nga buhaton ang parehas sa mga microservice, apan usahay aron hingpit nga maglansad ang usa ka microservice kinahanglan nimo nga ilunsad ang daghang uban pa, ug kini dili kombenyente. Among naamgohan nga kinahanglan namong mobalhin sa usa ka modelo diin among ibilin sa lokal nga makina lamang ang serbisyo o serbisyo nga gusto namong i-debug. Ang nahabilin nga mga serbisyo gigamit gikan sa mga server nga mohaum sa pagsulud sa prod. Pagkahuman sa pag-debug, sa panahon sa pagsulay, alang sa matag buluhaton, ang nabag-o nga mga serbisyo lamang ang gihatag sa pagsulay nga server. Sa ingon, ang solusyon gisulayan sa porma diin kini makita sa produksiyon sa umaabot.

Adunay mga server nga nagpadagan lamang sa mga bersyon sa produksiyon sa mga serbisyo. Kinahanglan kini nga mga server kung adunay mga insidente, aron masusi ang pagpadala sa wala pa i-deploy ug alang sa internal nga pagbansay.

Nagdugang kami usa ka awtomatiko nga proseso sa pagsulay gamit ang sikat nga librarya sa Specflow. Awtomatikong modagan ang mga pagsulay gamit ang NUnit pagkahuman sa pag-deploy gikan sa Ansible. Kung ang sakup sa buluhaton hingpit nga awtomatiko, nan wala’y kinahanglan alang sa manual nga pagsulay. Bisan tuod usahay ang dugang nga manual testing gikinahanglan gihapon. Gigamit namon ang mga tag sa Jira aron mahibal-an kung unsang mga pagsulay ang himuon alang sa usa ka piho nga isyu.

Dugang pa, ang panginahanglan alang sa pagsulay sa pagkarga miuswag; kaniadto kini gihimo lamang sa talagsa nga mga kaso. Gigamit namo ang JMeter sa pagpadagan sa mga pagsulay, InfluxDB sa pagtipig niini, ug Grafana sa paghimo og mga proseso nga graph.

Unsa may atong nakab-ot?


Una, gitangtang namo ang konsepto sa "pagpagawas". Wala na ang duha ka bulan nga makalilisang nga pagpagawas sa dihang kini nga colossus gi-deploy sa usa ka palibot sa produksiyon, nga temporaryo nga nakabalda sa mga proseso sa negosyo. Karon nag-deploy kami og mga serbisyo sa aberids matag 1,5 ka adlaw, gigrupo sila tungod kay kini molihok pagkahuman sa pag-apruba.

Walay makamatay nga mga kapakyasan sa atong sistema. Kung nagpagawas kami usa ka microservice nga adunay usa ka bug, nan ang pag-andar nga may kalabotan niini maguba, ug ang tanan nga uban nga gamit dili maapektuhan. Kini labi nga nagpauswag sa kasinatian sa tiggamit.

Makontrol nato ang deployment pattern. Mahimo nimong pilion ang mga grupo sa mga serbisyo nga gilain gikan sa nahabilin nga solusyon, kung kinahanglan.

Dugang pa, kita sa kamahinungdanon pagkunhod sa problema sa usa ka dako nga pila sa mga kalamboan. Naa na miy bulag nga mga team sa produkto nga nagtrabaho uban sa pipila ka mga serbisyo nga independente. Ang proseso sa Scrum maayo na nga angay dinhi. Ang usa ka piho nga team mahimong adunay lahi nga Tag-iya sa Produkto nga naghatag mga buluhaton niini.

Sumaryo

  • Ang mga microservice angayan alang sa pagkadunot sa mga komplikadong sistema. Sa proseso, nagsugod kami sa pagsabut kung unsa ang naa sa among sistema, kung unsa ang limitado nga konteksto, kung diin nahimutang ang ilang mga utlanan. Gitugotan ka niini nga husto ang pag-apod-apod sa mga pag-uswag sa mga module ug malikayan ang pagkalibog sa code.
  • Ang mga microservice naghatag og mga benepisyo sa organisasyon. Kanunay silang gihisgutan ingon nga arkitektura, apan kinahanglan ang bisan unsang arkitektura aron masulbad ang mga panginahanglanon sa negosyo, ug dili sa kaugalingon. Busa, makaingon kita nga ang mga microservice haum kaayo alang sa pagsulbad sa mga problema sa gagmay nga mga team, tungod kay sikat kaayo ang Scrum karon.
  • Ang pagbulag usa ka proseso nga nagbalikbalik. Dili nimo makuha ang usa ka aplikasyon ug bahinon lang kini sa mga microservice. Ang resulta nga produkto lagmit dili magamit. Kung gipahinungod ang mga microservice, mapuslanon nga isulat pag-usab ang naa na nga kabilin, nga mao, himuon kini nga code nga gusto namon ug mas makatubag sa mga panginahanglanon sa negosyo sa mga termino sa pagpaandar ug katulin.

    Usa ka gamay nga caveat: Ang mga gasto sa pagbalhin sa mga microservice hinungdanon kaayo. Nagkinahanglan og taas nga panahon aron masulbad ang problema sa imprastraktura nga mag-inusara. Mao nga kung ikaw adunay gamay nga aplikasyon nga wala magkinahanglan ug piho nga pag-scale, gawas kung adunay ka daghang mga kostumer nga nakigkompetensya alang sa atensyon ug oras sa imong team, nan ang mga microservice mahimong dili ang kinahanglan nimo karon. Kini mahal kaayo. Kung gisugdan nimo ang proseso gamit ang mga microservice, nan ang mga gasto sa una mas taas kaysa kung magsugod ka sa parehas nga proyekto sa pag-uswag sa usa ka monolith.

    PS Usa ka mas emosyonal nga istorya (ug ingon nga alang kanimo sa personal) - sumala sa link.
    Ania ang tibuok nga bersyon sa report.

Source: www.habr.com

Pagpalit kasaligan nga pag-host alang sa mga site nga adunay proteksyon sa DDoS, mga server sa VPS VDS 🔥 Pagpalit og kasaligang website hosting nga adunay proteksyon sa DDoS, VPS VDS servers | ProHoster