Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Nan atik sa a, mwen pral pale sou fason pwojè m ap travay sou transfòme soti nan yon gwo monolit nan yon seri mikwosèvis.

Pwojè a te kòmanse istwa li byen lontan de sa, nan kòmansman ane 2000. Premye vèsyon yo te ekri nan Visual Basic 6. Apre yon sèten tan, li te vin klè ke devlopman nan lang sa a ta difisil pou sipòte alavni, depi IDE a. ak lang nan tèt li yo mal devlope. Nan fen ane 2000 yo, li te deside chanje nan C # ki pi pwomèt la. Nouvo vèsyon an te ekri an paralèl ak revizyon ansyen an, piti piti plis kòd te ekri nan .NET. Backend nan C# te okòmansman konsantre sou yon achitekti sèvis, men pandan devlopman, bibliyotèk komen ki gen lojik yo te itilize, ak sèvis yo te lanse nan yon sèl pwosesis. Rezilta a se te yon aplikasyon ke nou rele yon "monolit sèvis."

Youn nan avantaj ki genyen nan konbinezon sa a se kapasite nan sèvis yo rele youn ak lòt atravè yon API ekstèn. Te gen kondisyon klè pou tranzisyon an nan yon sèvis ki pi kòrèk, ak nan lavni an, achitekti mikwosèvis.

Nou te kòmanse travay nou sou dekonpozisyon alantou 2015. Nou poko rive nan yon eta ideyal - gen toujou pati nan yon gwo pwojè ki diman ka rele monolit, men yo pa sanble ak mikwosèvis tou. Sepandan, pwogrè enpòtan.
Mwen pral pale sou li nan atik la.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Content

Achitekti ak pwoblèm nan solisyon an ki deja egziste


Okòmansman, achitekti a te sanble ak sa a: UI a se yon aplikasyon separe, pati monolitik la ekri nan Visual Basic 6, aplikasyon an .NET se yon seri sèvis ki gen rapò k ap travay ak yon baz done jistis gwo.

Dezavantaj nan solisyon anvan an

Single pwen echèk
Nou te gen yon sèl pwen echèk: aplikasyon an .NET kouri nan yon sèl pwosesis. Si nenpòt modil echwe, tout aplikasyon an echwe epi yo te dwe rekòmanse. Depi nou otomatize yon gwo kantite pwosesis pou itilizatè diferan, akòz yon echèk nan youn nan yo, tout moun pa t 'kapab travay pou kèk tan. Ak nan ka ta gen yon erè lojisyèl, menm backup pa t 'ede.

Keu amelyorasyon
Dezavantaj sa a se pito òganizasyonèl. Aplikasyon nou an gen anpil kliyan, epi yo tout vle amelyore li pi vit ke posib. Précédemment, li te enposib fè sa nan paralèl, ak tout kliyan te kanpe nan liy. Pwosesis sa a te negatif pou biznis yo paske yo te oblije pwouve ke travay yo te gen anpil valè. Ak ekip devlopman an te pase tan òganize keu sa a. Sa a te pran anpil tan ak efò, ak pwodwi a finalman pa t 'kapab chanje osi vit ke yo ta renmen.

Itilizasyon resous ki pa pi bon yo
Lè hosting sèvis nan yon sèl pwosesis, nou toujou konplètman kopye konfigirasyon an soti nan sèvè a sèvè. Nou te vle plase sèvis ki pi chaje yo separeman pou nou pa gaspiye resous yo epi pou nou jwenn kontwòl pi fleksib sou plan deplwaman nou an.

Li difisil pou aplike teknoloji modèn
Yon pwoblèm abitye nan tout devlopè: gen yon dezi prezante teknoloji modèn nan pwojè a, men pa gen okenn opòtinite. Avèk yon gwo solisyon monolitik, nenpòt aktyalizasyon nan bibliyotèk aktyèl la, nou pa mansyone tranzisyon an nan yon nouvo, vin tounen yon travay olye ki pa trivial. Li pran anpil tan pou pwouve lidè ekip la ke sa pral pote plis bonis pase nè gaspiye.

Difikilte pou bay chanjman
Sa a se te pwoblèm ki pi grav - nou te pibliye degaje chak de mwa.
Chak lage tounen yon dezas reyèl pou bank la, malgre tès yo ak efò devlopè yo. Biznis la te konprann ke nan kòmansman semèn nan kèk nan fonksyonalite li yo pa ta travay. Ak devlopè yo te konprann ke yon semèn nan ensidan grav ap tann yo.
Tout moun te gen anvi chanje sitiyasyon an.

