Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud
Kia ora, ko Sergey Elantsev ahau, ka whakawhanake ahau taurite kawenga whatunga i Yandex.Cloud. I mua, i arahina e ahau te whanaketanga o te L7 pauna mo te tomokanga Yandex - ko nga hoa mahi he kata ahakoa he aha taku mahi, ka puta ko te toenga. Ka korero ahau ki nga kaipanui a Habr me pehea te whakahaere i nga kawenga i roto i te papaahi kapua, he aha ta matou e kite ana ko te taputapu pai mo te whakatutuki i tenei whaainga, me te pehea e neke atu ai matou ki te hanga i tenei taputapu.

Tuatahi, me whakauru etahi kupu:

  • VIP (IP Virtual) - wāhitau IP taurite
  • Tūmau, tuara, tauira - he mihini mariko e whakahaere ana i tetahi tono
  • RIP (Real IP) - wāhitau IP tūmau
  • Healthcheck - te tirotiro i te reri o te tūmau
  • Rohe Wātea, AZ - hanganga taratahi i roto i te pokapū raraunga
  • Rohe - he uniana o nga AZ rereke

E toru nga mahi matua e whakaotihia ana e nga kaitaurite: ka mahia e ratou te whakataurite i a ia ano, ka whakapai ake i te he o te ratonga, me te whakangawari i tana whakataurite. Ka whakamanahia te hee ma te whakahaere waka aunoa: ka aro turukihia e te kaitaurite te ahua o te tono me te kore e uru ki te whakataurite i nga waa kaore e eke ki te tirotiro oranga. Ka whakatauhia te tauine ma te tohatoha i nga kawenga puta noa i nga waahi, me te whakahou i te rarangi o nga waa i runga i te rere. Mena kaore i te rite te pauna, ka whiwhi etahi o nga keehi ka nui ake i to raatau kaha, ka iti ake te pono o te ratonga.

He maha nga wa ka whakarōpūhia te taurite kawenga e te paparanga kawa mai i te tauira OSI e rere ana. Ko te Cloud Balancer e mahi ana i te taumata TCP, e rite ana ki te paparanga tuawha, L4.

Me neke atu ki te tirohanga whanui mo te hoahoanga taurite Kapua. Ka piki haere te taumata o nga korero. Ka wehewehea e matou nga waahanga pauna kia toru nga waahanga. Ko te karaehe rererangi whirihora te kawenga mo te taunekeneke a te kaiwhakamahi me te penapena i te ahuatanga o te punaha. Ko te waka rererangi e pupuri ana i te ahuatanga o naianei o te punaha me te whakahaere i nga punaha mai i te karaehe rererangi raraunga, he kawenga tika mo te tuku waka mai i nga kaihoko ki o waahi.

rererangi Raraunga

Ka mutu nga waka ki runga i nga taputapu utu nui e kiia ana ko nga pouara rohe. Hei whakanui ake i nga hapa, he maha nga taputapu e mahi ana i te wa kotahi i roto i te pokapū raraunga kotahi. I muri mai, ka haere nga waka ki nga taurite, e panui ana nga wahitau IP ki nga AZ katoa ma te BGP mo nga kaihoko. 

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ka tukuna nga waka ki runga i te ECMP - he rautaki ararere tenei e ai ki te maha o nga huarahi pai ki te whainga (i roto i ta maatau, ko te whainga ko te wahitau IP whainga) ka taea te tuku i nga paatete ki runga i tetahi o enei. Ka tautoko hoki matou i nga mahi i roto i nga waahi maha e waatea ana i runga i te kaupapa e whai ake nei: ka panui matou i tetahi wahitau i ia rohe, ka haere nga waka ki te waahi tata, kaore e neke atu i ona rohe. I muri mai i roto i te panui ka tirohia e tatou nga korero mo nga mea e pa ana ki nga waka.

