An t-aistriú ó monolith go microservices: stair agus cleachtas

San Airteagal seo, beidh mé ag caint faoi conas a chlaochlú an tionscadal mé ag obair ar ó monolith mór i sraith de microservices.

Thosaigh an tionscadal a stair i bhfad ó shin, ag tús na bliana 2000. Scríobhadh na chéad leaganacha in Visual Basic 6. Le himeacht ama, ba léir go mbeadh sé deacair tacú le forbairt sa teanga seo sa todhchaí, ós rud é an IDE. agus níl an teanga féin forbartha go dona. Ag deireadh na 2000í, socraíodh aistriú chuig an C# a bhfuil gealladh fúthu. Scríobhadh an leagan nua i gcomhthráth leis an athbhreithniú ar an seancheann, de réir a chéile scríobhadh níos mó agus níos mó cód i .NET. Bhí Inneall in C# dírithe ar ailtireacht seirbhíse ar dtús, ach le linn na forbartha, baineadh úsáid as leabharlanna coitianta a raibh loighic acu, agus seoladh seirbhísí in aon phróiseas amháin. Ba é an toradh a bhí air ná feidhmchlár ar thugamar “monolith seirbhíse.”

Ceann de bheagán buntáistí a bhain leis an meascán seo ná cumas na seirbhísí glaoch a chur ar a chéile trí API seachtrach. Bhí réamhriachtanais soiléire ann maidir leis an aistriú chuig seirbhís níos cruinne, agus sa todhchaí, ailtireacht mhicriseirbhíse.

Chuireamar tús lenár gcuid oibre ar dhianscaoileadh thart ar 2015. Níl staid idéalach sroichte againn go fóill - tá codanna fós de thionscadal mór ar féidir a dtugtar monoliths ar éigean, ach ní fhéachann siad cosúil le microservices ach an oiread. Mar sin féin, tá dul chun cinn suntasach.
Labhróidh mé faoi san alt.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Ábhar

Ailtireacht agus fadhbanna an réitigh reatha


Ar dtús, d'fhéach an ailtireacht mar seo: is iarratas ar leith é an Chomhéadain, tá an chuid monolithic scríofa i Visual Basic 6, is sraith de sheirbhísí gaolmhara é an t-iarratas .NET ag obair le bunachar sonraí cothrom mór.

Míbhuntáistí an réiteach roimhe seo

Pointe aonair teip
Bhí pointe amháin teipe againn: rith an t-iarratas .NET in aon phróiseas amháin. Má theip ar mhodúl ar bith, theip ar an bhfeidhmchlár iomlán agus b'éigean é a atosú. Ós rud é go ndéanaimid líon mór próisis a uathoibriú d'úsáideoirí éagsúla, mar gheall ar mhainneachtain i gceann acu, ní fhéadfadh gach duine oibriú ar feadh tamaill. Agus i gcás earráide bogearraí, níor chabhraigh fiú cúltaca.

Scuaine feabhsuithe
Tá an míbhuntáiste seo sách eagraíochtúil. Tá go leor custaiméirí ag ár n-iarratas, agus ba mhaith leo go léir é a fheabhsú chomh luath agus is féidir. Roimhe seo, bhí sé dodhéanta é seo a dhéanamh go comhthreomhar, agus sheas gach custaiméir i líne. Bhí an próiseas seo diúltach do ghnólachtaí toisc go raibh orthu a chruthú go raibh a dtasc luachmhar. Agus chaith an fhoireann forbartha am ag eagrú na scuaine seo. Thóg sé seo go leor ama agus iarracht, agus ar deireadh thiar ní fhéadfadh an táirge a athrú chomh tapa agus ba mhaith leo.

Úsáid fho-optamach acmhainní
Agus seirbhísí á n-óstáil i bpróiseas amháin, rinneamar an chumraíocht a chóipeáil go hiomlán ó fhreastalaí go freastalaí i gcónaí. Theastaigh uainn na seirbhísí is mó luchtaithe a chur ar leithligh ionas nach gcuirfí amú acmhainní agus chun smacht níos solúbtha a fháil ar ár scéim imscartha.

Deacair teicneolaíochtaí nua-aimseartha a chur i bhfeidhm
Fadhb atá ar eolas ag gach forbróir: tá fonn ann teicneolaíochtaí nua-aimseartha a thabhairt isteach sa tionscadal, ach níl aon deis ann. Le réiteach mór monolithic, iompaíonn aon nuashonrú ar an leabharlann reatha, gan trácht ar an aistriú go ceann nua, ina thasc sách neamhfhánach. Tógann sé tamall fada a chruthú do cheannaire na foirne go dtabharfaidh sé seo níos mó bónais ná mar a chuirtear amú nerves.

Deacracht athruithe a eisiúint
Ba é seo an fhadhb is tromchúisí - bhí muid ag scaoileadh eisiúintí gach dhá mhí.
Gach scaoileadh iompú isteach i tubaiste fíor don bhanc, in ainneoin na tástála agus iarrachtaí na forbróirí. Thuig an gnó nach n-oibreodh cuid dá fheidhmiúlacht ag tús na seachtaine. Agus thuig na forbróirí go raibh seachtain d'eachtraí tromchúiseacha ag fanacht leo.
Bhí fonn ar gach duine an cás a athrú.