Atant nan mikwosèvis yo


Pwoblèm nan eleman lè pare. Livrezon konpozan lè pare pa dekonpoze solisyon an ak separe diferan pwosesis.

Ti ekip pwodwi yo. Sa a enpòtan paske yon gwo ekip k ap travay sou ansyen monolit la te difisil pou jere. Yo te fòse yon ekip konsa travay dapre yon pwosesis strik, men yo te vle plis kreyativite ak endepandans. Se sèlman ti ekip ki te kapab peye sa.

Izolasyon sèvis nan pwosesis separe. Idealman, mwen ta renmen izole li nan kontenè, men yon gwo kantite sèvis ki ekri nan .NET Framework la fonksyone sèlman anba WindowsSèvis ki baze sou .NET Core ap parèt kounye a, men toujou gen kèk ladan yo.

Deplwaman fleksibilite. Nou ta renmen konbine sèvis yo jan nou bezwen li, epi pa fason kòd la fòse li.

Itilizasyon nouvo teknoloji. Sa a se enteresan pou nenpòt pwogramè.

Pwoblèm tranzisyon


Natirèlman, si li te fasil kraze yon monolit nan mikwosèvis, pa ta gen okenn bezwen pale sou li nan konferans ak ekri atik. Gen anpil enkonvenyans nan pwosesis sa a; mwen pral dekri prensipal yo ki anpeche nou.

Premye pwoblèm lan tipik pou pifò monolit: koerans nan lojik biznis. Lè nou ekri yon monolit, nou vle reitilize klas nou yo pou nou pa ekri kòd ki pa nesesè. Ak lè w ap deplase nan mikwosèvis, sa a vin yon pwoblèm: tout kòd la byen sere makonnen, epi li difisil pou separe sèvis yo.

Nan moman kòmansman travay la, depo a te gen plis pase 500 pwojè ak plis pase 700 mil liy kòd. Sa a se byen yon gwo desizyon ak dezyèm pwoblèm. Li pa t posib tou senpleman pran li epi divize li an mikwosèvis.

Twazyèm pwoblèm - mank de enfrastrikti nesesè. An reyalite, nou te manyèlman kopye kòd sous la nan serveurs yo.

Ki jan yo deplase soti nan monolit nan mikwosèvis


Pwovizyon pou mikwosèvis

Premyèman, nou imedyatman detèmine pou tèt nou ke separasyon mikwosèvis yo se yon pwosesis iteratif. Nou te toujou oblije devlope pwoblèm biznis nan paralèl. Ki jan nou pral aplike sa teknikman se deja pwoblèm nou an. Se poutèt sa, nou te prepare pou yon pwosesis iteratif. Li p ap travay nenpòt lòt fason si ou gen yon aplikasyon gwo epi li pa okòmansman pare yo dwe reekri.

Ki metòd nou itilize pou izole mikwosèvis yo?

Premye fason — deplase modil ki egziste deja kòm sèvis. Nan sans sa a, nou te gen chans: te deja anrejistre sèvis ki te travay lè l sèvi avèk pwotokòl WCF la. Yo te separe an asanble separe. Nou pote yo separeman, ajoute yon ti lans nan chak bati. Li te ekri lè l sèvi avèk bèl bibliyotèk Topshelf la, ki pèmèt ou kouri aplikasyon an tou de kòm yon sèvis ak kòm yon konsole. Sa a se pratik pou debogaj paske pa gen okenn pwojè adisyonèl ki nesesè nan solisyon an.

Sèvis yo te konekte selon lojik biznis, paske yo te itilize asanble komen epi yo te travay ak yon baz done komen. Yo diman ta ka rele mikwosèvis nan fòm pi yo. Sepandan, nou ta ka bay sèvis sa yo separeman, nan diferan pwosesis. Sa a pou kont li te fè li posib diminye enfliyans yo youn sou lòt, diminye pwoblèm nan ak devlopman paralèl ak yon sèl pwen nan echèk.

Asanble ak lame a se jis yon liy nan kòd nan klas la Pwogram. Nou kache travay ak Topshelf nan yon klas oksilyè.

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

       }
    }
}

