Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud
Dia duit, is mise Sergey Elantsev, forbraíonn mé Comhardú ualach líonra i Yandex.Cloud. Roimhe seo, bhí mé i gceannas ar fhorbairt an balancer L7 le haghaidh an tairseach Yandex - comhghleacaithe joke go bhfuil cuma cad a dhéanfaidh mé, casadh sé amach a bheith ina balancer. Inseoidh mé do léitheoirí Habr conas an t-ualach a bhainistiú i ardán scamall, cad a fheicimid mar an uirlis iontach chun an sprioc seo a bhaint amach, agus conas atáimid ag bogadh i dtreo an uirlis seo a thógáil.

Ar dtús, déanaimis roinnt téarmaí a thabhairt isteach:

  • VIP (IP Fíorúil) - Seoladh IP balancer
  • Freastalaí, inneall, mar shampla - meaisín fíorúil a ritheann feidhmchlár
  • RIP (Real IP) - seoladh IP an fhreastalaí
  • Healthcheck - seiceáil ullmhacht an fhreastalaí
  • Crios Infhaighteachta, AZ - bonneagar scoite i lárionad sonraí
  • Réigiún - aontas de AZ éagsúla

Réitíonn cothromóirí ualaigh trí phríomhchúram: comhlíonann siad an cothromú féin, feabhsaítear caoinfhulaingt locht na seirbhíse, agus simplíonn siad a scála. Cinntítear lamháltas lochtanna trí bhainistíocht uathoibríoch tráchta: déanann an cothromóir monatóireacht ar staid an iarratais agus ní áirítear cásanna cothromaíochta nach n-éiríonn leo an tseiceáil beocht. Cinntítear scálú tríd an ualach a dháileadh go cothrom trasna cásanna, chomh maith leis an liosta cásanna ar an eitilt a nuashonrú. Mura bhfuil an cothromú aonfhoirmeach go leor, gheobhaidh cuid de na cásanna ualach a sháraíonn a dteorainn acmhainne, agus éireoidh an tseirbhís níos lú iontaofa.

Is minic a aicmítear cothromóir ualaigh de réir an chiseal prótacail ón tsamhail OSI ar a ritheann sé. Feidhmíonn an Cloud Balancer ag an leibhéal TCP, a fhreagraíonn don cheathrú ciseal, L4.

A ligean ar bogadh ar aghaidh go dtí forbhreathnú ar an ailtireacht Cloud balancer. Méadóimid leibhéal na sonraí de réir a chéile. Roinnimid na comhpháirteanna cothromaíochta i dtrí rang. Tá an rang eitleáin cumraíochta freagrach as idirghníomhaíocht úsáideora agus stórálann sé spriocstaid an chórais. Stórálann an t-eitleán rialaithe staid reatha an chórais agus bainistíonn sé córais ón rang eitleáin sonraí, atá freagrach go díreach as trácht a sheachadadh ó chliaint chuig do chásanna.

Eitleán sonraí

Críochnaíonn an trácht suas ar fheistí daor ar a dtugtar ródairí teorann. Chun lamháltas lochtanna a mhéadú, oibríonn roinnt feistí den sórt sin go comhuaineach in aon ionad sonraí amháin. Ansin, téann an trácht chuig cothromóirí, a fhógraíonn seoltaí IP aonchraolta chuig gach AZ trí BGP do chliaint. 

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Tarchuirtear trácht thar ECMP - is straitéis ródaithe í seo ar dá réir is féidir go leor bealaí chomh maith a bheith ann chuig an sprioc (is é an seoladh IP ceann scríbe an sprioc) agus is féidir paicéid a sheoladh feadh aon cheann acu. Tacaímid freisin le hobair i roinnt criosanna infhaighteachta de réir na scéime seo a leanas: fógraímid seoladh i ngach crios, téann an trácht chuig an gceann is gaire agus ní théann sé thar a theorainneacha. Níos déanaí sa phost déanfaimid breathnú níos mine ar cad a tharlaíonn don trácht.