Ionchais ó mhicrisheirbhísí


Eisiúint comhpháirteanna nuair a bhíonn siad réidh. Comhpháirteanna a sheachadadh nuair a bhíonn siad réidh tríd an tuaslagán a dhianscaoileadh agus próisis éagsúla a scaradh.

Foirne táirgí beaga. Tá sé seo tábhachtach toisc go raibh sé deacair foireann mhór a bhí ag obair ar an sean-monolith a bhainistiú. Cuireadh iallach ar fhoireann den sórt sin oibriú de réir próisis dhian, ach bhí siad ag iarraidh níos mó cruthaitheachta agus neamhspleáchais. Ní raibh ach foirne beaga in acmhainn seo.

Seirbhísí a leithlisiú i bpróisis ar leith. Go hidéalach, bhí mé ag iarraidh é a leithlisiú i gcoimeádáin, ach reáchtáiltear líon mór seirbhísí atá scríofa sa Chreat .NET ar Windows amháin. Tá seirbhísí bunaithe ar .NET Core le feiceáil anois, ach níl mórán acu fós.

Solúbthacht imlonnaithe. Ba mhaith linn seirbhísí a chur le chéile ar an mbealach a dteastaíonn sé uainn, agus ní ar an mbealach ina bhfeidhmíonn an cód iad.

Úsáid teicneolaíochtaí nua. Tá sé seo suimiúil d'aon ríomhchláraitheoir.

Fadhbanna aistrithe


Ar ndóigh, dá mbeadh sé éasca monolith a bhriseadh i microservices, ní bheadh ​​​​gá labhairt faoi ag comhdhálacha agus scríobh altanna. Tá go leor deacrachtaí sa phróiseas seo; déanfaidh mé cur síos ar na príomhchinn a chuir bac orainn.

An chéad fhadhb tipiciúil don chuid is mó monoliths: comhleanúnachas loighic gnó. Nuair a scríobhaimid monolith, ba mhaith linn ár ranganna a athúsáid ionas nach scríobhfaimid cód gan ghá. Agus nuair a bhogann tú chuig microservices, éiríonn sé seo ina fhadhb: tá an cód go léir cúpláilte go docht, agus tá sé deacair na seirbhísí a scaradh.

Ag am tosaithe na hoibre, bhí níos mó ná 500 tionscadal ag an stór agus níos mó ná 700 míle líne de chód. Is cinneadh mór go leor é seo agus dara fadhb. Níorbh fhéidir é a thógáil go simplí agus é a roinnt ina mhicriseirbhísí.

Tríú fadhb — easpa bonneagair riachtanach. Go deimhin, bhíomar ag cóipeáil an cód foinse de láimh chuig na freastalaithe.

Conas aistriú ó monolith go microservices


Micrisheirbhísí a Sholáthar

Ar an gcéad dul síos, chinneamar láithreach dúinn féin gur próiseas atriallach é deighilt na micrisheirbhísí. Bhí orainn fadhbanna gnó a fhorbairt i gcomhthráth i gcónaí. Is é an fhadhb atá againn cheana féin ná conas a chuirfimid é seo i bhfeidhm go teicniúil. Mar sin, d’ullmhaigh muid do phróiseas atriallach. Ní oibreoidh sé ar aon bhealach eile má tá feidhmchlár mór agat agus mura bhfuil sé réidh ar dtús le hathscríobh.

Cad iad na modhanna a úsáidimid chun micreasheirbhísí a leithlisiú?

An chéad bhealach — modúil atá ann cheana a bhogadh mar sheirbhísí. Maidir leis seo, bhí an t-ádh linn: bhí seirbhísí cláraithe ann cheana féin a d'oibrigh ag baint úsáide as prótacal WCF. Scaradh ina tionóil ar leith iad. Rinneamar iad a phortáil ar leithligh, ag cur tosaitheoir beag le gach tógáil. Scríobhadh é ag baint úsáide as an leabharlann iontach Topshelf, a ligeann duit an feidhmchlár a rith mar sheirbhís agus mar chonsól. Tá sé seo áisiúil le haghaidh dífhabhtaithe ós rud é nach bhfuil aon tionscadail bhreise ag teastáil sa réiteach.

Rinneadh na seirbhísí a nascadh de réir loighic an ghnó, ó d'úsáid siad comhthionóil agus d'oibrigh siad le bunachar sonraí coiteann. Is ar éigean a d’fhéadfaí micreasheirbhísí a thabhairt orthu ina bhfoirm íon. Mar sin féin, d’fhéadfaimis na seirbhísí seo a sholáthar ar leithligh, i bpróisis éagsúla. D'fhág sé seo ina n-aonar gur féidir a dtionchar ar a chéile a laghdú, ag laghdú an fhadhb le forbairt chomhthreomhar agus pointe amháin teip.

Níl i dtionól leis an ósta ach líne chód amháin sa rang Cláir. Chuireamar obair le Topshelf i bhfolach i rang cúnta.

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

       }
    }
}

