I kekahi manawa ʻoi aku ka liʻiliʻi. I ka ho'ēmiʻana i ka ukana, e hoʻonui i ka latency

E like me ka nui o na pou, aia ka pilikia me kahi lawelawe i hoʻolaha ʻia, e kāhea kākou i kēia lawelawe ʻo Alvin. I kēia manawa ʻaʻole wau i ʻike i ka pilikia iaʻu iho, ua haʻi mai nā kāne mai ka ʻaoʻao o ka mea kūʻai mai iaʻu.

I kekahi lā ua ala au i kahi leka uila hōʻeha ʻole ma muli o ka lōʻihi o ka lohi me Alvin, a mākou i manaʻo ai e hoʻomaka i ka wā e hiki mai ana. Ma ke ʻano kikoʻī, ua ʻike ka mea kūʻai aku i ka 99th percentile latency ma kahi o 50 ms, ʻoi aku ma mua o kā mākou kālā latency. He mea kupanaha kēia i koʻu hoʻāʻo nui ʻana i ka lawelawe, ʻoi aku hoʻi ma ka latency, he hoʻopiʻi maʻamau.

Ma mua o koʻu hoʻokomo ʻana iā Alvin i ka hoʻāʻo ʻana, ua holo au i nā hoʻokolohua he nui me 40k mau nīnau i kēlā me kēia kekona (QPS), e hōʻike ana i ka latency ma lalo o 10ms. Ua mākaukau wau e haʻi aku ʻaʻole wau i ʻae i kā lākou hopena. Akā i ka nānā hou ʻana i ka leka, ʻike wau i kahi mea hou: ʻaʻole wau i hoʻāʻo pono i nā kūlana a lākou i ʻōlelo ai, ʻoi aku ka haʻahaʻa o kā lākou QPS ma mua o kaʻu. Ua hoʻāʻo au ma 40k QPS, akā ma 1k wale nō lākou. Ua holo au i kahi hoʻokolohua ʻē aʻe, i kēia manawa me kahi QPS haʻahaʻa, e hōʻoluʻolu iā lākou.

Ma muli o koʻu blogging e pili ana i kēia, ua ʻike paha ʻoe ua pololei kā lākou helu. Ua ho'āʻo pinepine au i kaʻu mea kūʻai virtual, me ka hopena like:ʻo ka helu haʻahaʻa o nā noiʻaʻole e hoʻonui wale i ka latency, akā e hoʻonui i ka helu o nā noi me ka lōʻihi o ka 10 ms. I nā huaʻōlelo ʻē aʻe, inā ma 40k QPS ma kahi o 50 mau noi i kēlā me kēia kekona ma mua o 50 ms, a laila ma 1k QPS aia nā noi 100 ma luna o 50 ms i kēlā me kēia kekona. Paradox!

I kekahi manawa ʻoi aku ka liʻiliʻi. I ka ho'ēmiʻana i ka ukana, e hoʻonui i ka latency

E hoemi ana i ka huli

Ke kū nei me kahi pilikia latency i loko o kahi ʻōnaehana māhele me nā ʻāpana he nui, ʻo ka hana mua ka hana ʻana i kahi papa inoa pōkole o nā mea kānalua. E ʻeli hohonu aʻe kākou i ka hoʻolālā ʻana o Alvin.

I kekahi manawa ʻoi aku ka liʻiliʻi. I ka ho'ēmiʻana i ka ukana, e hoʻonui i ka latency

ʻO kahi hoʻomaka maikaʻi he papa inoa o nā hoʻololi I/O i hoʻopau ʻia (nā kelepona pūnaewele/nā huli disk, etc.). E hoʻāʻo kākou e ʻike i kahi o ka lohi. Ma waho aʻe o ka I/O maopopo me ka mea kūʻai aku, lawe ʻo Alvin i kahi hana hou: komo ʻo ia i ka hale kūʻai ʻikepili. Eia naʻe, ke hana nei kēia waihona ma ka pūʻulu like me Alvin, no laila e emi iho ka latency ma mua o ka mea kūʻai. No laila, ka papa inoa o nā mea kānalua:

  1. Kāhea pūnaewele mai ka mea kūʻai aku iā Alvin.
  2. Kāhea pūnaewele mai Alvin i ka hale kūʻai ʻikepili.
  3. Huli ma ka diski ma ka hale kūʻai ʻikepili.
  4. Kāhea pūnaewele mai ka waihona ʻikepili iā Alvin.
  5. Kāhea pūnaewele mai Alvin i kahi mea kūʻai.