Eitleán cumraíochta

 
Is é príomh-chomhpháirt an eitleáin config an API, trína ndéantar oibríochtaí bunúsacha le cothromóirí: comhdhéanamh cásanna a chruthú, a scriosadh, a athrú, torthaí seiceálacha sláinte a fháil, etc. Ar thaobh amháin, is API REST é seo, agus ar an eile, is minic a úsáideann muid sa Néal an creat gRPC, mar sin déanaimid “aistriú” ar REST go gRPC agus ansin ní úsáidimid ach gRPC. Mar thoradh ar aon iarratas cruthaítear sraith de thascanna díspeagtha asincrónacha a fhorghníomhaítear ar chomhthiomsú oibrithe Yandex.Cloud. Scríobhtar tascanna sa chaoi is gur féidir iad a chur ar fionraí ag am ar bith agus ansin iad a atosú. Cinntíonn sé seo scalability, atriallacht agus logáil oibríochtaí.

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Mar thoradh air sin, déanfaidh an tasc ón API iarratas chuig an rialtóir seirbhíse balancer, atá scríofa in Go. Is féidir leis cothromóirí a chur leis agus a bhaint, comhdhéanamh na n-ais agus na socruithe a athrú. 

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Stórálann an tseirbhís a staid i mBunachar Sonraí Yandex, bunachar sonraí bainistithe dáilte a bheidh tú in ann é a úsáid go luath. I Yandex.Cloud, mar atá againn cheana féin inis, tá feidhm ag an gcoincheap bia madra: má úsáideann muid féin ár seirbhísí, ansin beidh ár gcliaint sásta iad a úsáid freisin. Is sampla é Bunachar Sonraí Yandex de chur i bhfeidhm coincheap den sórt sin. Stórálaimid ár sonraí go léir in YDB, agus ní gá dúinn smaoineamh ar an mbunachar sonraí a chothabháil agus a scála: déantar na fadhbanna seo a réiteach dúinn, úsáidimid an bunachar sonraí mar sheirbhís.

Fillfimid ar an rialtóir cothromaíochta. Is é an tasc atá aige ná faisnéis a shábháil faoin gcothromóir agus tasc a sheoladh chun ullmhacht an mheaisín fíorúil a sheiceáil chuig an rialtóir seiceála sláinte.

Rialaitheoir seiceáil sláinte

Faigheann sé iarratais chun rialacha seiceála a athrú, sábhálann sé iad in YDB, dáileann sé tascanna i measc nóid healtcheck agus comhiomlánaíonn sé na torthaí, a shábháiltear ansin chuig an mbunachar sonraí agus a sheoltar chuig an rialtóir lódchothromaíochta. Seolann sé, ina dhiaidh sin, iarratas chun comhdhéanamh an bhraisle san eitleán sonraí a athrú chuig an nód ualachchothromaithe, a phléifidh mé thíos.

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Labhraímis níos mó faoi sheiceálacha sláinte. Is féidir iad a roinnt i roinnt ranganna. Tá critéir ratha éagsúla ag iniúchtaí. Ní mór do sheiceálacha TCP nasc a bhunú go rathúil laistigh de thréimhse socraithe ama. Éilíonn seiceálacha HTTP nasc rathúil agus freagra le cód stádais 200.

Chomh maith leis sin, tá difríocht idir seiceálacha sa rang gníomhaíochta - tá siad gníomhach agus éighníomhach. Déanann seiceálacha éighníomhacha monatóireacht ar a bhfuil ag tarlú le trácht gan aon bheart speisialta a dhéanamh. Ní oibríonn sé seo go han-mhaith ar L4 toisc go mbraitheann sé ar loighic na bprótacal ardleibhéil: ar L4 níl aon fhaisnéis faoi cé chomh fada agus a ghlac an oibríocht nó cibé an raibh críochnú an cheangail maith nó olc. Éilíonn seiceálacha gníomhacha ar an gcothromóir iarratais a sheoladh chuig gach freastalaí.