Is é an dara bealach chun micreasheirbhísí a leithdháileadh: iad a chruthú chun fadhbanna nua a réiteach. Más rud é ag an am céanna nach bhfásann an monolith, tá sé seo den scoth cheana féin, rud a chiallaíonn go bhfuil muid ag bogadh sa treo ceart. Chun fadhbanna nua a réiteach, rinneamar iarracht seirbhísí ar leithligh a chruthú. Dá mbeadh deis den sórt sin ann, chruthaigh muid níos mó seirbhísí “canónacha” a bhainistíonn a samhail sonraí féin go hiomlán, bunachar sonraí ar leith.

Thosaigh muid, cosúil le go leor, le seirbhísí fíordheimhnithe agus údaraithe. Tá siad foirfe do seo. Tá siad neamhspleách, mar riail, tá múnla sonraí ar leith acu. Ní dhéanann siad iad féin a idirghníomhú leis an monolith, ach casadh sé dóibh a réiteach ar roinnt fadhbanna. Ag baint úsáide as na seirbhísí seo, is féidir leat tosú ar an aistriú chuig ailtireacht nua, dífhabhtaigh an bonneagar orthu, bain triail as roinnt cineálacha cur chuige a bhaineann le leabharlanna líonra, etc. Níl aon fhoireann san eagraíocht againn nach bhfuil in ann seirbhís fíordheimhnithe a chruthú.

An tríú bealach chun microservices a leithdháileadhTá an ceann a úsáidimid beagán sonrach dúinn. Is é seo an loighic gnó a bhaint as an ciseal Chomhéadain. Is é ár bpríomhfheidhmchlár UI ná deasc; tá sé, cosúil leis an inneall, scríofa i C #. Rinne na forbróirí botúin go tréimhsiúil agus d'aistrigh siad codanna den loighic chuig an UI ba cheart a bheith san inneall agus a athúsáid.

Má fhéachann tú ar fhíorshampla ón bpáirtchód Chomhéadain, is féidir leat a fheiceáil go bhfuil fíor-loighic ghnó sa chuid is mó den réiteach seo atá úsáideach i bpróisis eile, ní hamháin chun foirm Chomhéadain a thógáil.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Níl fíor-loighic an Chomhéadain ann ach le cúpla líne anuas. D'aistrigh muid é chuig an bhfreastalaí ionas go bhféadfaí é a athúsáid, rud a laghdódh an Chomhéadain agus an ailtireacht cheart a bhaint amach.

An ceathrú bealach agus an bealach is tábhachtaí chun microservices a leithlisiú, rud a fhágann gur féidir an monolith a laghdú, ná deireadh a chur le seirbhísí atá ann cheana féin le próiseáil. Nuair a thógaimid modúil atá ann cheana féin mar atá, ní i gcónaí a thaitníonn an toradh leis na forbróirí, agus d'fhéadfadh an próiseas gnó a bheith as dáta ó cruthaíodh an fheidhmiúlacht. Le hathfhachtóiriú, is féidir linn tacú le próiseas gnó nua mar go mbíonn riachtanais ghnó ag athrú i gcónaí. Is féidir linn an cód foinse a fheabhsú, lochtanna aitheanta a bhaint, agus samhail sonraí níos fearr a chruthú. Tá go leor buntáistí ag fabhrú.

Tá nasc dlúth idir seirbhísí a scaradh ón bpróiseáil agus coincheap an chomhthéacs teoranta. Is coincheap é seo ó Dhearadh Tiomáinte Fearainn. Ciallaíonn sé cuid de mhúnla an fhearainn ina bhfuil sainmhíniú uathúil ar gach téarma a bhaineann le teanga amháin. Breathnaímid ar shampla an chomhthéacs árachais agus billí. Tá iarratas monolithic againn, agus ní mór dúinn oibriú leis an gcuntas in árachas. Táimid ag súil go bhfaighidh an forbróir rang Cuntais atá ann cheana féin i dtionól eile, tagairt dó ón rang Árachais, agus beidh cód oibre againn. Déanfar prionsabal TRY a urramú, déanfar an tasc níos tapúla trí úsáid a bhaint as cód atá ann cheana féin.

Mar thoradh air sin, tharlaíonn sé go raibh baint ag comhthéacsanna na gcuntas agus an árachais. De réir mar a thagann ceanglais nua chun cinn, cuirfidh an cúpláil seo isteach ar fhorbairt, ag méadú ar chastacht loighic ghnó atá casta cheana féin. Chun an fhadhb seo a réiteach, ní mór duit na teorainneacha idir comhthéacsanna sa chód a aimsiú agus a sáruithe a bhaint. Mar shampla, i gcomhthéacs an árachais, is leor gur leor uimhir chuntais Bhainc Cheannais 20 dhigit agus an dáta a osclaíodh an cuntas.