E ho'āʻo kākou e kāʻei i kekahi mau wahi.

ʻAʻohe mea pili i ka mālama ʻikepili

ʻO ka mea mua aʻu i hana ai ʻo ia ka hoʻololi ʻana iā Alvin i kahi kikowaena ping-ping ʻaʻole e hoʻokō i nā noi. Ke loaʻa iā ia kahi noi, hoʻihoʻi ia i kahi pane ʻole. Inā emi ka latency, a laila ʻaʻohe mea i lohe ʻole ʻia kahi bug i ka Alvin a i ʻole ka hoʻokō hale waihona waiwai. Ma ka hoʻokolohua mua loaʻa iā mākou ka pakuhi penei:

I kekahi manawa ʻoi aku ka liʻiliʻi. I ka ho'ēmiʻana i ka ukana, e hoʻonui i ka latency

E like me kāu e ʻike ai, ʻaʻohe hoʻomaikaʻi i ka wā e hoʻohana ai i ka server ping-ping. ʻO kēia ke kumu ʻaʻole e hoʻonui ka hale waihona ʻikepili i ka latency, a ʻoki ʻia ka papa inoa o nā mea kānalua i ka hapalua:

  1. Kāhea pūnaewele mai ka mea kūʻai aku iā Alvin.
  2. Kāhea pūnaewele mai Alvin i kahi mea kūʻai.

Nui! Ke emi koke nei ka papa inoa. Manaʻo wau ua ʻaneʻane maopopo iaʻu ke kumu.

gRPC

ʻO ka manawa kēia e hoʻolauna iā ʻoe i kahi mea pāʻani hou: gRPC. He hale waihona puke hāmama kēia mai Google no ke kamaʻilio kaʻina hana Ka RPC. ^ E Ha yM. ʻOiai gRPC maikaʻi maikaʻi a hoʻohana nui ʻia, ʻo ia kaʻu manawa mua e hoʻohana ai ia ma kahi ʻōnaehana o kēia nui a manaʻo wau he suboptimal kaʻu hoʻokō - ʻo ka mea liʻiliʻi loa.

loaʻa nui gRPC i loko o ka waihona i hāpai ʻia i kahi nīnau hou: malia paha ʻo kaʻu hoʻokō a ʻo wau paha gRPC pilikia ka latency? Hoʻohui i kahi mea kānalua hou i ka papa inoa:

  1. Kāhea ka mea kūʻai aku i ka waihona gRPC
  2. waihona gRPC hana i kahi kelepona pūnaewele i ka waihona ma ka mea kūʻai gRPC ma ke kikowaena
  3. waihona gRPC hoʻopili iā Alvin (ʻaʻohe hana inā he kikowaena ping-pong)

No ka hāʻawi ʻana iā ʻoe i ka manaʻo o ke ʻano o ke code, ʻaʻole ʻokoʻa ka hoʻokō ʻana o kaʻu mea kūʻai / Alvin mai nā mea kūʻai aku-server. nā laʻana async.

Nānā: He mea maʻalahi ka papa inoa ma luna no ka mea gRPC hiki iā ʻoe ke hoʻohana i kāu iho (template?) hiʻohiʻona threading, kahi i hui pū ʻia ai ka waihona hoʻokō. gRPC a me ka hoʻokō mea hoʻohana. No ka maʻalahi, e hoʻopili mākou i kēia ʻano hoʻohālike.

E hoʻoponopono ʻo Profiling i nā mea a pau