Déanann an chuid is mó de chothromóirí ualaigh seiceálacha beocht iad féin. Ag Cloud, shocraigh muid na codanna seo den chóras a scaradh chun inscálaitheacht a mhéadú. Ligfidh an cur chuige seo dúinn líon na n-cothromóirí a mhéadú agus líon na n-iarratas seiceála sláinte ar an tseirbhís a choinneáil. Déanann nóid seiceála sláinte ar leith seiceálacha, agus déantar spriocanna seiceála a roinnt agus a mhacasamhlú. Ní féidir leat seiceálacha a dhéanamh ó óstach amháin, mar seans go dteipfidh air. Ansin ní bhfaighidh muid staid na gcásanna a sheiceáil sé. Déanaimid seiceálacha ar aon cheann de na cásanna ó thrí nód seiceála sláinte ar a laghad. Roinnimid críocha na seiceálacha idir nóid ag baint úsáide as halgartaim hashing comhsheasmhach.

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Is féidir fadhbanna a bheith mar thoradh ar chothromú agus seiceáil sláinte a scaradh. Má dhéanann an nód seiceála sláinte iarratais ar an gcás, ag seachaint an chothromóra (nach bhfuil ag freastal ar an trácht faoi láthair), ansin tagann staid aisteach chun cinn: is cosúil go bhfuil an acmhainn beo, ach ní shroichfidh an trácht é. Réitímid an fhadhb seo ar an mbealach seo: tá ráthaíocht againn go gcuirfear tús le seiceáil sláinte tráchta trí chothromaitheoirí. I bhfocail eile, is beag difríocht a bhíonn sa scéim chun paicéid a bhogadh le trácht ó chliaint agus ó sheiceálacha sláinte: sa dá chás, sroichfidh na paicéid na cothromóirí, rud a sheachadfaidh chuig na hacmhainní sprice iad.

Is é an difríocht ná go ndéanann cliaint iarratais chuig VIP, agus déanann seiceálaithe sláinte iarratais ar gach RIP ar leith. Éiríonn fadhb suimiúil anseo: tugaimid deis dár n-úsáideoirí acmhainní a chruthú i líonraí IP liath. Samhlóimid go bhfuil dhá úinéir scamall éagsúla ann a chuir a gcuid seirbhísí i bhfolach taobh thiar de chothromóirí. Tá acmhainní ag gach ceann acu san subnet 10.0.0.1/24, leis na seoltaí céanna. Ní mór duit a bheith in ann idirdhealú a dhéanamh orthu ar bhealach éigin, agus anseo ní mór duit tumadóireacht a dhéanamh ar struchtúr líonra fíorúil Yandex.Cloud. Is fearr tuilleadh sonraí a fháil i físeán ó about:cloud event, tá sé tábhachtach dúinn anois go bhfuil an líonra ilchisealach agus go bhfuil tolláin ann ar féidir idirdhealú a dhéanamh orthu le subnet id.

Déanann nóid seiceála sláinte teagmháil le comhardóirí ag baint úsáide as seoltaí quasi-IPv6 mar a thugtar orthu. Is éard is quasi-seoladh ann ná seoladh IPv6 a bhfuil seoladh IPv4 agus aitheantas folíon úsáideora leabaithe istigh ann. Sroicheann an trácht an cothromóir, a bhaineann an seoladh acmhainne IPv4 uaidh, cuireann sé IPv6 in ionad IPv4 agus cuireann sé an paicéad chuig líonra an úsáideora.

Téann an trácht droim ar ais ar an mbealach céanna: feiceann an cothromóir gur líonra liath é an ceann scríbe ó sheiceálaithe sláinte, agus athraíonn sé IPv4 go IPv6.

VPP - croílár an eitleáin sonraí

Cuirtear an cothromóir i bhfeidhm ag baint úsáide as teicneolaíocht Próiseáil Paicéad Veicteoir (VPP), creat ó Cisco chun trácht líonra a phróiseáil baisc. Is é ár gcás, oibríonn an creat ar bharr na leabharlann bainistíochta gléas líonra spás-úsáideoirí - Data Plane Development Kit (DPDK). Cinntíonn sé seo feidhmíocht próiseála paicéad ard: tarlaíonn i bhfad níos lú idirbhriste san eithne, agus níl aon lasca comhthéacs idir spás eithne agus spás úsáideora. 