rererangi whirihora

 
Ko te waahanga matua o te rererangi whirihora ko te API, na reira ka mahia nga mahi taketake me nga taurite: te hanga, te whakakore, te whakarereke i te hanganga o nga tauira, te whiwhi i nga hua tirotiro hauora, me era atu. I tetahi taha, he REST API tenei, a Ko etahi atu, ko matou i roto i te Kapua te whakamahi i te gRPC anga, no reira ka "whakamaori" matou i te REST ki te gRPC ka whakamahi i te gRPC anake. Ko nga tono ka arahi ki te hanga i te raupapa o nga mahi idempotent tukutahi ka mahia i runga i te puna wai noa o nga kaimahi Yandex.Cloud. Ka tuhia nga mahi kia taea ai te whakatarewa i nga wa katoa ka timata ano. Ma tenei ka whakarite te tauineine, te tukurua me te takiuru o nga mahi.

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ko te mutunga, ko te mahi mai i te API ka tono tono ki te kaiwhakahaere ratonga pauna, kua tuhia ki te Haere. Ka taea e ia te taapiri me te tango i nga pauna, te whakarereke i te hanganga o nga tuara me nga tautuhinga. 

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ka penapenahia e te ratonga tona ahuatanga i roto i te Yandex Database, he putunga korero kua tohatohahia ka taea e koe te whakamahi. I roto i te Yandex.Cloud, pera i a maatau ka korerotia, ko te ariā kai kuri e pa ana: ki te whakamahia e matou a matou ratonga, ka koa o taatau kaihoko ki te whakamahi. Ko Yandex Database he tauira mo te whakatinanatanga o taua kaupapa. Ka penapenahia e matou o matou raraunga katoa i roto i te YDB, a kaore matou e whai whakaaro ki te pupuri me te whakarahi i te papaarangi: kua whakatauhia enei raruraru mo matou, ka whakamahia e matou te papaarangi hei ratonga.

Kia hoki ki te kaiwhakahaere taurite. Ko tana mahi he tiaki i nga korero mo te taurite me te tuku mahi ki te tirotiro i te reri o te miihini mariko ki te kaiwhakahaere hauora.

Kaiwhakahaere Tirohanga Hauora

Ka whiwhi tono ki te whakarereke i nga ture taki, ka tiakina ki te YDB, ka tohatoha i nga mahi ki waenga i nga waahanga healtcheck me te whakahiato i nga hua, ka tiakina ki te paataka raraunga ka tukuna ki te kaiwhakahaere utauta. Ka tukuna e ia he tono ki te whakarereke i te hanganga o te kohinga i roto i te rererangi raraunga ki te loadbalancer-node, ka korerohia e ahau i raro nei.

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Me korero ake mo nga tirotiro hauora. Ka taea te wehewehe ki etahi akomanga. He rereke nga paearu angitu a nga kaute. Ko nga arowhai TCP me whakatu he hononga i roto i te wa roa. Ko nga arowhai HTTP me whai hononga angitu me te whakautu me te waehere mana 200.

Ano, he rereke nga arowhai i roto i te karaehe mahi - he kaha, he wahangu. Ka aro turuki noa nga arowhai i nga mea e pa ana ki nga waka me te kore e mahi motuhake. Kaore e tino pai ana tenei ki runga i te L4 na te mea kei runga i te arorau o nga kawa taumata teitei: i runga i te L4 kaore he korero mo te roa o te mahi, he pai, he kino ranei te otinga hononga. Ko nga arowhai kaha e hiahia ana te kaitaurite ki te tuku tono ki ia tauira tūmau.

Ko te nuinga o nga kaitaurite kawenga e mahi ana i nga arowhai oranga. I Cloud, i whakatau matou ki te wehe i enei waahanga o te punaha ki te whakanui ake i te tauineine. Ma tenei huarahi ka taea e maatau te whakanui ake i te maha o nga kaiwawao me te pupuri tonu i te maha o nga tono tirotiro hauora ki te ratonga. Ko nga arowhai ka mahia e nga waahanga tirotiro hauora motuhake, ka tohatohahia nga whaainga tirotiro me te taapiri. Kaore e taea e koe te tirotiro mai i tetahi kaihautu, na te mea ka taka. Na ka kore matou e whiwhi i te ahua o nga ahuatanga i tirohia e ia. Ka tirotirohia e matou tetahi o nga waahi mai i te toru neke atu i nga waahanga tirotiro hauora. Ka tohatohahia e matou nga kaupapa o nga arowhai i waenga i nga pona ma te whakamahi i nga huringa hashing rite tonu.

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ko te wehe i te pauna me te tirotiro hauora ka raru pea. Mēnā ka tono tono te kōpuku hauora ki te tauira, ka hipa i te taurite (kare i te mahi waka i tenei wa), ka puta ake he ahuatanga ke: kei te ora tonu te rauemi, engari karekau te waka e tae atu. Ka whakatauhia e matou tenei raru: ka whakamanahia matou ki te timata i nga hokohoko tirotiro hauora ma nga kaitaurite. Arā, ko te kaupapa mo te neke i nga putea me nga waka mai i nga kaihoko me nga tirotiro hauora he rereke te iti: i nga keehi e rua, ka tae atu nga paakete ki nga taurite, ka tukuna atu ki nga rauemi kua tohua.

