ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud
Aloha ʻoe, ʻo wau ʻo Sergey Elantsev, hoʻomohala wau mea hoʻonui ukana pūnaewele ma Yandex.Cloud. Ma mua, ua alakaʻi au i ka hoʻomohala ʻana o ka mea kaulike L7 no ka puka makani Yandex - hoʻohenehene nā hoa hana ʻaʻohe mea aʻu e hana ai, ua lilo ia i mea kaulike. E haʻi aku wau i ka poʻe heluhelu Habr pehea e hoʻokele ai i ka ukana ma kahi kapuaʻi kapuaʻi, ka mea a mākou e ʻike ai he mea hana kūpono no ka hoʻokō ʻana i kēia pahuhopu, a pehea mākou e neʻe nei i ke kūkulu ʻana i kēia mea hana.

ʻO ka mea mua, e hoʻokomo i kekahi mau huaʻōlelo:

  • VIP (Virtual IP) - helu helu IP kaulike
  • Server, backend, instance - he mīkini virtual e holo ana i kahi noi
  • RIP (IP maoli) - ka helu IP kikowaena
  • Healthcheck - nānā i ka mākaukau o ke kikowaena
  • Wahi Loaʻa, AZ - kaʻawale kaʻawale i kahi kikowaena ʻikepili
  • Māhele - kahi hui o nā AZ like ʻole

Hoʻoponopono nā mea kaulike hoʻouka i ʻekolu mau hana nui: hana lākou i ke kaupaona ʻana iā ia iho, hoʻomaikaʻi i ka hoʻomanawanui hewa o ka lawelawe, a hoʻomaʻamaʻa i kāna hoʻonui. Hoʻopaʻa ʻia ka hoʻomanawanui hewa ma o ka hoʻokele kaʻa kaʻa: nānā ka mea kaulike i ke kūlana o ka noi a kāpae ʻia mai nā manawa kaulike ʻaʻole i hala i ka nānā ola. Hoʻopaʻa ʻia ka hoʻonui ʻia ʻana ma o ka puʻunaue like ʻana i ka ukana ma nā hihia, a me ka hoʻonui ʻana i ka papa inoa o nā manawa ma ka lele. Inā ʻaʻole lawa ka hoʻohālikelike ʻana, e loaʻa i kekahi o nā manawa i kahi haʻahaʻa i ʻoi aku ma mua o ko lākou palena palena, a e emi iho ka hilinaʻi o ka lawelawe.

Hoʻokaʻawale pinepine ʻia kahi mea kaulike ukana e ka papa protocol mai ke kumu hoʻohālike OSI kahi e holo ai. Hoʻohana ka Cloud Balancer ma ka pae TCP, e pili ana i ka papa ʻehā, L4.

E neʻe kākou i kahi ʻike nui o ka hoʻolālā ʻana o Cloud balancer. E hoʻonui mālie mākou i ka pae o nā kikoʻī. Māhele mākou i nā mea kaulike i ʻekolu papa. ʻO ka papa mokulele config ke kuleana no ka launa pū ʻana o ka mea hoʻohana a mālama i ke kūlana i manaʻo ʻia o ka ʻōnaehana. Mālama ka mokulele hoʻokele i ke kūlana o kēia manawa o ka ʻōnaehana a mālama i nā ʻōnaehana mai ka papa mokulele data, nona ke kuleana no ka lawe ʻana i nā kaʻa mai nā mea kūʻai aku i kāu mau manawa.

mokulele ʻikepili

Hoʻopau ke kaʻa i nā mea waiwai i kapa ʻia ʻo border routers. No ka hoʻonui ʻana i ka hoʻomanawanui hewa, e hana like kekahi mau mea like i ka manawa hoʻokahi i hoʻokahi kikowaena data. A laila, hele ka huakaʻi i nā mea kaulike, e hoʻolaha ana i nā leka uila IP i nā AZ āpau ma o BGP no nā mea kūʻai aku. 

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

Hoʻouna ʻia ke kaʻa ma luna o ECMP - he hoʻolālā ala kēia e like me ka nui o nā ala maikaʻi e hiki ai i ka pahuhopu (i kā mākou hihia, ʻo ka pahuhopu ka IP address e hele ai) a hiki ke hoʻouna ʻia nā ʻeke ma kekahi o lākou. Kākoʻo pū mākou i ka hana ma nā wahi e loaʻa ai e like me ka papahana aʻe: hoʻolaha mākou i kahi helu i kēlā me kēia wahi, hele ka huakaʻi i kahi kokoke loa a ʻaʻole hele ma mua o kona mau palena. Ma hope o ka pou, e nānā mākou i nā kikoʻī hou aku i ka mea e hiki mai ana i ke kaʻa.