Ma hope o koʻu hele ʻana i waho o nā hale kūʻai ʻikepili, manaʻo wau ua aneane pau wau: "I kēia manawa ua maʻalahi! E hoʻopili i ka ʻaoʻao a ʻike i kahi i hiki mai ai ka lohi. " I makemake nui o ka precision profiling, no ka mea wikiwiki loa nā CPU a ʻaʻole pinepine ka bottleneck. Loaʻa ka hapa nui o nā lohi i ka wā e hoʻōki ai ke kaʻina hana e hana i kekahi mea ʻē aʻe. ʻO ka pololei CPU Profiling e hana i kēlā: hoʻopaʻa pololei i nā mea āpau hoʻololi pōʻaiapili a maopopo i kahi e hiki mai ai ka lohi.

Ua lawe au i ʻehā mau ʻaoʻao: me ka QPS kiʻekiʻe (haʻahaʻa latency) a me kahi kikowaena ping-pong me ka QPS haʻahaʻa (kiʻekiʻe latency), ma ka ʻaoʻao o ka mea kūʻai aku a ma ka ʻaoʻao kikowaena. A i ka hihia, ua lawe pū wau i kahi ʻano hana hoʻohālike. I ka hoʻohālikelike ʻana i nā ʻaoʻao, ʻimi maʻamau wau i kahi puʻu kelepona anomali. No ka laʻana, ma ka ʻaoʻao ʻino me ka latency kiʻekiʻe he nui nā hoʻololi pōʻaiapili (10 mau manawa a ʻoi aku paha). Akā i koʻu hihia, ʻaneʻane like ka helu o nā hoʻololi pōʻaiapili. I koʻu weliweli, ʻaʻohe mea nui ma laila.

Hoʻopiʻi hou aku

Ua pau ko'u manao. ʻAʻole au i ʻike i nā mea hana ʻē aʻe e hiki iaʻu ke hoʻohana, a ʻo kaʻu hoʻolālā hou e hana hou i nā hoʻokolohua me nā ʻokoʻa like ʻole ma mua o ka ʻike maopopo ʻana i ka pilikia.

Pehea inā

Mai ka hoʻomaka ʻana, ua hopohopo wau e pili ana i ka latency 50ms kikoʻī. He manawa nui loa kēia. Ua hoʻoholo wau e ʻoki au i nā ʻāpana mai ke code a hiki iaʻu ke ʻike pono i ka ʻāpana i kumu i kēia hewa. A laila hele mai kahi hoʻokolohua i hana.

E like me ka mea maʻamau, i ka nānā ʻana me he mea lā ua maopopo nā mea a pau. Ua kau au i ka mea kūʻai ma ka mīkini like me Alvin - a hoʻouna aku i kahi noi localhost. A ua hala ka piʻi ʻana o ka latency!

I kekahi manawa ʻoi aku ka liʻiliʻi. I ka ho'ēmiʻana i ka ukana, e hoʻonui i ka latency

Ua hewa kekahi mea i ka pūnaewele.

E aʻo i nā mākau ʻenekinia pūnaewele

Pono wau e ʻae: weliweli koʻu ʻike i nā ʻenehana pūnaewele, ʻoi aku ka noʻonoʻo ʻana i kaʻu hana pū me lākou i kēlā me kēia lā. Akā ʻo ka pūnaewele ka mea i manaʻo nui ʻia, a pono wau e aʻo pehea e hoʻopau ai.

Laki, aloha ka Internet i ka poʻe makemake e aʻo. ʻO ka hui pū ʻana o ka ping a me ka tracert me he mea lā he hoʻomaka maikaʻi no ka hoʻopau ʻana i nā pilikia o ka lawe ʻana i ka pūnaewele.

ʻO ka mea mua, hoʻomaka wau PsPing i ke awa TCP o Alvin. Ua hoʻohana au i nā hoʻonohonoho paʻamau - ʻaʻohe mea kūikawā. ʻOi aku ma mua o hoʻokahi kaukani ping, ʻaʻohe mea i ʻoi aku ma mua o 10 ms, koe wale nō ka mea mua no ka hoʻomehana ʻana. He kū'ē kēia i ka piʻi ʻana o ka latency o 50 ms ma ka 99th percentile: ma laila, no kēlā me kēia 100 noi, pono mākou e ʻike e pili ana i hoʻokahi noi me ka latency o 50 ms.

A laila hoʻāʻo wau paulele: Aia paha ka pilikia ma kekahi o na node ma ke ala ma waena o Alvin a me ka mea kūʻai. Akā, ua hoʻi nele mai ka tracer.