Ko te rereketanga ko nga kaihoko ka tono tono ki te VIP, ko nga tirotiro hauora e tono tono ana ki ia RIP takitahi. Ka puta mai he raruraru pai i konei: ka hoatu e matou ki a matou kaiwhakamahi te whai waahi ki te hanga rauemi i roto i nga whatunga IP hina. Whakaarohia e rua nga rangatira kapua rereke i huna i a raatau ratonga ki muri i nga kaipatu. He rauemi kei ia o ratou kei te kupenga-roto 10.0.0.1/24, he rite tonu nga wahitau. Me kaha koe ki te wehewehe i a raatau, i konei me ruku koe ki te hanganga o te whatunga mariko Yandex.Cloud. He pai ake te rapu i etahi atu korero i roto ataata mai i: kaupapa kapua, he mea nui ki a tatou inaianei ko te whatunga he paparanga-maha, he tunnels ka taea te wehewehe e te id-roto.

Ka whakapā atu nga pona Healthcheck ki nga kaiwhakarite ma te whakamahi i nga wahitau quasi-IPv6 e kiia nei. Ko te wahitau quasi he wahitau IPv6 me tetahi wahitau IPv4 me te id ipurangiroto kaiwhakamahi kua mau ki roto. Ka tae atu te waka ki te taurite, ka tango i te wahitau rauemi IPv4 mai i a ia, ka whakakapi i te IPv6 me te IPv4 ka tukuna te pākete ki te whatunga o te kaiwhakamahi.

He rite tonu te haere o nga waka whakamuri: ka kite te taurite he whatunga hina te haerenga mai i nga kaitirotiro hauora, ka huri te IPv4 ki te IPv6.

VPP - te ngakau o te rererangi raraunga

Ka whakatinanahia te taurite ma te hangarau Vector Packet Processing (VPP), he anga mai i Cisco mo te tukatuka puranga o te hokohoko whatunga. I a maatau, ka mahi te anga ki runga ake o te whare pukapuka whakahaere taputapu whatunga mokowā-kaiwhakamahi - Kete Whakawhanake Mahere Raraunga (DPDK). Ma tenei ka whakarite i te mahi tukatuka paatete teitei: he iti ake nga haukoti ka puta ki te pata, karekau he huringa horopaki i waenga i te mokowā kernel me te mokowā kaiwhakamahi. 

Ka haere tonu a VPP me te kopiri atu i nga mahi mai i te punaha ma te whakakotahi i nga kohinga ki roto i nga puranga. Ko nga hua o nga mahi ka puta mai i te kaha o te whakamahi keteroki i runga i nga tukatuka hou. Ka whakamahia nga keteroki raraunga e rua (ka tukatukahia nga paatete i roto i nga "vectors", e tata ana nga raraunga ki a ratau) me nga keteroki tohutohu: i roto i te VPP, ka whai te tukatuka packet i te kauwhata, kei roto i nga waahanga nga mahi e mahi ana i te mahi kotahi.

Hei tauira, ko te tukatuka o nga paatete IP i roto i te VPP ka puta i roto i te raupapa e whai ake nei: tuatahi, ko nga pane pane i roto i te kohanga parsing, katahi ka tukuna atu ki te node, ka tukuna atu nga paanui i runga i nga ripanga ararere.

He iti pakeke. Ko nga kaituhi o te VPP e kore e aro ki nga taupatupatu i roto i te whakamahi i nga keteroki tukatuka, na reira ko te waehere angamaheni mo te tukatuka i te vector o nga paatete kei roto i te vectorization a-ringa: kei reira he kopae tukatuka kei roto i nga ahuatanga penei "e wha nga paatete kei roto i te rarangi" ka tukatukahia, ka pera ano mo te tokorua, katahi - mo te kotahi. He maha nga wa ka whakamahia nga tohutohu tango mai ki te uta i nga raraunga ki roto i nga keteroki kia tere ake ai te uru atu ki a raatau i nga waahanga o muri.

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);
}