Dezyèm fason pou asiyen microservices se: kreye yo pou rezoud nouvo pwoblèm. Si an menm tan monolit la pa grandi, sa a deja ekselan, ki vle di nou ap deplase nan bon direksyon an. Pou rezoud nouvo pwoblèm, nou te eseye kreye sèvis separe. Si te gen yon opòtinite konsa, Lè sa a, nou te kreye plis "kanonik" sèvis ki konplètman jere pwòp modèl done yo, yon baz done separe.

Nou menm, tankou anpil moun, te kòmanse ak sèvis otantifikasyon ak otorizasyon. Yo pafè pou sa. Yo endepandan, kòm yon règ, yo gen yon modèl done separe. Yo menm yo pa kominike avèk monolit la, sèlman li tounen vin jwenn yo pou rezoud kèk pwoblèm. Sèvi ak sèvis sa yo, ou ka kòmanse tranzisyon an nan yon nouvo achitekti, debogaj enfrastrikti sou yo, eseye kèk apwòch ki gen rapò ak bibliyotèk rezo, elatriye. Nou pa gen okenn ekip nan òganizasyon nou an ki pa t 'kapab kreye yon sèvis otantifikasyon.

Twazyèm fason pou asiyen microservicesYoun nan nou itilize a se yon ti kras espesifik pou nou. Sa a se retire lojik biznis nan kouch UI a. Aplikasyon prensipal UI nou an se Desktop; li, tankou backend la, ekri nan C#. Devlopè yo te fè erè detanzantan epi transfere pati nan lojik nan UI ki ta dwe egziste nan backend la epi yo te reyitilize.

Si ou gade nan yon egzanp reyèl nan kòd la nan pati UI, ou ka wè ke pi fò nan solisyon sa a gen lojik biznis reyèl ki itil nan lòt pwosesis, pa sèlman pou bati fòm nan UI.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Lojik UI reyèl la sèlman nan dènye koup liy yo. Nou transfere li nan sèvè a pou li ka reyitilize, kidonk diminye UI a ak reyalize achitekti ki kòrèk la.

Katriyèm ak pi enpòtan fason pou izole mikwosèvis yo, ki fè li posib diminye monolit la, se retire sèvis ki deja egziste ak pwosesis. Lè nou retire modil ki egziste deja yo jan yo ye, rezilta a pa toujou renmen devlopè yo, epi pwosesis biznis la ka vin demode depi yo te kreye fonksyonalite a. Avèk refactoring, nou ka sipòte yon nouvo pwosesis biznis paske kondisyon biznis yo toujou ap chanje. Nou ka amelyore kòd sous la, retire defo li te ye, epi kreye yon pi bon modèl done. Gen anpil benefis akimile.

Separe sèvis yo ak pwosesis yo inextricableman lye ak konsèp nan kontèks limite. Sa a se yon konsèp soti nan Domain Driven Design. Sa vle di yon seksyon nan modèl domèn kote tout tèm yon sèl lang yo defini inikman. Ann gade nan kontèks asirans ak bòdwo kòm yon egzanp. Nou gen yon aplikasyon monolitik, epi nou bezwen travay ak kont lan nan asirans. Nou espere pwomotè a jwenn yon klas kont ki deja egziste nan yon lòt asanble, referans li nan klas Asirans la, epi nou pral gen kòd k ap travay. Prensip DRY la pral respekte, travay la pral fè pi vit lè w sèvi ak kòd ki egziste deja.

Kòm yon rezilta, li sanble ke kontèks yo nan kont ak asirans yo konekte. Kòm nouvo kondisyon parèt, kouple sa a pral entèfere ak devlopman, ogmante konpleksite nan lojik biznis deja konplèks. Pou rezoud pwoblèm sa a, ou bezwen jwenn limit ki genyen ant kontèks nan kòd la epi retire vyolasyon yo. Pa egzanp, nan kontèks asirans lan, li se byen posib ke yon nimewo kont 20 chif Labank Santral ak dat kont lan te louvri yo pral ase.

Pou separe kontèks limite sa yo youn ak lòt epi kòmanse pwosesis pou separe mikwosèvis ak yon solisyon monolitik, nou itilize yon apwòch tankou kreye API ekstèn nan aplikasyon an. Si nou te konnen ke kèk modil ta dwe vin yon mikwosèvis, yon jan kanmenm modifye nan pwosesis la, Lè sa a, imedyatman nou te fè apèl nan lojik ki fè pati yon lòt kontèks limite atravè apèl ekstèn. Pou egzanp, atravè REST oswa WCF.