Téann VPP níos faide agus cuireann sé níos mó feidhmíochta amach as an gcóras trí phacáistí a chomhcheangal i mbaisceanna. Tagann na gnóthachain feidhmíochta as úsáid ionsaitheach caches ar phróiseálaithe nua-aimseartha. Úsáidtear an dá thaisce sonraí (próiseáiltear paicéid i “veicteoirí”, tá na sonraí gar dá chéile) agus taisce treoracha: i VPP, leanann próiseáil paicéid graf, a bhfuil nóid na feidhmeanna a chomhlíonann an tasc céanna.

Mar shampla, déantar próiseáil paicéid IP i VPP san ord seo a leanas: ar dtús, déantar na ceanntásca paicéid a pharsáil sa nód parsála, agus ansin seoltar chuig an nód iad, rud a chuireann na paicéid ar aghaidh níos faide de réir na táblaí ródaithe.

A hardcore beag. Ní fhulaingt údair VPP comhréiteach in úsáid taisce próiseálaí, mar sin tá veicteoiriú láimhe ar an gcód tipiciúil chun veicteoir paicéid a phróiseáil: tá lúb próiseála ann ina bpróiseáiltear cás mar “tá ceithre phaicéad againn sa scuaine”, ansin mar an gcéanna ar feadh dhá, ansin - ar cheann amháin. Is minic a úsáidtear réamhthreoracha chun sonraí a luchtú isteach i dtaisce chun rochtain orthu a bhrostú in atriallta ina dhiaidh sin.

n_left_from = frame->n_vectors;
while (n_left_from > 0)
{
    vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);
    // ...
    while (n_left_from >= 4 && n_left_to_next >= 2)
    {
        // processing multiple packets at once
        u32 next0 = SAMPLE_NEXT_INTERFACE_OUTPUT;
        u32 next1 = SAMPLE_NEXT_INTERFACE_OUTPUT;
        // ...
        /* Prefetch next iteration. */
        {
            vlib_buffer_t *p2, *p3;

            p2 = vlib_get_buffer (vm, from[2]);
            p3 = vlib_get_buffer (vm, from[3]);

            vlib_prefetch_buffer_header (p2, LOAD);
            vlib_prefetch_buffer_header (p3, LOAD);

            CLIB_PREFETCH (p2->data, CLIB_CACHE_LINE_BYTES, STORE);
            CLIB_PREFETCH (p3->data, CLIB_CACHE_LINE_BYTES, STORE);
        }
        // actually process data
        /* verify speculative enqueues, maybe switch current next frame */
        vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
                to_next, n_left_to_next,
                bi0, bi1, next0, next1);
    }

    while (n_left_from > 0 && n_left_to_next > 0)
    {
        // processing packets by one
    }

    // processed batch
    vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}

Mar sin, labhraíonn Healthchecks thar IPv6 leis an VPP, a iompaíonn IPv4 orthu. Déantar é seo le nód sa ghraf, ar a dtugaimid NAT algartamaíoch. Maidir le trácht droim ar ais (agus comhshó ó IPv6 go IPv4) tá an nód NAT algartamach céanna.

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Téann trácht díreach ó na cliaint balancer trí na nóid graf, a dhéanann an cothromú féin. 

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Is seisiúin greamaitheacha an chéad nód. Stórálann sé hash na 5-tuple le haghaidh seisiúin bunaithe. Áirítear le 5-tuple seoladh agus calafort an chliaint óna ndéantar faisnéis a tharchur, seoladh agus calafoirt na n-acmhainní atá ar fáil chun trácht a fháil, chomh maith leis an bprótacal líonra. 

Cuidíonn an hash 5-tuple linn ríomh níos lú a dhéanamh sa nód hashing comhsheasmhach ina dhiaidh sin, chomh maith le láimhseáil níos fearr ar athruithe liosta acmhainní taobh thiar den balancer. Nuair a shroicheann paicéad nach bhfuil seisiún ann dó an cothromóir, seoltar chuig an nód hashing comhsheasmhach é. Seo an áit a ndéantar cothromú trí úsáid a bhaint as hasháil chomhsheasmhach: roghnaimid acmhainn ón liosta acmhainní “beo” atá ar fáil. Ansin, seoltar na paicéid chuig an nód NAT, a thagann in ionad an seoladh ceann scríbe agus a athríomh na seiceálacha. Mar a fheiceann tú, leanaimid rialacha VPP - is maith leat, ríomhanna comhchosúla a ghrúpáil chun éifeachtacht caches próiseálaí a mhéadú.