Na, ka korero a Healthchecks mo IPv6 ki te VPP, ka huri hei IPv4. Ka mahia tenei e tetahi node o te kauwhata, e kiia nei ko NAT algorithmic. Mo nga waka whakamuri (me te huri mai i te IPv6 ki te IPv4) he rite tonu te node NAT algorithmic.

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ko nga hokohoko tika mai i nga kaihoko taurite ka haere i roto i nga waahanga kauwhata, e mahi ana i te whakataurite. 

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ko te pona tuatahi he waahi piri. Pupuri ana i te hash o 5-tupere mo nga huihuinga kua whakaritea. Kei roto i te 5-tuple te wahitau me te tauranga o te kiritaki i tukuna mai ai nga korero, te wahitau me nga tauranga rauemi e waatea ana mo te whiwhi waka, me te kawa whatunga. 

Ko te 5-tuple hash ka awhina i a maatau ki te iti ake te mahi i roto i te node hashing rite tonu, me te pai ake o te hapai i nga huringa rarangi rauemi kei muri i te taurite. Ina tae mai he putea kaore he huihuinga ki te taurite, ka tukuna ki te node hashing rite tonu. I konei ka puta te whakataurite ma te whakamahi hashing rite tonu: ka tohua he rauemi mai i te rarangi o nga rauemi "ora" e waatea ana. Whai muri, ka tukuna nga paakete ki te NAT node, ka whakakapi i te wahitau ūnga me te tatau ano i nga kaute. Ka taea e koe te kite, ka whai matou i nga ture o te VPP - he rite ki te pai, whakarōpū i nga tatauranga rite ki te whakanui ake i te pai o nga keteroki tukatuka.

Hashing riterite

He aha tatou i whiriwhiri ai me te aha? Tuatahi, me whakaaro tatou ki te mahi o mua - te kowhiri i tetahi rauemi mai i te rarangi. 

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ki te hashing maiorooro, ka tatauhia te hash o te kete taumai, ka kowhiria he rauemi mai i te rarangi ma te toenga o te wehewehe i tenei hash ki te maha o nga rauemi. I te mea ka noho tonu te rarangi karekau e rerekee, ka pai te mahi o tenei kaupapa: ka tukuna e matou nga paakete me te 5-tuple kotahi ki te tauira ano. Mena, hei tauira, ka mutu etahi rauemi ki te aro atu ki nga arowhai hauora, katahi ka huri te whiringa mo tetahi waahanga nui o nga haki. Ka pakaru nga hononga TCP a te kiritaki: ka timata pea te paatete i tae atu ki te tauira A ki te tauira B, kaore i te mohio ki te waahi mo tenei kete.

Ko te hashing rite tonu te whakaoti rapanga kua whakaahuatia. Ko te huarahi ngawari ki te whakamarama i tenei ariā ko tenei: whakaarohia he mowhiti kei a koe ka tohatoha rauemi ma te hash (hei tauira, na IP:port). Ko te whiriwhiri i tetahi rauemi ko te huri i te wira ma te koki, ka whakatauhia e te hash o te paatete.

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

Ka whakaitihia te tohatoha waka ina huri te hanganga o nga rauemi. Ko te whakakore i tetahi rauemi ka pa ki te waahanga o te mowhiti hashing rite tonu i noho ai te rauemi. Ko te taapiri i tetahi rauemi ka whakarereke i te tohatoha, engari kei a matou he node sessions piri, kia kore ai matou e huri i nga waahi kua oti te whakarite ki nga rauemi hou.

I titiro matou ki nga mea e pa ana ki te whakahaere i nga waka i waenga i te taurite me nga rauemi. Inaianei ka titiro tatou ki nga waka hokinga mai. He rite tonu te tauira ki te tirotiro hokohoko - na roto i te NAT algorithmic, ara, na roto i te NAT 44 whakamuri mo te hokohoko a te kiritaki me te NAT 46 mo te hokohoko hauora. E u ana matou ki ta matou ake kaupapa: ka whakakotahi matou i nga waka tirotiro hauora me nga waka kaiwhakamahi tuturu.

Loadbalancer-node me nga waahanga kua huihuia