Chun na comhthéacsanna teorann seo a scaradh óna chéile agus tús a chur leis an bpróiseas chun micreasheirbhísí a scaradh ó réiteach monolithic, d'úsáideamar cur chuige ar nós APIanna seachtracha a chruthú laistigh den fheidhmchlár. Má bhí a fhios againn gur chóir go mbeadh modúl éigin ina mhicrisheirbhís, arna mhodhnú ar bhealach éigin laistigh den phróiseas, ansin rinneamar glaonna láithreach ar an loighic a bhaineann le comhthéacs teoranta eile trí ghlaonna seachtracha. Mar shampla, trí REST nó WCF.

Shocraigh muid go daingean gan cód a sheachaint a d’éileodh idirbhearta dáilte. In ár gcás, d'éirigh sé go leor éasca an riail seo a leanúint. Níor thángamar ar chásanna fós ina bhfuil géarghá le hidirbhearta dian-dáilte - is leor comhsheasmhacht deiridh idir modúil.

Breathnaímid ar shampla ar leith. Tá coincheap an cheoltóra againn - píblíne a phróiseálann aonán an “iarratais”. Cruthaíonn sé cliant, cuntas agus cárta bainc ar a seal. Má chruthaítear an cliant agus an cuntas go rathúil, ach go dteipeann ar chruthú an chárta, ní aistríonn an feidhmchlár chuig an stádas “rathúil” agus fanann sé sa stádas “Níor cruthaíodh cárta”. Sa todhchaí, déanfaidh gníomhaíocht chúlra é a phiocadh suas agus é a chríochnú. Tá an córas i riocht neamh-chomhsheasmhach le tamall anuas, ach táimid sásta go ginearálta leis seo.

Má thagann cás chun cinn nuair is gá cuid de na sonraí a shábháil go seasta, is dóichí go rachaimid ar chomhdhlúthú na seirbhíse chun é a phróiseáil in aon phróiseas amháin.

Breathnaímid ar shampla de mhicrisheirbhís a leithdháileadh. Conas is féidir leat é a thabhairt chuig táirgeadh sách sábháilte? Sa sampla seo, tá cuid ar leith den chóras againn - modúl seirbhíse párolla, agus ba mhaith linn microservice a dhéanamh ar cheann de na hailt cód.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Ar an gcéad dul síos, cruthaímid microservice tríd an gcód a athscríobh. Táimid ag feabhsú gnéithe áirithe nach raibh muid sásta leo. Cuirimid riachtanais ghnó nua i bhfeidhm ón gcustaiméir. Cuirimid Geata API leis an nasc idir an Chomhéadain agus an t-inneall, a sholáthróidh cur ar aghaidh glaonna.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Ar aghaidh, scaoilfimid an chumraíocht seo i ngníomh, ach i stát píolótach. Tá an chuid is mó dár n-úsáideoirí fós ag obair le seanphróisis ghnó. I gcás úsáideoirí nua, táimid ag forbairt leagan nua den fheidhmchlár monolithic nach bhfuil an próiseas seo ann a thuilleadh. Go bunúsach, tá meascán de monolith agus microservice againn ag obair mar phíolóta.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Le píolótach rathúil, tuigimid go bhfuil an chumraíocht nua inoibrithe go deimhin, is féidir linn an sean-monolith a bhaint as an gcothromóid agus an chumraíocht nua a fhágáil in ionad an réiteach d'aois.

An t-aistriú ó monolith go microservices: stair agus cleachtas

San iomlán, úsáidimid beagnach gach modh atá ann cheana féin chun cód foinse monolith a roinnt. Ligeann siad seo go léir dúinn méid codanna den fheidhmchlár a laghdú agus iad a aistriú chuig leabharlanna nua, rud a fhágann go bhfuil cód foinse níos fearr.

Ag obair leis an mbunachar sonraí


Is féidir an bunachar sonraí a roinnt níos measa ná an cód foinse, ós rud é go bhfuil ní hamháin an scéimre reatha ann, ach freisin sonraí stairiúla carntha.

Bhí míbhuntáiste tábhachtach eile ag ár mbunachar sonraí, cosúil le go leor eile - a mhéid ollmhór. Dearadh an bunachar sonraí seo de réir loighic chasta ghnó an mhonailit, agus bhí caidreamh carntha idir na táblaí i gcomhthéacsanna teorannacha éagsúla.

I ár gcás, chun barr na Trioblóidí go léir (bunachar sonraí mór, naisc go leor, uaireanta doiléir teorainneacha idir táblaí), tháinig fadhb a tharlaíonn i go leor tionscadal mór: an úsáid a bhaint as an teimpléad bunachar sonraí comhroinnte. Tógadh sonraí ó tháblaí trí amharc, trí mhacasamhlú, agus seoladh chuig córais eile iad ina raibh gá leis an macasamhlú seo. Mar thoradh air sin, níorbh fhéidir linn na táblaí a aistriú isteach i scéimre ar leith toisc gur úsáideadh go gníomhach iad.

Cuidíonn an deighilt chéanna i gcomhthéacsanna teoranta sa chód linn scaradh. De ghnáth tugann sé smaoineamh maith go leor dúinn ar an gcaoi a ndéanaimid miondealú ar na sonraí ag leibhéal an bhunachair shonraí. Tuigimid cé na táblaí a bhaineann le comhthéacs teoranta amháin agus cé acu tábla eile.