Nou byen fèm deside ke nou pa ta evite kòd ki ta mande tranzaksyon distribye. Nan ka nou an, li te tounen soti yo dwe byen fasil yo swiv règ sa a. Nou poko rankontre sitiyasyon kote tranzaksyon distribye strik yo reyèlman nesesè - konsistans final la ant modil se byen ase.

Ann gade nan yon egzanp espesifik. Nou gen konsèp nan yon orchestrator - yon tiyo ki trete antite "aplikasyon an". Li kreye yon kliyan, yon kont ak yon kat labank nan vire. Si kliyan an ak kont yo kreye avèk siksè, men kreyasyon kat la echwe, aplikasyon an pa deplase nan estati "siksè" epi li rete nan estati "kat pa kreye". Nan tan kap vini an, aktivite background pral ranmase li epi fini li. Sistèm nan te nan yon eta de enkonsistans pou kèk tan, men nou yo jeneralman satisfè ak sa a.

Si yon sitiyasyon rive lè li nesesè toujou sove yon pati nan done yo, nou pral gen plis chans ale pou konsolidasyon nan sèvis la nan lòd yo trete li nan yon sèl pwosesis.

Ann gade yon egzanp pou alokasyon yon mikwosèvis. Ki jan ou ka pote li nan pwodiksyon relativman san danje? Nan egzanp sa a, nou gen yon pati separe nan sistèm nan - yon modil sèvis pewòl, youn nan seksyon yo kòd nan ki nou ta renmen fè mikwosèvis.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Premye a tout, nou kreye yon mikwosèvis pa reekri kòd la. N ap amelyore kèk aspè ke nou pa t kontan. Nou aplike nouvo kondisyon biznis nan men kliyan an. Nou ajoute yon Gateway API nan koneksyon ki genyen ant UI a ak backend la, ki pral bay voye apèl.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Apre sa, nou lage konfigirasyon sa a nan operasyon, men nan yon eta pilòt. Pifò nan itilizatè nou yo toujou travay ak ansyen pwosesis biznis yo. Pou nouvo itilizatè yo, n ap devlope yon nouvo vèsyon aplikasyon monolitik ki pa gen pwosesis sa a ankò. Esansyèlman, nou gen yon konbinezon de yon monolit ak yon mikwosèvis k ap travay kòm yon pilòt.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Avèk yon pilòt siksè, nou konprann ke nouvo konfigirasyon an se tout bon travayabl, nou ka retire ansyen monolit la nan ekwasyon an epi kite nouvo konfigirasyon an nan plas ansyen solisyon an.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

An total, nou itilize prèske tout metòd ki egziste deja pou divize kòd sous yon monolit. Tout moun nan yo pèmèt nou diminye gwosè a nan pati nan aplikasyon an ak tradui yo nan bibliyotèk nouvo, fè pi bon kòd sous.

Travay ak baz done a


Ka baz done a ap divize pi mal pase kòd sous la, paske li gen non sèlman chema aktyèl la, men tou akimile done istorik.

Baz done nou an, tankou anpil lòt moun, te gen yon lòt dezavantaj enpòtan - gwosè gwo li yo. Baz done sa a te fèt dapre lojik biznis konplike nan yon monolit, ak relasyon akimile ant tab yo nan kontèks divès kalite limite.

Nan ka nou an, nan tèt tout pwoblèm yo (gwo baz done, anpil koneksyon, pafwa fwontyè klè ant tab), yon pwoblèm te parèt ki rive nan anpil pwojè gwo: itilize nan modèl baz done pataje. Done yo te pran nan tab yo atravè vi, atravè replikasyon, epi yo te anbake nan lòt sistèm kote replikasyon sa a te nesesè. Kòm yon rezilta, nou pa t 'kapab deplase tab yo nan yon chema separe paske yo te aktivman itilize.

Menm divizyon an nan kontèks limite nan kòd la ede nou nan separasyon. Li anjeneral ba nou yon trè bon lide sou fason nou kraze done yo nan nivo baz done a. Nou konprann ki tab ki fè pati yon kontèks limite ak kiyès ki nan yon lòt.