Ko te hanganga o nga pauna me nga rauemi i roto i te VPP e whakaatuhia ana e te ratonga rohe - loadbalancer-node. Ka ohauru ia ki te awa o nga huihuinga mai i te kaiwhakahaere-loadbalancer ka taea e ia te tarai i te rereketanga i waenga i te ahua VPP o naianei me te ahuatanga i whakawhiwhia mai i te kaiwhakahaere. Ka whiwhi tatou i te punaha kati: ka tae mai nga huihuinga mai i te API ki te kaiwhakahaere taurite, ka whakawhiwhia nga mahi ki te kaiwhakahaere hauora ki te tirotiro i te "ora" o nga rauemi. Ma tera, ka tautapa nga mahi ki te pona-hauora me te whakahiato i nga hua, muri iho ka whakahokia ki te kaiwhakahaere taurite. Ko te Loadbalancer-node ka ohauru ki nga huihuinga mai i te kaiwhakahaere me te whakarereke i te ahua o te VPP. I roto i taua punaha, ko ia ratonga anake te mohio ki nga mea e tika ana mo nga ratonga tata. He iti te maha o nga hononga, a kei a matou te kaha ki te whakahaere me te whakatau i nga waahanga rereke.

Te hoahoanga o te taurite kawenga whatunga i Yandex.Cloud

He aha nga take i karohia?

Ko o maatau ratonga katoa i roto i te waka rererangi kua tuhia ki te Haere me te pai o te whakatauine me nga ahuatanga pono. He maha nga whare pukapuka puna tuwhera a Go mo te hanga i nga punaha toha. He kaha taatau ki te whakamahi i te GRPC, kei roto i nga waahanga katoa he punaha tuwhera mo te kitenga ratonga - ka aro turuki a maatau ratonga i nga mahi a tetahi, ka taea te whakarereke i o raatau hanganga, a ka honoa e matou ki te pauna GRPC. Mo nga inenga, ka whakamahia ano e matou he otinga puna tuwhera. I roto i te rererangi raraunga, he pai te mahi me te rahui rauemi nui: he tino uaua ki te whakaemi i tetahi tuunga ka taea e matou te whakawhirinaki ki te mahi a te VPP, kaua ki te kaari whatunga rino.

Nga raruraru me nga otinga

He aha te mea kaore i tino pai? Kei a Go te whakahaere mahara aunoa, engari kei te tupu tonu nga pakaru mahara. Ko te huarahi ngawari ki te mahi ki a raatau ko te whakahaere goroutine me te mahara ki te whakamutu. Tangohia: Kia mataara i te paunga mahara o to kaupapa Haere. I te nuinga o nga wa ko te tohu pai ko te maha o nga goroutine. He taapiri kei roto i tenei korero: i roto i te Haere he ngawari ki te tiki raraunga wa whakahaere - te whakapau mahara, te maha o nga goroutine e rere ana, me te maha atu o nga tawhā.

Ano, kaore pea a Go te mea pai rawa atu mo nga whakamatautau mahi. He tino korero ratou, a ko te huarahi paerewa o te "whakahaere i nga mea katoa i roto i te CI i roto i te puranga" kaore e tino pai mo ratou. Ko te meka ko nga whakamatautau mahi he nui ake te tono-rauemi ka puta he wa mooni. Na tenei, ka rahua pea nga whakamatautau na te mea kei te pukumahi te PTM ki nga whakamatautau wae. Whakamutunga: Mena ka taea, mahia nga whakamatautau "taimaha" motuhake mai i nga whakamatautau wae. 

He uaua ake te hoahoanga huihuinga Microservice i te monolith: ko te kohi rakau i runga i nga tini miihini rereke kaore i te tino watea. Whakamutunga: ki te mahi koe i nga microservices, whakaaro tonu mo te whaiwhai.

Ko o maatau mahere

Ka whakarewahia e matou he taurite o-roto, he taurite IPv6, he taapiri tautoko mo nga tuhinga Kubernetes, ka tohatoha tonu i a maatau ratonga (i tenei wa ko te healthcheck-node me te healthcheck-ctrl anake kua pakaruhia), ka taapirihia nga tirotiro hauora hou, me te whakatinana i te whakahiatotanga atamai o nga arowhai. Kei te whai whakaaro matou ki te kaha ake o taatau ratonga kia motuhake ake - kia kaua e korero tika ki a raatau ano, engari ma te whakamahi i te rarangi karere. Kua puta mai he ratonga hototahi-SQS ki te Kapua Tūtira Karere Yandex.

I tata nei, ka puta te whakaputanga a te iwi mo Yandex Load Balancer. Torotoro tuhinga ki te ratonga, whakahaere toenga i runga i te huarahi watea mo koe me te whakanui ake i te he o to kaupapa!

Source: will.com

Tāpiri i te kōrero