mokulele hoʻonohonoho

 
ʻO ka mea nui o ka mokulele config ʻo ia ka API, kahi e hana ʻia ai nā hana maʻamau me nā mea kaulike: hana, hoʻopau, hoʻololi i ke ʻano o nā manawa, loaʻa nā hopena healthchecks, etc. Ma kekahi ʻaoʻao, he REST API kēia, a ma ka 'ē aʻe, hoʻohana pinepine mākou i ke ao i ka framework gRPC, no laila mākou "unuhi" REST i gRPC a laila hoʻohana wale i ka gRPC. Ke alakaʻi nei kēlā me kēia noi i ka hana ʻana o nā hana idempotent asynchronous i hoʻokō ʻia ma kahi wai maʻamau o nā limahana Yandex.Cloud. Ua kākau ʻia nā hana i hiki ke hoʻokuʻu ʻia i kēlā me kēia manawa a laila hoʻomaka hou. Mālama kēia i ka scalability, repeatability a me ka logging o nā hana.

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

ʻO ka hopena, e noi ka hana mai ka API i ka mea hoʻoponopono lawelawe kaulike, i kākau ʻia ma Go. Hiki iā ia ke hoʻohui a wehe i nā mea kaulike, hoʻololi i ke ʻano o nā backends a me nā hoʻonohonoho. 

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

Mālama ka lawelawe i kona moku'āina ma Yandex Database, kahi waihona i mālama ʻia e hiki koke iā ʻoe ke hoʻohana. Ma Yandex.Cloud, e like me mākou haʻiʻia, pili ka manaʻo meaʻai ʻīlio: inā mākou iho e hoʻohana i kā mākou lawelawe, a laila hauʻoli pū kā mākou mea kūʻai aku e hoʻohana iā lākou. ʻO Yandex Database kahi laʻana o ka hoʻokō ʻana o ia manaʻo. Hoʻopaʻa mākou i kā mākou ʻikepili a pau ma YDB, a ʻaʻole pono mākou e noʻonoʻo e pili ana i ka mālama ʻana a me ka hoʻonui ʻana i ka waihona: ua hoʻoponopono ʻia kēia mau pilikia no mākou, hoʻohana mākou i ka waihona ma ke ʻano he lawelawe.

E hoʻi kāua i ka mea hoʻoponopono kaulike. ʻO kāna hana ka mālama ʻana i ka ʻike e pili ana i ka mea kaulike a hoʻouna i kahi hana e nānā i ka mākaukau o ka mīkini virtual i ka mea mālama olakino.

Hoʻoponopono Healthcheck

Loaʻa iā ia nā noi e hoʻololi i nā lula nānā, mālama iā lākou ma YDB, puʻunaue i nā hana ma waena o nā nodes healtcheck a hōʻuluʻulu i nā hopena, a laila mālama ʻia i ka waihona a hoʻouna ʻia i ka luna loadbalancer. Hoʻouna ʻo ia i kahi noi e hoʻololi i ke ʻano o ka hui i ka mokulele data i ka loadbalancer-node, aʻu e kūkākūkā ai ma lalo nei.

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

E kamaʻilio hou aʻe e pili ana i nā loiloi olakino. Hiki ke mahele ia lakou i mau papa. He ʻokoʻa ko nā loiloi holomua. Pono nā loiloi TCP e hoʻokumu i kahi pilina i loko o kahi manawa paʻa. Pono nā mākaʻikaʻi HTTP i kahi pilina kūleʻa a me kahi pane me kahi code status 200.

Eia kekahi, ʻokoʻa nā loiloi i ka papa o ka hana - he ikaika a passive. Nānā wale nā ​​mākaʻikaʻi passive i nā mea e hana nei me ke kaʻa me ka ʻole o ka hana kūikawā. ʻAʻole hana maikaʻi kēia ma L4 no ka mea e hilinaʻi ana ia i ka loiloi o nā protocols kiʻekiʻe: ma L4 ʻaʻohe ʻike e pili ana i ka lōʻihi o ka hana ʻana a i ʻole he maikaʻi a maikaʻi ʻole ka hoʻopau ʻana. Pono ka mea kaulike e hoʻouna i nā noi i kēlā me kēia kikowaena kikowaena.