Nou te itilize de metòd mondyal de partitionnement baz done: partitionnement de tab ki ekziste Et partitionnement ak traitement.

Separe tab ki egziste deja yo se yon bon metòd pou itilize si estrikti done a bon, satisfè kondisyon biznis, epi tout moun kontan ak li. Nan ka sa a, nou ka separe tab ki deja egziste nan yon chema separe.

Yon depatman ak pwosesis nesesè lè modèl biznis la chanje anpil, epi tab yo pa satisfè nou ditou.

Divize tab ki egziste deja. Nou bezwen detèmine kisa nou pral separe. San konesans sa a, anyen p ap travay, e isit la separasyon kontèks limite nan kòd la ap ede nou. Kòm yon règ, si ou ka konprann limit kontèks yo nan kòd sous la, li vin klè ki tab yo ta dwe enkli nan lis la pou depatman an.

Ann imajine ke nou gen yon solisyon kote de modil monolit kominike avèk yon baz done. Nou bezwen asire w ke yon sèl modil kominike avèk seksyon tab separe yo, ak lòt la kòmanse kominike avèk li atravè API a. Pou kòmanse, li ase ke se sèlman anrejistreman te pote soti nan API a. Sa a se yon kondisyon ki nesesè pou nou pale sou endepandans mikwosèvis yo. Koneksyon lekti ka rete osi lontan ke pa gen okenn gwo pwoblèm.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Pwochen etap la se ke nou ka separe seksyon an nan kòd ki travay ak tab separe, avèk oswa san pwosesis, nan yon mikwosèvis separe epi kouri li nan yon pwosesis separe, yon veso. Sa a pral yon sèvis separe ak yon koneksyon nan baz done a monolith ak tab sa yo ki pa gen rapò dirèkteman ak li. Monolit la toujou reyaji pou lekti ak pati detachable la.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Apre sa, nou pral retire koneksyon sa a, se sa ki, lekti done ki sòti nan yon aplikasyon monolitik ki soti nan tab separe yo pral transfere tou nan API a.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Apre sa, nou pral chwazi nan baz done jeneral tab yo ak ki sèlman nouvo mikwosèvis la ap travay. Nou ka deplase tab yo nan yon chema separe oswa menm nan yon baz done fizik separe. Gen toujou yon koneksyon lekti ant mikwosèvis la ak baz done monolit la, men pa gen anyen enkyete sou, nan konfigirasyon sa a li ka viv pou yon tan long.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Dènye etap la se konplètman retire tout koneksyon. Nan ka sa a, nou ka bezwen imigre done ki soti nan baz done prensipal la. Pafwa nou vle reitilize kèk done oswa repèrtwar repwodui nan sistèm ekstèn nan plizyè baz done. Sa rive nou detanzantan.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Depatman pwosesis. Metòd sa a sanble anpil ak premye a, sèlman nan lòd ranvèse. Nou imedyatman asiyen yon nouvo baz done ak yon nouvo mikwosèvis ki reyaji ak monolit la atravè yon API. Men, an menm tan an, gen rete yon seri tab baz done ke nou vle efase nan tan kap vini an. Nou pa bezwen li ankò; nou ranplase li nan nouvo modèl la.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Pou konplo sa a mache, nou pral gen anpil chans bezwen yon peryòd tranzisyon.

Lè sa a, gen de apwòch posib.

Premye: nou kopi tout done nan nouvo ak ansyen baz done yo. Nan ka sa a, nou gen done redondance ak pwoblèm senkronizasyon ka leve. Men, nou ka pran de kliyan diferan. Youn pral travay ak nouvo vèsyon an, lòt la ak ansyen an.

Dezyèm: nou divize done yo selon kèk kritè biznis. Pou egzanp, nou te gen 5 pwodwi nan sistèm nan ki te estoke nan baz done a fin vye granmoun. Nou mete sizyèm lan nan nouvo travay biznis la nan yon nouvo baz done. Men, nou pral bezwen yon Gateway API ki pral senkronize done sa yo epi montre kliyan an ki kote ak kisa yo ka resevwa soti nan.

Tou de apwòch travay, chwazi depann sou sitiyasyon an.