D’úsáideamar dhá mhodh dhomhanda chun bunachar sonraí a dheighilt: táblaí a bhí ann cheana a dheighilt agus a dheighilt le próiseáil.

Is modh maith é na táblaí atá ann cheana féin a scoilteadh má tá an struchtúr sonraí go maith, go gcomhlíonann sé riachtanais ghnó, agus go bhfuil gach duine sásta leis. Sa chás seo, is féidir linn táblaí atá ann cheana féin a scaradh i scéimre ar leith.

Tá gá le roinn le próiseáil nuair a bhíonn athrú mór tagtha ar an tsamhail ghnó, agus ní shásaíonn na táblaí sinn ar chor ar bith a thuilleadh.

Na táblaí atá ann cheana féin a scoilteadh. Ní mór dúinn a chinneadh cad a scarfaimid. Gan an t-eolas seo, ní oibreoidh aon rud, agus anseo cabhróidh scaradh comhthéacsanna teoranta sa chód linn. Mar riail, más féidir leat teorainneacha na gcomhthéacsanna sa chód foinse a thuiscint, bíonn sé soiléir cé na táblaí ba chóir a chur san áireamh sa liosta don roinn.

Samhlóimid go bhfuil réiteach againn ina n-idirghníomhaíonn dhá mhodúl monolith le bunachar sonraí amháin. Ní mór dúinn a chinntiú nach n-idirghníomhaíonn ach modúl amháin leis an gcuid de na táblaí scartha, agus go dtosaíonn an ceann eile ag idirghníomhú leis tríd an API. Ar dtús, is leor nach ndéantar ach taifeadadh tríd an API. Is coinníoll riachtanach é seo dúinn labhairt faoi neamhspleáchas na micrisheirbhísí. Is féidir le naisc léitheoireachta fanacht chomh fada agus nach bhfuil fadhb mhór ann.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Is é an chéad chéim eile gur féidir linn an t-alt cód a oibríonn le táblaí scartha, le próiseáil nó gan phróiseáil, a scaradh i micrisheirbhís ar leith agus é a reáchtáil i bpróiseas ar leith, coimeádán. Seirbhís ar leith a bheidh anseo agus nasc aici leis an mbunachar sonraí monolith agus na táblaí sin nach mbaineann go díreach leis. Idirghníomhaíonn an monolith fós le léamh leis an gcuid inscortha.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Níos déanaí bainfimid an nasc seo, is é sin, déanfar sonraí a léamh ó iarratas monolithic ó tháblaí scartha a aistriú chuig an API freisin.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Ansin, roghnóimid ón mbunachar sonraí ginearálta na táblaí nach n-oibríonn ach an micreasheirbhís nua leo. Is féidir linn na táblaí a aistriú chuig scéimre ar leith nó fiú chuig bunachar sonraí fisiceach ar leith. Tá nasc léitheoireachta fós idir an microservice agus an bunachar sonraí monolith, ach níl aon rud imní ort, sa chumraíocht seo is féidir leis maireachtáil ar feadh i bhfad.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Is é an chéim dheireanach ná gach nasc a bhaint go hiomlán. Sa chás seo, seans go mbeidh orainn sonraí a aistriú ón bpríomhbhunachar sonraí. Uaireanta ba mhaith linn roinnt sonraí nó eolairí a mhacasamhlú ó chórais sheachtracha a athúsáid i roinnt bunachair shonraí. Tarlaíonn sé seo dúinn go tréimhsiúil.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Roinn próiseála. Tá an modh seo an-chosúil leis an gcéad cheann, ach amháin in ord droim ar ais. Leithdháilimid bunachar sonraí nua agus microservice nua láithreach a idirghníomhaíonn leis an monolith trí API. Ach ag an am céanna, tá sraith táblaí bunachar sonraí fós ann ar mhaith linn a scriosadh amach anseo. Níl sé de dhíth orainn a thuilleadh; chuireamar an múnla nua ina áit.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Le go n-oibreoidh an scéim seo, is dócha go mbeidh idirthréimhse de dhíth orainn.

Tá dhá chur chuige féideartha ann ansin.

An chéad: déanaimid dúbláil ar na sonraí go léir sna bunachair shonraí nua agus shean. Sa chás seo, tá iomarcaíocht sonraí againn agus d’fhéadfadh fadhbanna sioncronaithe teacht chun cinn. Ach is féidir linn dhá chliaint éagsúla a ghlacadh. Oibreoidh duine acu leis an leagan nua, an ceann eile leis an seanleagan.

Dara: roinnimid na sonraí de réir roinnt critéir ghnó. Mar shampla, bhí 5 tháirge againn sa chóras a bhí stóráilte sa seanbhunachar sonraí. Cuirimid an séú ceann laistigh den tasc gnó nua i mbunachar sonraí nua. Ach beidh Geata API de dhíth orainn a dhéanfaidh na sonraí seo a shioncronú agus a thaispeánfaidh don chliant cén áit agus cad as.

Oibríonn an dá chur chuige, roghnaigh ag brath ar an gcás.