ʻO ka hapa nui o ka load balancers e hana i ka nānā ola iā lākou iho. Ma Cloud, ua hoʻoholo mākou e hoʻokaʻawale i kēia mau ʻāpana o ka ʻōnaehana e hoʻonui i ka scalability. ʻO kēia ala e hiki ai iā mākou ke hoʻonui i ka helu o nā mea kaulike me ka mālama ʻana i ka helu o nā noi healthcheck i ka lawelawe. Hana ʻia nā hōʻoia e nā node healthcheck ʻokoʻa, kahi e hoʻokaʻawale ʻia a hoʻopili ʻia nā pahuhopu nānā. ʻAʻole hiki iā ʻoe ke hana i nā loiloi mai hoʻokahi host, no ka mea hiki ʻole. A laila ʻaʻole e loaʻa iā mākou ke kūlana o nā hihia āna i nānā ai. Hana mākou i nā hōʻoia i kekahi o nā manawa mai ʻekolu aʻe o nā node healthcheck. Hoʻopili mākou i nā kumu o ka nānā ʻana ma waena o nā nodes me ka hoʻohana ʻana i nā algorithm hashing mau.

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

ʻO ka hoʻokaʻawale ʻana i ke kaulike a me ka nānā olakino hiki ke alakaʻi i nā pilikia. Inā noi ka node healthcheck i ka laʻana, me ka ʻalo ʻana i ka mea kaulike (ʻaʻole ia e lawelawe nei i nā kaʻa i kēia manawa), a laila e kū mai kahi ʻano ʻano ʻē: ola ke kumu waiwai, akā ʻaʻole hiki ke hele i laila. Hoʻoponopono mākou i kēia pilikia ma kēia ala: ua hōʻoia ʻia mākou e hoʻomaka i ka hele ʻana o ka healthcheck ma o nā mea kaulike. I nā huaʻōlelo ʻē aʻe, ʻokoʻa liʻiliʻi ka hoʻolālā no ka neʻe ʻana i nā ʻeke me nā kaʻa mai nā mea kūʻai aku a mai nā healthchecks: ma nā hihia ʻelua, e hōʻea nā ʻeke i nā mea kaulike, e hāʻawi iā lākou i nā kumu waiwai.

ʻO ka ʻokoʻa ke noi aku nā mea kūʻai aku iā VIP, aʻo nā healthchecks e noi i kēlā me kēia RIP. Aia kekahi pilikia hoihoi ma ʻaneʻi: hāʻawi mākou i kā mākou mea hoʻohana i ka manawa e hana ai i nā kumuwaiwai ma nā pūnaewele IP hina. E noʻonoʻo kākou aia ʻelua mau mea nona ke ao i hūnā i kā lākou lawelawe ma hope o nā mea kaulike. Loaʻa i kēlā me kēia o lākou nā kumuwaiwai ma ka subnet 10.0.0.1/24, me nā helu helu like. Pono ʻoe e hiki ke hoʻokaʻawale iā lākou, a ma ʻaneʻi e pono ʻoe e luʻu i ke ʻano o ka pūnaewele virtual Yandex.Cloud. ʻOi aku ka maikaʻi e ʻike i nā kikoʻī hou aku ma wikiō mai about: cloud event, he mea nui ia iā mākou i kēia manawa he nui nā ʻāpana o ka pūnaewele a loaʻa nā tunnels i hiki ke ʻike ʻia e ka subnet id.

Hoʻopili nā nodes Healthcheck i nā mea kaulike me ka hoʻohana ʻana i nā helu helu quasi-IPv6. ʻO ka quasi-address he IPv6 address me ka IPv4 address a me ka mea hoʻohana subnet id i hoʻokomo ʻia i loko. Hiki ke kaʻa i ka mea kaulike, ka mea e unuhi i ka helu wahi kumu IPv4 mai ia mea, hoʻololi iā IPv6 me IPv4 a hoʻouna i ka ʻeke i ka pūnaewele o ka mea hoʻohana.

Ke hele like nei ke kaʻa kaʻa hope: ʻike ka mea kaulike he ʻuena hina hina ka huakaʻi mai nā healthcheckers, a hoʻohuli iā IPv4 i IPv6.

VPP - ka puʻuwai o ka mokulele ʻikepili