Apre nou sèten ke tout bagay ap travay, pati nan monolit la ki travay ak ansyen estrikti baz done ka enfim.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Dènye etap la se retire ansyen estrikti done yo.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Pou rezime, nou ka di ke nou gen pwoblèm ak baz done a: li difisil pou travay avèk li konpare ak kòd sous la, li pi difisil pou pataje, men li ka e li ta dwe fè. Nou te jwenn kèk fason ki pèmèt nou fè sa byen san danje, men li toujou pi fasil pou fè erè ak done pase ak kòd sous.

Travay ak kòd sous


Sa a se sa dyagram nan kòd sous te sanble lè nou te kòmanse analize pwojè monolitik la.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Li ka apeprè divize an twa kouch. Sa a se yon kouch modil lanse, grefon, sèvis ak aktivite endividyèl yo. An reyalite, sa yo te pwen antre nan yon solisyon monolitik. Tout nan yo te byen sele ak yon kouch komen. Li te gen lojik biznis ke sèvis yo pataje ak yon anpil nan koneksyon. Chak sèvis ak plugin itilize jiska 10 oswa plis asanble komen, tou depann de gwosè yo ak konsyans devlopè yo.

Nou te gen chans pou gen bibliyotèk enfrastrikti ki te kapab itilize separeman.

Pafwa yon sitiyasyon te parèt lè kèk objè komen pa t aktyèlman fè pati kouch sa a, men yo te bibliyotèk enfrastrikti. Sa a te rezoud pa chanje non.

Pi gwo enkyetid se te kontèks limite. Sa te rive ke 3-4 kontèks yo te melanje nan yon sèl asanble Komen epi yo te itilize youn ak lòt nan menm fonksyon biznis yo. Li te nesesè yo konprann ki kote sa a te kapab divize ak sou ki fwontyè, ak sa yo dwe fè apre ak kat divizyon sa a nan asanble kòd sous.

Nou te formul plizyè règ pou pwosesis la divize kòd.

Premye a: Nou pa vle pataje lojik biznis ankò ant sèvis, aktivite ak grefon. Nou te vle fè lojik biznis endepandan nan microservices. Mikwosèvis, nan lòt men an, yo depreferans konsidere kòm sèvis ki egziste konplètman poukont yo. Mwen kwè ke apwòch sa a se yon ti jan gaspiyaj, epi li difisil a reyalize, paske, pou egzanp, sèvis nan C# yo pral nan nenpòt ka konekte pa yon bibliyotèk estanda. Sistèm nou an ekri an C#; nou poko itilize lòt teknoloji. Se poutèt sa, nou te deside ke nou te kapab gen mwayen pou itilize asanble teknik komen. Bagay pwensipal lan se ke yo pa gen okenn fragman nan lojik biznis. Si ou gen yon anbalaj pratik sou ORM w ap itilize a, Lè sa a, kopye li de sèvis nan sèvis se trè chè.

Ekip nou an se yon fanatik konsepsyon domèn-kondwi, kidonk achitekti zonyon te yon bon anfòm pou nou. Baz sèvis nou yo se pa kouch aksè done, men yon asanble ki gen lojik domèn, ki gen sèlman lojik biznis epi ki pa gen okenn koneksyon ak enfrastrikti a. An menm tan an, nou ka poukont modifye asanble domèn nan rezoud pwoblèm ki gen rapò ak kad.

Nan etap sa a nou te rankontre premye pwoblèm grav nou an. Sèvis la te dwe refere a yon sèl domèn asanble, nou te vle fè lojik la endepandan, ak prensip DRY la anpil anpeche nou isit la. Devlopè yo te vle reitilize klas ki soti nan asanble vwazen yo pou evite repetisyon, e kòm yon rezilta, domèn yo te kòmanse lye ansanm ankò. Nou analize rezilta yo epi nou deside ke petèt pwoblèm nan se tou nan zòn nan nan aparèy la depo kòd sous. Nou te gen yon gwo depo ki gen tout kòd sous la. Solisyon pou tout pwojè a te trè difisil pou rasanble sou yon machin lokal. Se poutèt sa, ti solisyon separe yo te kreye pou pati nan pwojè a, epi pèsonn pa te entèdi ajoute kèk asanble komen oswa domèn yo ak reitilize yo. Sèl zouti ki pa t pèmèt nou fè sa se te revizyon kòd. Men pafwa li tou echwe.