Tar éis dúinn a bheith cinnte go n-oibríonn gach rud, is féidir an chuid den monolith a oibríonn le sean-struchtúir bunachar sonraí a dhíchumasú.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Is é an chéim dheireanach ná na seanstruchtúir sonraí a bhaint.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Mar achoimre, is féidir linn a rá go bhfuil fadhbanna againn leis an mbunachar sonraí: tá sé deacair oibriú leis i gcomparáid leis an gcód foinse, tá sé níos deacra a roinnt, ach is féidir agus ba chóir é a dhéanamh. Tá roinnt bealaí aimsithe againn a ligeann dúinn é seo a dhéanamh sábháilte go leor, ach tá sé níos éasca fós botúin a dhéanamh le sonraí ná le cód foinse.

Ag obair le cód foinse


Is é seo an chuma a bhí ar an léaráid cód foinse nuair a thosaigh muid ag anailísiú an tionscadail monolithic.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Is féidir é a roinnt go garbh i dtrí shraith. Is sraith de mhodúil seolta, breiseán, seirbhísí agus gníomhaíochtaí aonair é seo. Go deimhin, ba phointí iontrála iad seo laistigh de thuaslagán monolithic. Bhí siad go léir séalaithe go docht le ciseal Coiteann. Bhí loighic ghnó aige a roinneadh na seirbhísí agus go leor nasc. Bhain gach seirbhís agus breiseán úsáid as suas le 10 gcomhthionól coitianta nó níos mó, ag brath ar a méid agus ar choinsias na bhforbróirí.

Bhí an t-ádh linn go raibh leabharlanna bonneagair againn a d’fhéadfaí a úsáid ar leithligh.

Uaireanta tháinig cás chun cinn nuair nár bhain roinnt réad coitianta leis an gciseal seo, ach gur leabharlanna bonneagair iad. Réitíodh é seo trí athainmniú.

Ba é comhthéacsanna teoranta an imní ba mhó. Tharla sé gur meascadh 3-4 chomhthéacs i gcomhthionól amháin agus gur úsáideadh a chéile laistigh de na feidhmeanna gnó céanna. Ba ghá a thuiscint cá bhféadfaí é seo a roinnt agus cad iad na teorainneacha, agus cad ba cheart a dhéanamh ina dhiaidh sin leis an roinnt seo a mhapáil i gcóimeálacha na gcód foinseach.

Tá roinnt rialacha curtha le chéile againn don phróiseas scoilteadh cóid.

An chéad: Ní raibh muid ag iarraidh loighic gnó a roinnt idir seirbhísí, gníomhaíochtaí agus forlíontáin a thuilleadh. Theastaigh uainn loighic ghnó a dhéanamh neamhspleách laistigh de mhicriseirbhísí. Ar an láimh eile, meastar go hidéalach ar mhicrisheirbhísí mar sheirbhísí atá ann go hiomlán neamhspleách. Creidim gur cur amú beag é an cur chuige seo, agus is deacair é a bhaint amach, mar, mar shampla, beidh seirbhísí in C# ceangailte le gnáthleabharlann ar aon nós. Tá ár gcóras scríofa i C#; níor úsáideamar teicneolaíochtaí eile fós. Mar sin, chinneamar go raibh sé d’acmhainn againn tionóil theicniúla choiteanna a úsáid. Is é an rud is mó ná nach bhfuil aon blúirí de loighic gnó iontu. Má tá fillteán áise agat thar an ORM atá á úsáid agat, tá sé an-chostasach é a chóipeáil ó sheirbhís go seirbhís.

Tá ár bhfoireann ina lucht leanúna de dhearadh atá tiomáinte ag an bhfearann, agus mar sin bhí an ailtireacht oinniún oiriúnach go hiontach dúinn. Ní hé an ciseal rochtana sonraí bunús ár seirbhísí, ach tionól le loighic fearainn, nach bhfuil ann ach loighic ghnó agus nach bhfuil aon naisc aige leis an mbonneagar. Ag an am céanna, is féidir linn an tionól fearainn a mhodhnú go neamhspleách chun fadhbanna a bhaineann le creataí a réiteach.

Ag an gcéim seo thángamar ar ár gcéad fhadhb thromchúiseach. Bhí ar an tseirbhís tagairt a dhéanamh do chomhthionól fearainn amháin, theastaigh uainn an loighic a dhéanamh neamhspleách, agus chuir prionsabal TRY go mór isteach orainn anseo. Bhí na forbróirí ag iarraidh ranganna a athúsáid ó chomhthionóil chomharsanachta chun dúbailt a sheachaint, agus mar thoradh air sin, thosaigh fearainn a nascadh le chéile arís. Rinneamar anailís ar na torthaí agus chinn muid go b'fhéidir go luíonn an fhadhb freisin i réimse an gléas stórála cód foinse. Bhí stór mór againn ina raibh an cód foinse ar fad. Bhí sé an-deacair Réiteach an tionscadail ar fad a chur le chéile ar mheaisín áitiúil. Dá bhrí sin, cruthaíodh réitigh bheaga ar leithligh do chodanna den tionscadal, agus níor chuir aon duine cosc ​​​​ar roinnt comhthionól coitianta nó fearainn a chur leo agus iad a athúsáid. Ba é an t-aon uirlis nár lig dúinn é seo a dhéanamh ná athbhreithniú cód. Ach uaireanta theip air freisin.