No laila, ʻaʻole kaʻu code, ka hoʻokō gRPC, a i ʻole ka pūnaewele i hoʻokau i ka lohi. Ua hoʻomaka wau e hopohopo ʻaʻole wau e hoʻomaopopo i kēia.

I kēia manawa he aha kā mākou OS

gRPC hoʻohana nui ʻia ma Linux, akā exotic ma Windows. Ua hoʻoholo wau e hoʻāʻo i kahi hoʻokolohua, i hana ʻia: Ua hana wau i kahi mīkini virtual Linux, hoʻohui iā Alvin no Linux, a hoʻonoho iā ia.

I kekahi manawa ʻoi aku ka liʻiliʻi. I ka ho'ēmiʻana i ka ukana, e hoʻonui i ka latency

A eia ka mea i hana ʻia: ʻaʻole i like ka lohi like o ka server ping-pong Linux me kahi host Windows like, ʻoiai ʻaʻole ʻokoʻa ke kumu ʻikepili. ʻIke ʻia aia ka pilikia i ka hoʻokō gRPC no Windows.

ʻO ka algorithm a Nagle

I kēia manawa a pau, manaʻo wau ua nele au i ka hae gRPC. I kēia manawa maopopo iaʻu he aha ia gRPC Nalo ka hae Windows. Ua loaʻa iaʻu kahi waihona RPC kūloko aʻu i manaʻoʻiʻo e hana maikaʻi no nā hae āpau 'Oiho. A laila ua hoʻohui au i kēia mau hae a pau i ka gRPC a hoʻonoho iā Alvin ma Windows, ma kahi kikowaena ping-pong Windows i hoʻopaʻa ʻia!

I kekahi manawa ʻoi aku ka liʻiliʻi. I ka ho'ēmiʻana i ka ukana, e hoʻonui i ka latency

Aneane Pau: Ua hoʻomaka wau e wehe i nā hae i hoʻohui ʻia i kēlā me kēia manawa a hiki i ka hoʻi hou ʻana i hiki iaʻu ke kuhikuhi i ke kumu. Ua kaulana TCP_NODELAY, Hoʻololi algorithm a Nagle.

ʻO ka algorithm a Nagle ho'āʻo e hōʻemi i ka helu o nā ʻeke i hoʻouna ʻia ma luna o kahi pūnaewele ma o ka hoʻopaneʻe ʻana i ka hoʻouna ʻana i nā memo a hiki i ka nui o ka ʻeke ma mua o kekahi helu o nā bytes. ʻOiai maikaʻi paha kēia no ka mea hoʻohana maʻamau, he mea luku ia no nā kikowaena manawa maoli no ka mea e hoʻopaneʻe ka OS i kekahi mau leka, e hoʻokau i nā lag ma ka QPS haʻahaʻa. U gRPC ua kau ʻia kēia hae ma ka hoʻokō Linux no nā kumu TCP, akā ʻaʻole ma Windows. ʻO wau kēia hooponoponoia.

hopena

ʻO ka latency kiʻekiʻe ma ka QPS haʻahaʻa ma muli o ka loiloi OS. I ka nānā hou ʻana, ʻaʻole i ʻike ka profiling i ka latency no ka mea ua hana ʻia ma ke ʻano kernel ma mua o ka in ʻano mea hoʻohana. ʻAʻole maopopo iaʻu inā hiki ke nānā ʻia ka algorithm a Nagle ma o nā hopu ETW, akā hoihoi ia.

No ka hoʻokolohua localhost, ʻaʻole paha ia i hoʻopā i ka code networking maoli a ʻaʻole holo ka algorithm a Nagle, no laila ua hala nā pilikia latency i ka wā i hiki ai ka mea kūʻai aku iā Alvin ma o localhost.

ʻO ka manawa aʻe e ʻike ai ʻoe i ka piʻi ʻana o ka latency e like me ka emi ʻana o ka helu o nā noi i kēlā me kēia kekona, pono ka algorithm a Nagle ma kāu papa inoa o nā mea kānalua!

Source: www.habr.com

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