Hoʻokō ʻia ka mea kaulike me ka ʻenehana Vector Packet Processing (VPP), kahi hoʻolālā mai Cisco no ka hoʻoili ʻana o ka ʻoihana pūnaewele. I kā mākou hihia, hana ka ʻōnaehana ma luna o ka waihona hoʻokele hoʻokele mea hoʻohana-space - Data Plane Development Kit (DPDK). ʻO kēia ka mea e hōʻoiaʻiʻo ai i ka hoʻokō ʻana i ka ʻeke packet kiʻekiʻe: ʻoi aku ka liʻiliʻi o nā keakea i loko o ka kernel, a ʻaʻohe hoʻololi pōʻaiapili ma waena o ka kernel space a me ka mea hoʻohana. 

ʻOi aku ka ʻoi aku o ka VPP a ʻoi aku ka nui o ka hana ma waho o ka ʻōnaehana ma o ka hoʻohui ʻana i nā pūʻolo i nā pūʻulu. Loaʻa ka loaʻa ʻana o ka hana mai ka hoʻohana ikaika ʻana i nā caches ma nā kaʻina hana hou. Hoʻohana ʻia nā waihona ʻikepili ʻelua (ua hana ʻia nā ʻeke ma nā "vectors", kokoke ka ʻikepili i kekahi i kekahi) a me nā cache aʻoaʻo: ma VPP, ka hoʻoili ʻana i ka packet ma hope o ka pakuhi, aia nā nodes i nā hana e hana i ka hana like.

No ka laʻana, ʻo ka hana ʻana o nā ʻeke IP ma VPP e hana ʻia ma ke ʻano penei: ʻo ka mua, ua paʻi ʻia nā poʻomanaʻo packet i loko o ka node parsing, a laila hoʻouna ʻia lākou i ka node, e hoʻouna i mua i nā ʻeke e like me nā papa kuhikuhi.

He wahi paʻakikī. ʻAʻole ʻae ka poʻe kākau o VPP i ka hoʻololi ʻana i ka hoʻohana ʻana i nā cache processor, no laila, ʻo ke code maʻamau no ka hoʻoili ʻana i kahi vector o nā paʻi i loaʻa i ka vectorization manual: aia kahi loop loop kahi e hana ʻia ai kahi kūlana e like me "ʻehā mau ʻeke mākou i ka pila" a laila like no ʻelua, a laila - no hoʻokahi. Hoʻohana pinepine ʻia nā ʻōlelo aʻo prefetch e hoʻouka i ka ʻikepili i loko o nā huna huna e wikiwiki i ke komo ʻana iā lākou i nā ʻike hou aʻe.

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

No laila, kamaʻilio Healthchecks ma IPv6 i ka VPP, e hoʻohuli iā lākou i IPv4. Hana ʻia kēia e kahi node i ka pakuhi, a mākou i kapa ai i ka algorithmic NAT. No ka hoʻohuli ʻana (a me ka hoʻololi ʻana mai IPv6 a i IPv4) aia ka algorithmic NAT node.

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

Hele pololei nā kaʻa mai ka poʻe mea kūʻai kaulike ma nā node pakuhi, e hana ana i ke kaulike ponoʻī. 

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

ʻO ka node mua he mau kau pili. Mālama ia i ka hash o 5-tuple no nā kau i hoʻokumu ʻia. Aia ka 5-tuple i ka helu wahi a me ke awa o ka mea kūʻai mai kahi i hoʻouna ʻia ai ka ʻike, ka helu a me nā awa o nā kumuwaiwai i loaʻa no ka loaʻa ʻana o ke kaʻa, a me ka protocol network. 

Kōkua ka 5-tuple hash iā mākou e hana liʻiliʻi i ka helu hashing ma hope, a me ka hoʻololi ʻana i ka papa inoa kumu waiwai maikaʻi ma hope o ka mea kaulike. I ka hiki ʻana mai o kahi ʻeke ʻaʻohe hālāwai i ka mea kaulike, hoʻouna ʻia ia i ka node hashing mau. ʻO kēia kahi e hana ai ke kaulike me ka hashing mau: koho mākou i kahi kumuwaiwai mai ka papa inoa o nā kumuwaiwai "ola". A laila, hoʻouna ʻia nā ʻeke i ka NAT node, ka mea e hoʻololi maoli i ka helu wahi e hele ai a helu hou i nā checksums. E like me kāu e ʻike ai, hahai mākou i nā lula o VPP - e like me ka makemake, e hui pū i nā helu like e hoʻonui ai i ka pono o nā cache processor.

Hashing mau

No ke aha mākou i koho ai a he aha ia? ʻO ka mea mua, e noʻonoʻo kākou i ka hana mua - ke koho ʻana i kahi kumuwaiwai mai ka papa inoa. 

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