Ansin thosaigh muid ag bogadh go múnla le stórtha ar leithligh. Ní shreabhann loighic gnó ó sheirbhís go seirbhís a thuilleadh, tá na fearainn i ndáiríre neamhspleách. Tugtar tacaíocht níos soiléire do chomhthéacsanna teorann. Conas a athúsáidimid leabharlanna bonneagair? Scaramar iad i stór ar leith, ansin chuireamar isteach iad i bpacáistí Nuget, a chuireamar isteach in Artifactory. Le haon athrú, tarlaíonn cóimeáil agus foilsiú go huathoibríoch.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Thosaigh ár seirbhísí ag tagairt do phacáistí bonneagair inmheánacha ar an mbealach céanna le pacáistí seachtracha. Íoslódáil muid leabharlanna seachtracha ó Nuget. Chun oibriú le Artifactory, áit ar chuireamar na pacáistí seo, d’úsáideamar beirt bhainisteoirí pacáiste. I stórtha beaga úsáideamar Nuget freisin. I stórtha le seirbhísí iolracha, d'úsáideamar Paket, a sholáthraíonn comhsheasmhacht leagan níos mó idir modúil.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Mar sin, trí oibriú ar an gcód foinseach, ag athrú an ailtireacht beagán agus ag scaradh na stórtha, déanaimid ár seirbhísí níos neamhspleácha.

Fadhbanna bonneagair


Baineann an chuid is mó de na míbhuntáistí a bhaineann le haistriú chuig micreasheirbhísí le bonneagar. Beidh imscaradh uathoibrithe ag teastáil uait, beidh leabharlanna nua uait chun an bonneagar a rith.

Suiteáil láimhe i dtimpeallachtaí

Ar dtús, shuiteáil muid an réiteach le haghaidh timpeallachtaí de láimh. Chun an próiseas seo a uathoibriú, chruthaíomar píblíne CI/CD. Roghnaigh muid an próiseas seachadta leanúnach toisc nach bhfuil imscaradh leanúnach inghlactha dúinn fós ó thaobh próisis ghnó de. Dá bhrí sin, tá seoladh le haghaidh oibríochta i gcrích ag baint úsáide as cnaipe, agus le haghaidh tástála - go huathoibríoch.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Bainimid úsáid as Atlassian, Bitbucket le haghaidh stórála cód foinse agus bambú le haghaidh tógála. Is maith linn scripteanna tógála a scríobh i gCíste mar tá sé mar an gcéanna le C#. Tagann pacáistí réamhdhéanta go Artifactory, agus faigheann Ansible go huathoibríoch chuig na freastalaithe tástála, agus ina dhiaidh sin is féidir iad a thástáil láithreach.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Logánú ar leith


Ag am amháin, ba é ceann de na smaointe a bhí ag an monolith ná logáil roinnte a sholáthar. Ní mór dúinn a thuiscint freisin cad atá le déanamh leis na logaí aonair atá ar na dioscaí. Scríobhtar ár logaí chuig comhaid téacs. Shocraigh muid cruach caighdeánach ELK a úsáid. Níor scríobhamar chuig ELK go díreach trí na soláthraithe, ach shocraigh muid go ndéanfaimis na logaí téacs a mhodhnú agus an rian-aitheantas a scríobh iontu mar aitheantóir, ag cur ainm na seirbhíse leis, ionas go bhféadfaí na logaí seo a pharsáil níos déanaí.

An t-aistriú ó monolith go microservices: stair agus cleachtas

Ag baint úsáide as Filebeat, faigheann muid an deis ár logaí a bhailiú ó fhreastalaithe, ansin iad a athrú, úsáid a bhaint as Kibana chun ceisteanna a thógáil san Chomhéadain agus a fheiceáil conas a chuaigh an glao idir seirbhísí. Cuidíonn Trace ID go mór leis seo.

Seirbhísí gaolmhara a thástáil agus a dhífhabhtú


Ar dtús, níor thuig muid go hiomlán conas na seirbhísí atá á bhforbairt a dhífhabhtú. Bhí gach rud simplí leis an monolith; ritheamar é ar mheaisín áitiúil. Ar dtús rinne siad iarracht an rud céanna a dhéanamh le microservices, ach uaireanta chun microservice amháin a sheoladh go hiomlán ní mór duit go leor eile a sheoladh, agus tá sé seo deacair. Thuig muid go gcaithfimid bogadh chuig múnla nach bhfágaimid ar an meaisín áitiúil ach an tseirbhís nó na seirbhísí a theastaíonn uainn a dhífhabhtú. Úsáidtear na seirbhísí atá fágtha ó fhreastalaithe a mheaitseálann an chumraíocht le prod. Tar éis dífhabhtaithe, le linn tástála, do gach tasc, ní eisítear ach na seirbhísí athraithe chuig an bhfreastalaí tástála. Dá bhrí sin, déantar tástáil ar an réiteach san fhoirm ina mbeidh sé le feiceáil i dtáirgeadh sa todhchaí.