hashing comhsheasmhach

Cén fáth ar roghnaigh muid é agus cad é fiú? Gcéad dul síos, déanaimis machnamh ar an tasc roimhe seo - acmhainn a roghnú ón liosta. 

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Le hashing neamhréireach, ríomhtar hash an phaicéad isteach, agus roghnaítear acmhainn ón liosta tríd an gcuid eile den hash seo a roinnt ar líon na n-acmhainní. Chomh fada is nach bhfuil aon athrú ar an liosta, oibríonn an scéim seo go maith: cuirimid paicéid leis na 5-tuple céanna chuig an ásc céanna i gcónaí. Más rud é, mar shampla, gur stop acmhainn éigin ag freagairt do sheiceálacha sláinte, ansin ar feadh cuid shuntasach de na hashes athrófar an rogha. Brisfear naisc TCP an chliaint: d'fhéadfadh paicéad a shroich cás A cheana féin tosú ar shampla B a bhaint amach, nach bhfuil eolach ar an seisiún don phaicéad seo.

Réitíonn hashing comhsheasmhach an fhadhb a thuairiscítear. Is é an bealach is éasca chun an coincheap seo a mhíniú ná seo: samhlaigh go bhfuil fáinne agat ar a ndéanann tú acmhainní a dháileadh le hais (mar shampla, trí IP:port). Is éard atá i gceist le hacmhainn a roghnú ná an roth a chasadh ar uillinn, a chinnfidh hash an phaicéid.

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Laghdaíonn sé seo athdháileadh tráchta nuair a athraíonn comhdhéanamh acmhainní. Ní dhéanfaidh scriosadh acmhainn ach difear don chuid den fháinne hashing comhsheasmhach ina raibh an acmhainn suite. Athraíonn acmhainn a chur leis an dáileadh freisin, ach tá nód seisiún greamaitheach againn, rud a ligeann dúinn gan seisiúin atá bunaithe cheana féin a aistriú chuig acmhainní nua.

D'fhéachamar ar cad a tharlaíonn don trácht díreach idir an comhardaitheoir agus na hacmhainní. Anois, déanaimis féachaint ar thrácht fillte. Leanann sé an patrún céanna le trácht seiceála - trí NAT algartamaíoch, is é sin, trí NAT 44 droim ar ais do thrácht cliant agus trí NAT 46 do thrácht seiceálacha sláinte. Cloíimid lenár scéim féin: déanaimid trácht seiceálacha sláinte agus fíorthrácht úsáideoirí a aontú.

Loadbalancer-nód agus comhpháirteanna cóimeáilte

Tuairiscíonn an tseirbhís áitiúil - loadbalancer-node comhdhéanamh na n-cothromóirí agus na n-acmhainní i VPP. Síníonn sé leis an sruth imeachtaí ó loadbalancer-controller agus tá sé in ann a bhreacadh síos ar an difríocht idir an staid reatha VPP agus an stát sprice a fuarthas ón rialtóir. Faighimid córas dúnta: tagann imeachtaí ón API chuig an rialtóir cothromaíochta, a sannann tascanna don rialtóir seiceála sláinte chun “beo” acmhainní a sheiceáil. Sannann sé sin, ar a sheal, tascanna don nód seiceála sláinte agus comhiomlánaíonn sé na torthaí, agus ina dhiaidh sin seolann sé ar ais chuig an rialtóir cothromaíochta iad. Liostálann Loadbalancer-node le himeachtaí ón rialtóir agus athraíonn sé staid an VPP. I gcóras den sórt sin, níl a fhios ag gach seirbhís ach cad atá riachtanach maidir le seirbhísí comharsanachta. Tá líon na nasc teoranta agus tá an cumas againn codanna éagsúla a oibriú agus a scála go neamhspleách.

Ailtireacht cothromóir ualaigh líonra i Yandex.Cloud

Cad iad na saincheisteanna a seachnaíodh?

Tá ár gcuid seirbhísí go léir san eitleán rialaithe scríofa in Go agus tá tréithe maithe scálaithe agus iontaofachta acu. Tá go leor leabharlann foinse oscailte ag Go chun córais dáilte a thógáil. Bainimid úsáid ghníomhach as GRPC, cuimsíonn na comhpháirteanna go léir cur i bhfeidhm foinse oscailte ar fhionnachtain seirbhíse - déanann ár seirbhísí monatóireacht ar fheidhmíocht a chéile, is féidir leo a gcomhdhéanamh a athrú go dinimiciúil, agus nascamar é seo le cothromú GRPC. Maidir le méadracht, úsáidimid réiteach foinse oscailte freisin. Sa eitleán sonraí, fuaireamar feidhmíocht mhaith agus cúlchiste mór acmhainní: tharla sé go raibh sé an-deacair seastán a chur le chéile ar a bhféadfaimis brath ar fheidhmíocht VPP, seachas ar chárta líonra iarainn.

Fadhbanna agus réitigh

Cad nár oibrigh chomh maith sin? Tá bainistíocht cuimhne uathoibríoch ag Go, ach tarlaíonn sceitheadh ​​cuimhne fós. Is é an bealach is éasca chun déileáil leo ná goroutines a reáchtáil agus cuimhnigh iad a fhoirceannadh. Bia beir leat: Breathnaigh ar thomhaltas cuimhne na gclár Go. Is minic gur táscaire maith é líon na ngroutines. Tá buntáiste ag baint leis an scéal seo: in Go tá sé éasca sonraí ama rite a fháil - tomhaltas cuimhne, líon na ngoroutines reatha, agus go leor paraiméadair eile.

Chomh maith leis sin, b’fhéidir nach é Go an rogha is fearr le haghaidh tástálacha feidhmiúla. Tá siad briathra go leor, agus níl an cur chuige caighdeánach “gach rud in CI a rith i mbaisc” an-oiriúnach dóibh. Is é fírinne an scéil go bhfuil níos mó éileamh ó thaobh acmhainní de ag baint le tástálacha feidhmiúla agus go mbíonn siad ina gcúis le tréimhsí ama fíor. Mar gheall air seo, seans go dteipfidh ar thástálacha toisc go bhfuil an LAP gnóthach le tástálacha aonaid. Conclúid: Más féidir, déan tástálacha “troma” ar leithligh ó thástálacha aonaid. 

Tá ailtireacht imeachtaí microservice níos casta ná monolith: níl sé an-áisiúil logaí a bhailiú ar an iliomad meaisíní éagsúla. Conclúid: má dhéanann tú micreasheirbhísí, smaoinigh láithreach ar rianú.

Ár bpleananna

Seolfaimid cothromóir inmheánach, cothromóir IPv6, cuirfimid tacaíocht le haghaidh scripteanna Kubernetes, leanfaimid orainn ag déanamh ár gcuid seirbhísí (faoi láthair níl ach nód seiceáil sláinte agus seiceáil sláinte-ctrl bearrtha), cuir seiceálacha sláinte nua leis, agus cuirfimid comhiomlánú cliste seiceálacha i bhfeidhm freisin. Táimid ag smaoineamh ar an bhféidearthacht ár seirbhísí a dhéanamh níos neamhspleáiche fós - ionas nach ndéanfaidh siad cumarsáid dhíreach lena chéile, ach úsáid a bhaint as scuaine teachtaireachtaí. Tá seirbhís atá comhoiriúnach le SQS le feiceáil sa Cloud le déanaí Yandex scuaine teachtaireachtaí.

Le déanaí, scaoileadh Yandex Load Balancer go poiblí. Déan iniúchadh doiciméadú leis an tseirbhís, bainistigh cothromóirí ar bhealach atá áisiúil duit agus cuir le lamháltas locht do thionscadail!

Foinse: will.com

Add a comment