Me ka hashing like ʻole, helu ʻia ka hash o ka ʻeke e hiki mai ana, a koho ʻia kahi kumuwaiwai mai ka papa inoa e ke koena o ka puʻunaue ʻana i kēia hash me ka helu o nā kumuwaiwai. I ka lōʻihi o ka hoʻololi ʻole ʻana o ka papa inoa, hana maikaʻi kēia papahana: hoʻouna mau mākou i nā ʻeke me ka 5-tuple like i ka laʻana like. Inā, no ka laʻana, ua pau kekahi mau kumuwaiwai i ka pane ʻana i nā loiloi olakino, a laila no kahi hapa nui o nā hashes e loli ke koho. E wāwahi ʻia nā pilina TCP o ka mea kūʻai: hiki i kahi ʻeke i hiki mua i ka laʻana A hiki ke hoʻomaka i ka laʻana B, ʻaʻole i kamaʻāina i ke kau no kēia ʻeke.

Hoʻopau ka hashing paʻa i ka pilikia i wehewehe ʻia. ʻO ke ala maʻalahi loa e wehewehe i kēia manaʻo penei: e noʻonoʻo ʻoe he apo āu e hāʻawi ai i nā kumuwaiwai ma ka hash (e laʻa, ma IP:port). ʻO ke koho ʻana i kahi kumuwaiwai ʻo ia ka hoʻohuli ʻana i ka huila ma kahi kihi, i hoʻoholo ʻia e ka hash o ka ʻeke.

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

Hoʻemi kēia i ka hāʻawi hou ʻana i nā kaʻa ke hoʻololi ke ʻano o nā kumuwaiwai. ʻO ka holoi ʻana i kahi kumuwaiwai e hoʻopilikia wale i ka ʻāpana o ke apo hashing mau i loaʻa ai ka punawai. Hoʻololi ka hoʻohui ʻana i kahi kumuwaiwai i ka hāʻawi ʻana, akā loaʻa iā mākou kahi node sessions sticky, e ʻae iā mākou ʻaʻole e hoʻololi i nā kau i hoʻokumu ʻia i nā kumuwaiwai hou.

Ua nānā mākou i ka mea e pili ana i ke kaʻa pololei ma waena o ka mea kaulike a me nā kumuwaiwai. I kēia manawa, e nānā kākou i ke kaʻa hoʻi. Hoʻopili ia i ke ʻano like me ka nānā ʻana - ma o ka algorithmic NAT, ʻo ia hoʻi, ma o ka huli ʻana i ka NAT 44 no ka hele ʻana o nā mea kūʻai aku a ma o NAT 46 no nā mākaʻikaʻi olakino. Hoʻopili mākou i kā mākou hoʻolālā ponoʻī: hoʻohui mākou i nā mākaʻi olakino a me nā mea hoʻohana maoli.

Loadbalancer-node a me nā mea i hui ʻia

Hōʻike ʻia ka hui ʻana o nā mea kaulike a me nā kumuwaiwai ma VPP e ka lawelawe kūloko - loadbalancer-node. Kau inoa ia i ke kahawai o nā hanana mai loadbalancer-controller a hiki iā ia ke hoʻolālā i ka ʻokoʻa ma waena o ka mokuʻāina VPP o kēia manawa a me ka mokuʻāina i loaʻa mai ka mea hoʻoponopono. Loaʻa iā mākou kahi ʻōnaehana paʻa: hele mai nā hanana mai ka API i ka mea hoʻoponopono kaulike, e hāʻawi i nā hana i ka mea mālama olakino e nānā i ka "ola" o nā kumuwaiwai. ʻO ia hoʻi, hāʻawi i nā hana i ka healthcheck-node a hōʻuluʻulu i nā hopena, a laila hoʻihoʻi iā lākou i ka mea hoʻoponopono kaulike. Hoʻopili ʻo Loadbalancer-node i nā hanana mai ka mea hoʻoponopono a hoʻololi i ke kūlana o ka VPP. I loko o ia ʻōnaehana, ʻike kēlā me kēia lawelawe i nā mea e pono ai e pili ana i nā lawelawe pili. Ua kaupalena ʻia ka helu o nā pilina a loaʻa iā mākou ka hiki ke hana a hoʻonui i nā ʻāpana like ʻole.

ʻO ka hoʻolālā ʻana o kahi mea hoʻohālikelike ukana pūnaewele ma Yandex.Cloud

He aha nā pilikia i pale ʻia?