Tá freastalaithe ann nach ritheann ach le leaganacha táirgeachta de sheirbhísí. Tá na freastalaithe seo ag teastáil i gcás teagmhas, chun seachadadh a sheiceáil roimh imscaradh agus chun oiliúint inmheánach a fháil.

Chuireamar próiseas tástála uathoibrithe leis ag baint úsáide as an leabharlann Specflow a bhfuil an-tóir uirthi. Ritheann tástálacha go huathoibríoch ag baint úsáide as NUnit díreach tar éis imscaradh ó Ansible. Má tá clúdach an taisc go hiomlán uathoibríoch, níl aon ghá le tástáil láimhe. Cé go mbíonn gá le tástáil láimhe bhreise uaireanta. Bainimid úsáid as clibeanna i Jira chun a chinneadh cé na tástálacha atá le rith le haghaidh saincheiste.

Ina theannta sin, tá méadú tagtha ar an ngá atá le tástáil ualaigh; roimhe seo ní dhearnadh é ach i gcásanna neamhchoitianta. Bainimid úsáid as JMeter chun tástálacha a rith, InfluxDB chun iad a stóráil, agus Grafana chun graif próisis a thógáil.

Cad atá bainte amach againn?


Ar an gcéad dul síos, fuaireamar réidh leis an gcoincheap “scaoileadh”. Tá na heisiúintí uafásacha dhá mhí imithe nuair a imscaradh an colossus seo i dtimpeallacht táirgthe, rud a chuir isteach ar phróisis ghnó go sealadach. Anois déanaimid seirbhísí a imscaradh gach 1,5 lá ar an meán, á ngrúpáil toisc go dtéann siad i bhfeidhm tar éis formheasta.

Níl aon teipeanna marfacha inár gcóras. Má scaoilimid microservice le fabht, ansin déanfar an fheidhmiúlacht a bhaineann leis a bhriseadh, agus ní dhéanfar difear do gach feidhmiúlacht eile. Feabhsaíonn sé seo go mór an taithí úsáideora.

Is féidir linn an patrún imscartha a rialú. Is féidir leat grúpaí seirbhísí a roghnú ar leithligh ón gcuid eile den réiteach, más gá.

Ina theannta sin, tá laghdú suntasach tagtha ar an bhfadhb le scuaine mór feabhsuithe. Tá foirne táirgí ar leith againn anois a oibríonn go neamhspleách le roinnt de na seirbhísí. Tá an próiseas Scrum oiriúnach go maith anseo cheana féin. D’fhéadfadh Úinéir Táirge ar leith a bheith ag foireann ar leith a sannann tascanna di.

Achoimre

  • Tá micreasheirbhísí feiliúnach go maith chun córais chasta a dhianscaoileadh. Sa phróiseas, tosaímid a thuiscint cad atá inár gcóras, cad iad na comhthéacsanna teoranta atá ann, cá bhfuil a dteorainneacha. Ligeann sé seo duit feabhsuithe a dháileadh i gceart i measc modúil agus mearbhall cód a chosc.
  • Soláthraíonn micreasheirbhísí tairbhí eagraíochtúla. Is minic nach ndéantar caint orthu ach mar ailtireacht, ach tá gá le haon ailtireacht chun riachtanais ghnó a réiteach, agus ní ina n-aonar. Mar sin, is féidir linn a rá go bhfuil microservices oiriúnach go maith chun fadhbanna a réiteach i bhfoirne beaga, ós rud é go bhfuil an-tóir ar Scrum anois.
  • Is próiseas atriallach é an scaradh. Ní féidir leat feidhmchlár a ghlacadh agus é a roinnt ina mhicrisheirbhísí. Ní dócha go mbeidh an táirge mar thoradh air sin feidhmiúil. Agus microservices á thiomnú, tá sé tairbheach an oidhreacht atá ann cheana féin a athscríobh, is é sin, é a iompú isteach i gcód is maith linn agus a fhreastalaíonn ar riachtanais ghnó níos fearr i dtéarmaí feidhmiúlacht agus luas.

    Uaimh bheag: Tá na costais a bhaineann le haistriú go micreasheirbhísí suntasach go leor. Thóg sé tamall fada an fhadhb bonneagair a réiteach leis féin. Mar sin má tá feidhmchlár beag agat nach dteastaíonn scálaiú sonrach uaidh, ach amháin má tá líon mór custaiméirí agat san iomaíocht le haghaidh aird agus am d’fhoireann, b’fhéidir nach iad na microservices a theastaíonn uait inniu. Tá sé daor go leor. Má thosaíonn tú ar an bpróiseas le microservices, ansin beidh na costais níos airde ar dtús ná má thosaíonn tú ar an tionscadal céanna le monolith a fhorbairt.

    PS Scéal níos mhothúchánach (agus amhail is dá mba ar do shon go pearsanta) - de réir nasc.
    Seo é an leagan iomlán den tuarascáil.

Foinse: will.com

Add a comment