Lè sa a, nou te kòmanse deplase nan yon modèl ki gen depo separe. Lojik biznis pa koule soti nan sèvis an sèvis ankò, domèn yo te vrèman vin endepandan. Kontèks limite yo sipòte pi klè. Ki jan nou itilize bibliyotèk enfrastrikti? Nou separe yo nan yon depo separe, apresa mete yo nan pakè Nuget, ke nou mete nan Artifactory. Avèk nenpòt chanjman, asanble ak piblikasyon fèt otomatikman.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Sèvis nou yo te kòmanse fè referans a pakè enfrastrikti entèn yo menm jan ak pakè ekstèn yo. Nou telechaje bibliyotèk ekstèn nan Nuget. Pou travay ak Artifactory, kote nou te mete pakè sa yo, nou te itilize de administratè pake. Nan ti depo nou te itilize tou Nuget. Nan depo ak plizyè sèvis, nou te itilize Paket, ki bay plis konsistans vèsyon ant modil yo.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Kidonk, lè nou travay sou kòd sous la, yon ti kras chanje achitekti a ak separe depo yo, nou fè sèvis nou yo pi endepandan.

Pwoblèm enfrastrikti


Pifò nan dezavantaj yo nan deplase nan mikwosèvis yo se enfrastrikti ki gen rapò. Ou pral bezwen deplwaman otomatik, w ap bezwen nouvo bibliyotèk pou kouri enfrastrikti a.

Enstalasyon manyèl nan anviwònman yo

Okòmansman, nou enstale solisyon an pou anviwònman manyèlman. Pou otomatize pwosesis sa a, nou te kreye yon tiyo CI/CD. Nou te chwazi pwosesis livrezon kontinyèl la paske deplwaman kontinyèl poko akseptab pou nou nan pwen de vi pwosesis biznis yo. Se poutèt sa, voye pou operasyon te pote soti lè l sèvi avèk yon bouton, ak pou tès - otomatikman.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Nou itilize Atlassian, Bitbucket pou depo kòd sous ak Banbou pou bati. Nou renmen ekri bati scripts nan Cake paske li se menm bagay ak C#. Pakè pare yo vini nan Artifactory, ak Ansible otomatikman vin nan sèvè tès yo, apre sa yo ka teste imedyatman.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Separe antre


Nan yon moman, youn nan lide yo nan monolith la te bay pataje antre. Nou menm tou nou te bezwen konprann ki sa yo dwe fè ak mòso bwa yo endividyèl ki sou disk yo. Jounal nou yo ekri nan dosye tèks. Nou deside sèvi ak yon pil estanda ELK. Nou pa t ekri ELK dirèkteman atravè founisè yo, men nou te deside ke nou ta finalize mòso bwa yo epi ekri ID tras yo nan yo kòm yon idantifyan, ajoute non sèvis la, pou nou ta ka analize mòso sa yo pita.

Tranzisyon soti nan monolit nan mikwosèvis: istwa ak pratik

Avèk Filebeat nou kapab kolekte jounal nou yo soti nan sèvè yo, apresa transfòme yo, sèvi ak Kibana pou konstwi demann nan koòdone itilizatè a, epi wè kijan apèl la te dirije ant sèvis yo. ID tras yo trè itil pou sa.

Tès ak debogaj sèvis ki gen rapò


Okòmansman, nou pa t 'konprann byen ki jan yo debogaj sèvis yo ap devlope. Tout bagay te senp ak monolit la; nou kouri li sou yon machin lokal. Okòmansman, yo te eseye fè menm bagay la ak mikwo-sèvis, men pafwa pou lanse yon sèl mikwo-sèvis ou bezwen lanse plizyè lòt, e sa pa konvenyan. Nou reyalize ke nou bezwen deplase nan yon modèl kote nou kite sou machin lokal la sèlman sèvis la oswa sèvis ke nou vle debogaj. Sèvis ki rete yo itilize nan serveurs ki matche ak konfigirasyon an ak prod. Apre debogaj, pandan tès la, pou chak travay, se sèlman sèvis ki chanje yo bay sèvè tès la. Se konsa, solisyon an teste nan fòm lan nan ki li pral parèt nan pwodiksyon nan tan kap vini an.

Gen serveurs ki sèlman kouri vèsyon pwodiksyon nan sèvis yo. Serveurs sa yo nesesè nan ka ta gen ensidan, pou tcheke livrezon anvan deplwaman ak pou fòmasyon entèn yo.

Nou te ajoute yon pwosesis tès otomatik lè l sèvi avèk bibliyotèk popilè Specflow la. Tès yo kouri otomatikman lè l sèvi avèk NUnit imedyatman apre deplwaman soti nan Ansible. Si pwoteksyon travay la konplètman otomatik, Lè sa a, pa gen okenn nesesite pou tès manyèl. Malgre ke pafwa tès manyèl adisyonèl toujou obligatwa. Nou itilize tags nan Jira pou detèmine ki tès pou fè pou yon pwoblèm espesifik.

Anplis de sa, nesesite pou tès chaj ogmante; anvan li te fèt sèlman nan ka ki ra. Nou itilize JMeter pou fè tès yo, InfluxDB pou konsève yo, ak Grafana pou konstwi graf pwosesis yo.

Kisa nou reyalize?


Premyèman, nou te debarase m de konsèp nan "lage". Lage kolosal de mwa yo ale lè yo te deplwaye kolos sa a nan yon anviwonman pwodiksyon, sa ki te deranje pwosesis biznis pou yon ti tan. Koulye a, nou deplwaye sèvis an mwayèn chak jou 1,5, gwoupman yo paske yo antre nan operasyon apre apwobasyon.

Pa gen okenn echèk fatal nan sistèm nou an. Si nou lage yon mikwosèvis ak yon ensèk, lè sa a fonksyonalite ki asosye ak li pral kase, epi tout lòt fonksyonalite yo pa pral afekte. Sa a anpil amelyore eksperyans itilizatè a.

Nou ka kontwole modèl deplwaman an. Ou ka chwazi gwoup sèvis separeman de rès solisyon an, si sa nesesè.

Anplis de sa, nou te siyifikativman redwi pwoblèm nan ak yon gwo keu nan amelyorasyon. Nou kounye a gen ekip pwodwi separe ki travay ak kèk nan sèvis yo poukont yo. Pwosesis Scrum la deja yon bon anfòm isit la. Yon ekip espesifik ka gen yon Pwopriyetè Pwodui separe ki bay travay li.

Rezime

  • Mikwosèvis yo byen adapte pou dekonpoze sistèm konplèks. Nan pwosesis la, nou kòmanse konprann sa ki nan sistèm nou an, ki kontèks limite ki genyen, kote limit yo kouche. Sa a pèmèt ou kòrèkteman distribye amelyorasyon nan mitan modil yo epi anpeche konfizyon kòd.
  • Mikwosèvis bay benefis òganizasyonèl yo. Yo souvan pale sou sèlman kòm achitekti, men nenpòt achitekti nesesè yo rezoud bezwen biznis, epi yo pa poukont li. Se poutèt sa, nou ka di ke mikwosèvis yo byen adapte pou rezoud pwoblèm nan ti ekip, bay Scrum trè popilè kounye a.
  • Separasyon se yon pwosesis iteratif. Ou pa ka pran yon aplikasyon epi tou senpleman divize li an mikwosèvis. Pwodwi a ki kapab lakòz pa gen anpil chans yo dwe fonksyonèl. Lè w ap dedye mikwosèvis, li itil pou reekri eritaj ki deja egziste a, se sa ki, tounen l 'nan kòd ke nou renmen ak pi byen satisfè bezwen biznis an tèm de fonctionnalités ak vitès.

    Yon ti avètisman: Depans yo pou deplase nan mikwosèvis yo byen enpòtan. Li te pran yon bon bout tan pou rezoud pwoblèm enfrastrikti pou kont li. Kidonk, si ou gen yon ti aplikasyon ki pa mande pou yon echèl espesifik, sof si ou gen yon gwo kantite kliyan konpetisyon pou atansyon ekip ou a ak tan, Lè sa a, mikwosèvis yo ka pa sa ou bezwen jodi a. Li byen chè. Si ou kòmanse pwosesis la ak mikwosèvis, Lè sa a, depans yo pral okòmansman pi wo pase si ou kòmanse pwojè a menm ak devlopman nan yon monolit.

    PS Yon istwa plis emosyonèl (ak kòm si pou ou pèsonèlman) - dapre lyen.
    Men vèsyon konplè rapò a.

Sous: www.habr.com

Achte hosting serye pou sit ki gen pwoteksyon DDoS, sèvè VPS VDS 🔥 Achte yon hébergement sit entènèt serye ak pwoteksyon DDoS, sèvè VPS VDS | ProHoster