Ua kākau ʻia kā mākou mau lawelawe āpau i ka mokulele hoʻokele ma Go a loaʻa nā hiʻohiʻona scaling maikaʻi a hilinaʻi. Loaʻa iā Go nā hale waihona puke hāmama no ke kūkulu ʻana i nā ʻōnaehana puʻupuʻu. Hoʻohana ikaika mākou i ka GRPC, loaʻa nā ʻāpana āpau i kahi hoʻokō open source o ka ʻike lawelawe - nānā kā mākou lawelawe i ka hana o kēlā me kēia, hiki ke hoʻololi i kā lākou haku mele me ka ikaika, a hoʻopili mākou i kēia me ke kaulike GRPC. No nā metric, hoʻohana pū mākou i kahi hoʻonā kumu wehe. Ma ka mokulele ʻikepili, ua loaʻa iā mākou ka hana kūpono a me kahi waihona waiwai nui: ua lilo ia i mea paʻakikī loa e hōʻuluʻulu i kahi kū i hiki ai iā mākou ke hilinaʻi i ka hana o kahi VPP, ma mua o kahi kāleka pūnaewele hao.

Nā pilikia a me nā hoʻonā

He aha ka mea i hana maikaʻi ʻole? Loaʻa iā Go ka hoʻokele hoʻomanaʻo hoʻomanaʻo maʻalahi, akā mau ka leki hoʻomanaʻo. ʻO ke ala maʻalahi e hana ai me lākou ʻo ka holo ʻana i nā goroutine a hoʻomanaʻo e hoʻopau iā lākou. Lawe ʻia: E nānā i ka hoʻohana hoʻomanaʻo ʻana o kāu mau polokalamu Go. ʻO ka pinepine kahi hōʻailona maikaʻi ka helu o nā goroutine. Aia kekahi mea hoʻohui i kēia moʻolelo: ma Go he maʻalahi ka loaʻa ʻana o ka ʻikepili runtime - hoʻohana hoʻomanaʻo, ka helu o nā goroutine holo, a me nā ʻāpana ʻē aʻe he nui.

Eia kekahi, ʻaʻole ʻo Go ka koho maikaʻi loa no nā hoʻokolohua hana. He ʻōlelo maʻamau lākou, a ʻo ke ala maʻamau o ka "holo i nā mea āpau ma CI i kahi pūʻulu" ʻaʻole kūpono loa iā lākou. ʻO ka ʻoiaʻiʻo, ʻoi aku ka nui o nā hoʻāʻo hana i ka waiwai a ke kumu i ka manawa manawa maoli. Ma muli o kēia, hiki ke hāʻule nā ​​hoʻokolohua no ka mea paʻa ka CPU me nā hoʻokolohua ʻāpana. Panina: Inā hiki, e hana i nā ho'āʻo "kaumaha" ma kahi kaʻawale mai nā hoʻokolohua ʻāpana. 

ʻOi aku ka paʻakikī o ka hanana hanana Microservice ma mua o ka monolith: ʻaʻole maʻalahi ka hōʻiliʻili ʻana i nā lāʻau ma nā mīkini like ʻole. Ka hopena: inā ʻoe e hana i nā microservices, e noʻonoʻo koke e pili ana i ka huli ʻana.

ʻO kā mākou mau hoʻolālā

E hoʻomaka mākou i kahi mea kaulike kūloko, kahi mea kaulike IPv6, hoʻohui i ke kākoʻo no nā palapala Kubernetes, hoʻomau i ka shard i kā mākou lawelawe (i kēia manawa ʻo healthcheck-node a me healthcheck-ctrl wale nō i sharded), hoʻohui i nā hōʻoia olakino hou, a hoʻokō pū i ka hōʻuluʻulu akamai o nā loiloi. Ke noʻonoʻo nei mākou i ka hiki ke hana i kā mākou lawelawe i ʻoi aku ke kūʻokoʻa - i ʻole lākou e kamaʻilio pololei me kekahi, akā me ka hoʻohana ʻana i kahi laina leka. Ua ʻike hou ʻia kahi lawelawe kūpono SQS i ka Cloud ʻO Yandex Message Queue.

I kēia mau lā, ua hoʻokuʻu ʻia ka lehulehu o Yandex Load Balancer. E ʻimi palapala i ka lawelawe, hoʻokele i nā mea kaulike ma kahi ala kūpono iā ʻoe a hoʻonui i ka hoʻomanawanui hewa o kāu mau papahana!

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka