ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana

He mea hoihoi loa ka protocol QUIC e nānā, ʻo ia ke kumu makemake mākou e kākau e pili ana iā ia. Akā inā ʻoi aku ka moʻolelo o nā paʻi mua e pili ana iā QUIC (ka mōʻaukala kūloko, inā makemake ʻoe) ke ʻano a me ka lako, i kēia lā hauʻoli mākou e hoʻopuka i kahi unuhi o kahi ʻano ʻokoʻa - e kamaʻilio mākou e pili ana i ka noi maoli o ka protocol ma 2019. Eia kekahi, ʻaʻole mākou e kamaʻilio e pili ana i nā ʻoihana liʻiliʻi i hoʻokumu ʻia i kahi hale kaʻa i kapa ʻia, akā e pili ana iā Uber, e hana kokoke ana ma ka honua holoʻokoʻa. Pehea i hoʻoholo ai nā ʻenekinia o ka ʻoihana e hoʻohana i ka QUIC i ka hana ʻana, pehea lākou i hana ai i nā hoʻokolohua a me nā mea a lākou i ʻike ai ma hope o ka ʻōwili ʻana i ka hana - ma lalo o ka ʻoki.

Hiki ke kaomi i nā kiʻi. Nanea i ka heluhelu!

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana

Loaʻa iā Uber kahi pae honua, ʻo ia hoʻi he 600 mau kūlanakauhale o ka noho ʻana, ma kēlā me kēia o ka noi e hilinaʻi piha ʻia i ka Pūnaewele uila mai nā mea ʻoi aku ma mua o 4500. Manaʻo nā mea hoʻohana ʻaʻole wikiwiki wale ka app, akā i ka manawa maoli - no ka hoʻokō ʻana i kēia, pono ka Uber app i ka latency haʻahaʻa a me kahi pilina hilinaʻi loa. Auē, akā, ʻo ka pūʻulu HTTP / 2 ʻaʻole maikaʻi ma nā ʻupena uʻi ikaika a me ka pohō. Ua ʻike mākou i kēia hihia, pili pono ka hana maikaʻi ʻole i nā hoʻokō TCP i nā kernels ʻōnaehana hana.

No ka hoʻoponopono i ka pilikia, ua noi mākou QUIC, kahi protocol multiplexing channel hou e hāʻawi iā mākou i ka mana hou aku i ka hana o ka protocol transport. I kēia manawa ka hui hana IETF standardizes QUIC like HTTP / 3.

Ma hope o ka hoʻāʻo nui ʻana, manaʻo mākou ʻo ka hoʻokō ʻana i ka QUIC i kā mākou noi e hopena i nā latency huelo haʻahaʻa i hoʻohālikelike ʻia me TCP. Ua ʻike mākou i nā hōʻemi o 10-30% no ka hele ʻana o HTTPS i nā noi hoʻokele a me nā mea kaʻa. Ua hāʻawi pū ʻo QUIC iā mākou i ka mana hope-a-hope ma luna o nā pūʻolo mea hoʻohana.

Ma kēia ʻatikala, kaʻana like mākou i kā mākou ʻike i ka hoʻonui ʻana i ka TCP no nā noi Uber me ka hoʻohana ʻana i kahi waihona e kākoʻo ana iā QUIC.

ʻO ka ʻenehana hou loa: TCP

I kēia lā, ʻo TCP ka protocol transport i hoʻohana nui ʻia no ka lawe ʻana i nā kaʻa HTTPS ma ka Pūnaewele. Hāʻawi ʻo TCP i kahi kahe hilinaʻi o nā bytes, a laila e hoʻopaʻa ʻia me ka hoʻopaʻa ʻana o ka pūnaewele a me nā poho o ka loulou. ʻO ka hoʻohana nui ʻana o TCP no ka hele ʻana o HTTPS ma muli o ka ubiquity o ka mua (kokoke i kēlā me kēia OS ke TCP), loaʻa i ka hapa nui o nā ʻōnaehana (e like me nā mea kaulike, HTTPS proxies a me nā CDN), a me nā hana i waho o ka pahu i loaʻa. ma kahi kokoke i ka hapa nui o nā paepae a me nā pūnaewele.

Hoʻohana ka hapa nui o nā mea hoʻohana i kā mākou polokalamu ma ka hele ʻana, a ʻaʻole kokoke i kahi kokoke i nā koi o kā mākou huakaʻi HTTPS manawa maoli. ʻO ka ʻōlelo maʻalahi, ua ʻike nā mea hoʻohana ma ka honua holoʻokoʻa - Hōʻike ke kiʻi 1 i nā lohi ma nā kūlanakauhale nui:

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 1: He ʻokoʻa ka lōʻihi o ka huelo ma nā kūlanakauhale nui o Uber.

ʻOiai ʻoi aku ka kiʻekiʻe o ka latency ma nā ʻoihana India a me Brazil ma mua o US a me UK, ʻoi aku ka kiʻekiʻe o ka latency huelo ma mua o ka latency maʻamau. A he ʻoiaʻiʻo kēia no ka US a me UK.

TCP ma luna o ka hana ea

Ua hana ʻia ʻo TCP no uea pūnaewele, ʻo ia hoʻi, me ka manaʻo nui i nā loulou hiki ke wānana. Eia naʻe, uwea ʻole Loaʻa i nā pūnaewele ko lākou mau hiʻohiʻona a me nā pilikia. ʻO ka mea mua, hiki i nā pūnaewele kelepona i nā poho ma muli o ka hoʻopili a me ka hōʻailona hōʻailona. No ka laʻana, paʻakikī nā pūnaewele Wi-Fi i nā microwaves, bluetooth a me nā hawewe lekiō ʻē aʻe. Loaʻa nā pūnaewele kelepona i ka nalowale o ka hōʻailona (ala nalowale) ma muli o ka noʻonoʻo ʻana/komo ʻana o ka hōʻailona e nā mea a me nā hale, a mai keakea mai ka hoalauna hale kiaʻi kelepona. Ke alakaʻi nei kēia i nā mea nui (4-10 mau manawa) a ʻoi aku ka ʻokoʻa Manawa Kaapuni (RTT) a me ka poho packet i hoʻohālikelike ʻia me kahi pilina uea.

No ka pale ʻana i ka loli a me nā poho o ka bandwidth, hoʻohana maʻamau nā ʻoihana kelepona i nā pale nui no ka pahū ʻana. Hiki i kēia ke alakaʻi i ka pila nui, ʻo ia hoʻi ka lōʻihi o ka lohi. Hoʻohana pinepine ʻo TCP i kēia queuing ma ke ʻano he mea ʻino ma muli o ka lōʻihi o ka manawa, no laila makemake ʻo TCP e hoʻokuʻu a no laila e hoʻopiha i ka buffer. Ua kapa ʻia kēia pilikia ʻo hoʻopaʻapaʻa (ka hoʻopaʻa ʻana i ka pūnaewele nui, ka puʻu paʻa), a he nui loa kēia pilikia nui Internet hou.

ʻO ka hope, ʻokoʻa ka hana o ka ʻoihana pūnaewele e ka mea lawe, ka ʻāina, a me ka manawa. Ma ke Kiʻi 2, ua hōʻiliʻili mākou i nā lohi waena o ka hele ʻana o HTTPS ma waena o nā cell i loko o kahi 2-kilomita. Ua hōʻiliʻili ʻia nā ʻikepili no nā mea hoʻohana kelepona nui ʻelua ma Delhi, India. E like me kāu e ʻike ai, ʻokoʻa ka hana mai ke kelepona i ke kelepona. Eia kekahi, ʻokoʻa ka huahana o kekahi mea hana mai ka huahana o ka lua. Hoʻopili ʻia kēia e nā mea e like me nā ʻōnaehana komo pūnaewele e noʻonoʻo ana i ka manawa a me ka wahi, ka neʻe ʻana o ka mea hoʻohana, a me nā ʻōnaehana pūnaewele e noʻonoʻo ana i ka nui o ka hale kiaʻi a me ka ratio o nā ʻano pūnaewele (LTE, 3G, etc.).

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 2. Hoʻopaneʻe ka hoʻohana ʻana i kahi radius 2 km ma ke ʻano he laʻana. Delhi, ʻĪnia.

Eia kekahi, ʻokoʻa ka hana o nā pūnaewele kelepona i ka manawa. Hōʻike ke kiʻi 3 i ka latency waena ma ka lā o ka pule. Ua ʻike pū mākou i nā ʻokoʻa ma kahi ʻano liʻiliʻi, i loko o hoʻokahi lā a me ka hola.

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 3. Hiki ke ʻokoʻa ka lōʻihi o ka huelo ma waena o nā lā, akā no ka mea hoʻohana like.

ʻO nā mea a pau i luna nei ke kumu i kūpono ʻole ai ka hana TCP ma nā ʻupena uila. Eia nō naʻe, ma mua o ka ʻimi ʻana i nā mea ʻē aʻe i ka TCP, makemake mākou e hoʻomohala i kahi ʻike pololei i nā mea aʻe:

  • ʻO TCP ka mea hewa nui ma hope o ka huli ʻana o ka huelo i kā mākou mau noi?
  • Loaʻa i nā ʻupena hou nā mea nui a me nā ʻano like ʻole o ka lohi kaʻapuni (RTT)?
  • He aha ka hopena o ka RTT a me ka poho i ka hana TCP?

Nānā Hana Hana TCP

No ka hoʻomaopopo ʻana i ke ʻano o kā mākou loiloi ʻana i ka hana TCP, e nānā wikiwiki i ka hoʻoili ʻana o TCP i ka ʻikepili mai ka mea hoʻouna i kahi mea hoʻokipa. ʻO ka mea mua, hoʻokumu ka mea hoʻouna i kahi pilina TCP, e hana ana i kahi ala ʻekolu lulu lima: Hoʻouna ka mea hoʻouna i kahi ʻeke SYN, kali i kahi ʻeke SYN-ACK mai ka mea hoʻokipa, a laila hoʻouna i kahi ʻeke ACK. Hoʻopau ʻia ka lua a me ke kolu o ka hoʻokumu ʻana i ka pilina TCP. Hoʻomaopopo ka mea loaʻa i ka loaʻa ʻana o kēlā me kēia ʻeke (ACK) e hōʻoia i ka lawe pono ʻana.

Inā nalowale kahi ʻeke a i ʻole ACK, e hoʻouna hou ka mea hoʻouna ma hope o ka manawa pau (RTO, manawa hoʻouna hou). Ua helu ʻia ʻo RTO ma muli o nā kumu like ʻole, e like me ka lohi RTT i manaʻo ʻia ma waena o ka mea hoʻouna a me ka mea loaʻa.

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 4. ʻO ka hoʻololi ʻana i ka ʻeke ma luna o TCP/TLS e loaʻa ana kahi mīkini hoʻouna hou.

No ka hoʻoholo ʻana i ka hana ʻana o TCP i kā mākou mau noi, ua nānā mākou i nā ʻeke TCP me ka hoʻohana ʻana tcpdump no hoʻokahi pule ma ke kaʻa kaua e hele mai ana mai nā kikowaena o India. A laila nānā mākou i nā pilina TCP me ka hoʻohana ʻana tcptrace. Hoʻohui hou, hana mākou i kahi noi Android e hoʻouna ana i nā huakaʻi i hoʻohālikelike ʻia i kahi kikowaena hoʻāʻo, e hoʻohālike ana i nā kaʻa maoli e like me ka hiki. Ua hāʻawi ʻia nā kelepona me kēia noi i kekahi mau limahana, nāna i hōʻiliʻili i nā lāʻau i nā lā he nui.

Ua kūlike nā hopena o nā hoʻokolohua ʻelua me kekahi. Ua ʻike mākou i nā latency RTT kiʻekiʻe; ua aneane 6 mau manawa kiʻekiʻe ma mua o ka waiwai waena; ʻoi aku ka awelika helu helu o nā lohi ma mua o 1 kekona. Ua nalowale nā ​​pilina he nui, no laila e hoʻouna hou ʻo TCP i 3,5% o nā ʻeke āpau. Ma nā wahi i hoʻopaʻa ʻia e like me nā mokulele a me nā kahua kaʻaahi, ʻike mākou i ka 7% poho. Ke kānalua nei kēia mau hopena i ka naʻauao maʻamau i hoʻohana ʻia i nā pūnaewele kelepona nā kaapuni hoʻouna hou hōʻemi nui i nā poho ma ka pae lawe. Aia ma lalo iho nā hopena hoʻokolohua mai ka noi "simulator":

Nā anana pūnaewele
Nā helu waiwai

RTT, milliseconds [50%,75%, 95%,99%]
[350, 425, 725, 2300]

ʻokoʻa RTT, kekona
Ma ka awelika ~1,2 s

Nalo packet ma nā pilina paʻa ʻole
ʻAwelika ~3.5% (7% ma nā wahi i hoʻonui ʻia)

Ma kahi o ka hapalua o kēia mau hoʻohui i loaʻa ma kahi o hoʻokahi packet poho, ʻo ka hapa nui o lākou he mau ʻeke SYN a me SYN-ACK. Hoʻohana ka hapa nui o nā hoʻokō TCP i kahi waiwai RTO o 1 kekona no nā ʻeke SYN, e piʻi nui ana no nā poho ma hope. Hiki ke hoʻonui ʻia ka manawa hoʻouka noi ma muli o ka lōʻihi o ka TCP e hoʻokumu i nā pilina.

I ka hihia o nā ʻikepili ʻikepili, ʻoi aku ka nui o nā waiwai RTO kiʻekiʻe i ka hoʻohana pono ʻana o ka pūnaewele i mua o nā poho transient i nā pūnaewele uea. Ua ʻike mākou he 1 kekona ka awelika o ka hoʻouna hou ʻana me ka lōʻihi o ka huelo ma kahi o 30 kekona. ʻO kēia mau latencies kiʻekiʻe ma ka pae TCP i hoʻoiho i ka manawa HTTPS a me nā noi hou, e hoʻonui hou i ka latency a me ka pono ʻole.

ʻOiai ʻo ka 75th percentile o ke ana RTT ma kahi o 425 ms, ʻo ka 75th percentile no TCP ua aneane 3 kekona. Hōʻike kēia i ka lilo i kumu i lawe ai ʻo TCP i 7-10 pass e hoʻouna pono i ka ʻikepili. He hopena paha kēia o ka helu RTO kūpono ʻole, hiki ʻole iā TCP ke pane koke i ka poho nā pūʻolo hou loa i loko o ka puka makani a me ka hemahema o ka congestion control algorithm, ka mea i hoʻokaʻawale ʻole ma waena o nā poho uila a me nā poho ma muli o ka congestion network. Ma lalo iho nei nā hopena o nā hoʻāʻo nalowale TCP:

Ka helu helu poho packet TCP
waiwai

Pākēneka o nā pilina me ka liʻiliʻi o 1 packet poho
45%

Pākēneka o nā pilina me nā poho i ka wā hoʻonohonoho hoʻohui
30%

Pākēneka o nā pilina me nā poho i ka wā o ka hoʻololi ʻikepili
76%

Ka māhele ʻana o nā lohi i ka hoʻouna hou ʻana, kekona [50%, 75%, 95%,99%] [1, 2.8, 15, 28]

Ka māhele ʻana i ka helu o nā hoʻouna hou ʻana no hoʻokahi ʻeke a i ʻole ʻāpana TCP
[1,3,6,7]

Noi o QUIC

Hoʻokumu mua ʻia e Google, ʻo QUIC kahi protocol transport hou e holo ana ma luna o ka UDP. Aia ʻo QUIC i kēia manawa kaʻina hana maʻamau (Ua kākau mua mākou aia, me he mea lā, ʻelua mau mana o QUIC, ʻike hiki ke hahai i ka loulou – kokoke. unuhi). E like me ka mea i hōʻike ʻia ma ke Kiʻi 5, waiho ʻia ʻo QUIC ma lalo o HTTP/3 (ʻoiaʻiʻo, ʻo HTTP/2 ma luna o QUIC ʻo HTTP/3, i kēia manawa ke hoʻohālikelike ʻia nei). Hoʻololi ʻo ia i nā ʻāpana HTTPS a me TCP ma ka hoʻohana ʻana i ka UDP e hana i nā ʻeke. Kākoʻo ʻo QUIC i ka hoʻoili ʻikepili palekana ʻoiai ua kūkulu piha ʻia ʻo TLS i QUIC.

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 5: E holo ana ʻo QUIC ma lalo o HTTP/3, e pani ana iā TLS, i holo mua ma lalo o HTTP/2.

Aia ma lalo nā kumu i hoʻohuli iā mākou e hoʻohana i ka QUIC no ka hoʻonui ʻana i ka TCP:

  • 0-RTT hoʻokumu pili. ʻAe ʻo QUIC i ka hoʻohana hou ʻana i nā mana mai nā pili mua, e hōʻemi ana i ka nui o nā lulu lima palekana. I ka wā e hiki mai ana TLS1.3 e kākoʻo iā 0-RTT, akā e koi mau ʻia kahi lulu lima TCP ʻekolu ala.
  • ka pale ʻana i ka HoL. Hoʻohana ʻo HTTP/2 i hoʻokahi pili TCP i kēlā me kēia mea kūʻai aku e hoʻomaikaʻi i ka hana, akā hiki ke alakaʻi i ka pale ʻana iā HoL (head-of-line). Hoʻomaʻamaʻa ka QUIC i ka multiplexing a hāʻawi kaʻawale i nā noi i ka noi.
  • hoʻopaʻapaʻa ʻana. Noho ʻo QUIC ma ka papa noi, e maʻalahi ka hoʻonui ʻana i ka algorithm transport nui e hoʻokele ana i ka hoʻouna ʻana ma muli o nā ʻāpana pūnaewele (helu o nā poho a i ʻole RTT). Hoʻohana ka hapa nui o nā hoʻokō TCP i ka algorithm CUBIC, ʻaʻole maikaʻi loa ia no ka hele ʻana i ka latency-sensitive. ʻO nā algorithms i kūkulu hou ʻia e like me Hoʻonui BB, hoʻohālike pololei i ka pūnaewele a hoʻopaneʻe i ka latency. ʻAe ʻo QUIC iā ʻoe e hoʻohana i ka BBR a hōʻano hou i kēia algorithm e like me ka hoʻohana ʻia. hoʻomaikaʻi.
  • ka hoopiha ana i na poho. Kāhea ʻo QUIC i ʻelua TLP (ʻimi ʻili huelo) ma mua o ka hoʻomaka ʻana o ka RTO - ʻoiai ke ʻike nui ʻia nā poho. He ʻokoʻa kēia mai nā hoʻokō TCP. Hoʻouna hou ʻo TLP i ka ʻeke hope loa (a i ʻole ka mea hou, inā he hoʻokahi) e hoʻomaka i ka hoʻopiha hou ʻana. He mea pono loa ka lawelawe ʻana i nā lohi o ka huelo no ke ʻano o ka hoʻohana ʻana o Uber i kāna pūnaewele, ʻo ia hoʻi no ka hoʻoili ʻikepili pōkole, sporadic, a me ka latency-sensitive.
  • ACK kūpono. No ka mea he helu kaʻina kūʻokoʻa ko kēlā me kēia ʻeke, ʻaʻohe pilikia ʻokoʻa nā ʻeke ke hoʻouna hou ʻia. Loaʻa i nā ʻeke ACK ka manawa e hana ai i ka ʻeke a hana i kahi ACK ma ka ʻaoʻao o ka mea kūʻai aku. Hoʻomaopopo kēia mau hiʻohiʻona i ka helu ʻana o QUIC iā RTT me ka pololei. Kākoʻo ʻo ACK ma QUIC a hiki i 256 mau pūʻali NACK, e kōkua ana i ka mea hoʻouna e ʻoi aku ka maʻalahi i ka shuffling packet a hoʻohana i nā byte liʻiliʻi i ke kaʻina hana. ACK koho (ʻeke) ma TCP ʻaʻole i hoʻoponopono i kēia pilikia i nā hihia āpau.
  • ka neʻe ʻana o ka pilina. ʻIke ʻia nā pilina QUIC e kahi ID 64-bit, no laila inā hoʻololi ka mea kūʻai aku i nā helu IP, hiki ke hoʻohana ʻia ka ID pili kahiko ma ka IP IP hou me ka ʻole o ka hoʻopau ʻia. He hana maʻamau kēia no nā polokalamu kelepona kahi e hoʻololi ai ka mea hoʻohana ma waena o Wi-Fi a me nā pili kelepona.

Nā mea ʻē aʻe iā QUIC

Ua noʻonoʻo mākou i nā ala ʻē aʻe e hoʻoponopono ai i ka pilikia ma mua o ke koho ʻana iā QUIC.

ʻO ka mea mua a mākou i hoʻāʻo ai, ʻo ia ke kau ʻana i nā TPC PoPs (Points of Presence) e hoʻopau i nā pilina TCP kokoke i nā mea hoʻohana. ʻO ka mea nui, hoʻopau nā PoP i kahi pilina TCP me kahi polokalamu kelepona kokoke i ka pūnaewele kelepona a hoʻololi i ke kaʻa i ka ʻōnaehana kumu. Ma ka hoʻopau kokoke ʻana i ka TCP, hiki iā mākou ke hōʻemi i ka RTT a hōʻoia i ka pane ʻana o TCP i kahi kaiapuni uila ikaika. Eia naʻe, ua hōʻike kā mākou mau hoʻokolohua ʻo ka hapa nui o ka RTT a me nā poho mai nā pūnaewele kelepona a ʻo ka hoʻohana ʻana i nā PoP ʻaʻole hāʻawi i ka hoʻomaikaʻi ʻana i ka hana.

Ua nānā pū mākou i ka hoʻoponopono ʻana i nā ʻāpana TCP. He mea paʻakikī ka hoʻonohonoho ʻana i kahi waihona TCP ma kā mākou mau kikowaena kihi heterogeneous no ka mea he ʻokoʻa ka hoʻokō ʻana o TCP ma nā ʻano OS like ʻole. He mea paʻakikī ke hoʻokō i kēia a hoʻāʻo i nā hoʻonohonoho pūnaewele like ʻole. ʻAʻole hiki ke hoʻonohonoho pololei iā TCP ma nā polokalamu kelepona ma muli o ka nele o nā ʻae. ʻO ka mea nui aku, ʻo nā hiʻohiʻona e like me nā pilina 0-RTT a me ka wānana RTT i hoʻomaikaʻi ʻia he mea koʻikoʻi i ka hoʻolālā ʻana o ka protocol, a no laila ʻaʻole hiki ke loaʻa nā pōmaikaʻi nui ma ke kani ʻana iā TCP wale nō.

ʻO ka hope, ua loiloi mākou i kekahi mau protocols e pili ana i ka UDP e hoʻoponopono i ke kahe wikiō - makemake mākou e ʻike inā e kōkua kēia mau protocol i kā mākou hihia. ʻO ka mea pōʻino, ua nele loa lākou i nā hoʻonohonoho palekana he nui, a koi pū kekahi i kahi pilina TCP hou no ka metadata a me ka ʻike hoʻomalu.

Ua hōʻike kā mākou noiʻi ʻo QUIC wale nō paha ka protocol e hiki ke kōkua i ka pilikia o ke kaʻa pūnaewele, ʻoiai e noʻonoʻo ana i ka palekana a me ka hana.

Ka hoʻohui ʻana o QUIC i ka paepae

No ka hoʻokomo pono ʻana i ka QUIC a me ka hoʻomaikaʻi ʻana i ka hana noiʻi ma nā wahi pili pono ʻole, ua hoʻololi mākou i ka waihona kahiko (HTTP/2 ma luna o TLS/TCP) me ka protocol QUIC. Ua hoʻohana mākou i ka waihona pūnaewele Cronet mai Nā papahana Chromium, aia i loko o ka mana Google o ka protocol - gQUIC. Ke hoʻomaikaʻi mau ʻia nei kēia hoʻokō e hahai i nā kikoʻī IETF hou loa.

Ua hoʻohui mua mākou iā Cronet i kā mākou mau polokalamu Android e hoʻohui i ke kākoʻo no QUIC. Ua hana ʻia ka hoʻohui ʻana ma ke ʻano e hōʻemi ai i nā kumukūʻai neʻe e like me ka hiki. Ma kahi o ka hoʻololi piha ʻana i ka waihona pūnaewele kahiko i hoʻohana i ka waihona OkHttp, ua hoʻohui mākou i ka Cronet MALALO o ka OkHttp API framework. Ma ka hana ʻana i ka hoʻohui ʻana i kēia ala, ua pale mākou i nā loli i kā mākou kelepona pūnaewele (i hoʻohana ʻia e ʻO Retrofit) ma ka pae API.

E like me ka hoʻokokoke ʻana no nā polokalamu Android, ua hoʻokomo mākou iā Cronet i nā polokalamu Uber ma iOS, e ʻae ana i ka hele ʻana o HTTP mai ka pūnaewele. APIhoʻohana ʻana NSURLProtocol. ʻO kēia abstraction, i hoʻolako ʻia e ka iOS Foundation, e mālama i ka ʻikepili URL kikoʻī protocol a hōʻoia e hiki iā mākou ke hoʻohui iā Cronet i kā mākou mau noi iOS me ka ʻole o nā kumukūʻai neʻe nui.

Hoʻopiha i ka QUIC ma Google Cloud Balancers

Ma ka ʻaoʻao hope, hāʻawi ʻia ka hoʻopau QUIC e ka Google Cloud Load balancing infrastructure, nāna e hoʻohana alt-svc poʻomanaʻo i nā pane e kākoʻo iā QUIC. Ma keʻano laulā, hoʻohui ka mea kaulike i kahi poʻomanaʻo alt-svc i kēlā me kēia noi HTTP, a ua hōʻoia kēia i ke kākoʻo QUIC no ka domain. Ke loaʻa i kahi mea kūʻai Cronet kahi pane HTTP me kēia poʻomanaʻo, hoʻohana ʻo ia i ka QUIC no nā noi HTTP aʻe i kēlā kikowaena. Ke hoʻopau ka mea kaulike i ka QUIC, hoʻouna maopopo kā mākou ʻenehana i kēia hana ma luna o HTTP2/TCP i kā mākou mau kikowaena ʻikepili.

Hana: Nā hualoaʻa

ʻO ka hana hoʻopuka ke kumu nui o kā mākou ʻimi ʻana i kahi protocol maikaʻi aʻe. No ka hoʻomaka ʻana, hana mākou i kahi kū me ka hoʻolike ʻana o ka pūnaewelee ʻike pehea e hana ai ʻo QUIC ma lalo o nā ʻaoʻao pūnaewele like ʻole. No ka hoʻāʻo ʻana i ka hana a QUIC ma nā pūnaewele honua maoli, ua holo mākou i nā hoʻokolohua ʻoiai ke kaʻa ʻana a puni ʻo New Delhi me ka hoʻohana ʻana i ka ʻoihana pūnaewele i hoʻohālikelike ʻia me nā kelepona HTTP ma ka app kaʻa.

Hoao 1

Mea lako no ka hoʻokolohua:

  • e ho'āʻo i nā polokalamu Android me OkHttp a me Cronet stacks e hōʻoia e ʻae mākou i ka hele ʻana o HTTPS ma luna o TCP a me QUIC;
  • he kikowaena emulation ma Java e hoʻouna ana i nā ʻano poʻomanaʻo HTTPS like i nā pane a hoʻouka i nā polokalamu mea kūʻai aku e loaʻa nā noi mai lākou;
  • nā mea hoʻolaha kapua i kū kino kokoke i India e hoʻopau i nā pilina TCP a me QUIC. ʻOiai no ka hoʻopau ʻana i ka TCP ua hoʻohana mākou i kahi koho hope NGINX, ua paʻakikī ka loaʻa ʻana o kahi mea hoʻololi hoʻohuli kumu wehe no QUIC. Ua kūkulu mākou i kahi koho hope no QUIC iā mākou iho me ka hoʻohana ʻana i ka waihona QUIC kumu mai Chromium a paʻi ʻia i loko o ka chromium ma ke ʻano he kumu hāmama.

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hanaʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 6. ʻO ka hui hoʻāʻo alanui ʻo TCP vs QUIC he mau polokalamu Android me OkHttp a me Cronet, nā mea hoʻolale kapua no ka hoʻopau ʻana i nā pilina, a me kahi kikowaena emulation.

Hoao 2

I ka manawa a Google i loaʻa ai iā QUIC me Google Cloud Load Balancing, ua hoʻohana mākou i ka papa helu hoʻokahi, akā me hoʻokahi hoʻololi: ma kahi o NGINX, ua lawe mākou i nā mea kaulike hoʻoili Google e hoʻopau i nā pilina TCP a me QUIC mai nā polokalamu, a me ke ala hoʻi i ka hele ʻana o HTTPS i ka server emulation. Hāʻawi ʻia nā mea kaulike ma ka honua holoʻokoʻa, akā e hoʻohana i ka server PoP kokoke loa i ka hāmeʻa (mahalo i ka geolocation).

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 7. Ma ka lua o ka hoʻokolohua, ua makemake mākou e hoʻohālikelike i ka pau ʻana o ka latency o TCP a me QUIC: me ka hoʻohana ʻana i ka Google Cloud a me ka hoʻohana ʻana i kā mākou proxy cloud.

ʻO ka hopena, ua kali mai kekahi mau hōʻike iā mākou:

  • hoʻopau ʻia ma o PoP i hoʻomaikaʻi i ka hana TCP. Ma muli o ka hoʻopau ʻana o nā mea kaulike i nā pilina TCP ma kahi kokoke i nā mea hoʻohana a ʻoi loa ka maikaʻi, hopena kēia i nā RTT haʻahaʻa, e hoʻomaikaʻi ana i ka hana TCP. A ʻoiai ʻaʻole i hoʻopilikia ʻia ka QUIC, ua ʻoi aku ka maikaʻi o ka TCP ma ke ʻano o ka hōʻemi ʻana i ka latency huelo (e 10-30 pakeneka).
  • pili ka huelo pūnaewele hops. ʻOiai ʻoi aku ka ʻoi aku o kā mākou proxy QUIC mai nā hāmeʻa (e pili ana i 50 ms kiʻekiʻe latency) ma mua o nā mea kaulike ukana a Google, hāʻawi ʻo ia i ka hana like - he 15% hoʻemi i ka latency me ka hōʻemi 20% i ka 99th percentile no TCP. Hōʻike kēia i ka hoʻololi ʻana o ka mile hope he bottleneck i ka pūnaewele.

ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hanaʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 8: Hōʻike nā hualoaʻa mai nā hoʻokolohua ʻelua ua ʻoi aku ka nui o ka QUIC ma mua o TCP.

Kaʻa kaua

Hoʻoulu ʻia e ka hoʻokolohua, ua hoʻokō mākou i ke kākoʻo QUIC i kā mākou polokalamu Android a me iOS. Ua alakaʻi mākou i ka hoʻāʻo A/B e hoʻoholo i ka hopena o QUIC ma nā kūlanakauhale kahi e hana ai ʻo Uber. Ma keʻano laulā, ua ʻike mākou i ka hoʻemi nui ʻana o ka lohi o ka huelo ma nā ʻāpana ʻelua, nā mea lawelawe kelepona a me nā ʻano pūnaewele.

Hōʻike nā pakuhi ma lalo nei i ka hoʻomaikaʻi pākēneka o nā huelo (95 a me 99 percentiles) e ka macro-region a me nā ʻano pūnaewele like ʻole - LTE, 3G, 2G.
ʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hanaʻO ka protocol QUIC i ka hana: pehea i hoʻokō ai ʻo Uber e hoʻokō i ka hana
Kiʻi 9. Ma nā hoʻokolohua kaua, ua ʻoi aku ka maikaʻi o QUIC i ka TCP ma ke ʻano o ka latency.

Maikaʻi wale

ʻO ka hoʻomaka wale nō paha kēia - ʻo ka hoʻokuʻu ʻana o QUIC i ka hana i hāʻawi i nā manawa kupanaha e hoʻomaikaʻi ai i ka hana noi ma nā pūnaewele paʻa a paʻa ʻole, ʻo ia hoʻi:

Hoʻonui i ka uhi

Ma hope o ka nānā ʻana i ka hana o ka protocol ma ke kaʻa maoli, ʻike mākou ma kahi o 80% o nā kau i hoʻohana pono iā QUIC no o nā mea a pau noi, aʻo 15% o nā kau i hoʻohana i kahi hui o QUIC a me TCP. Manaʻo mākou no ka hoʻihoʻi ʻana o ka waihona Cronet i ka TCP, no ka mea ʻaʻole hiki ke hoʻokaʻawale i waena o nā hemahema UDP maoli a me nā kūlana pūnaewele maikaʻi ʻole. Ke ʻimi nei mākou i kahi hoʻonā i kēia pilikia ke hana nei mākou i ka hoʻokō ʻana o QUIC.

ʻO ka hoʻoponopono QUIC

ʻO ke kaʻahele mai nā polokalamu kelepona paʻa paʻa, akā ʻaʻole pili i ka bandwidth. Eia kekahi, hoʻohana nui ʻia kā mākou mau noi ma nā pūnaewele kelepona. Ma muli o nā hoʻokolohua, ʻoi aku ka kiʻekiʻe o ka huli ʻana o ka huelo me ka hoʻohana ʻana i kahi koho e hoʻopau iā TCP a me QUIC kokoke i nā mea hoʻohana. Ke ʻimi nei mākou i nā ala e hoʻomaikaʻi ai i ka hoʻokele congestion a hoʻomaikaʻi i ka pono o QUIC loss recovery algorithms.

Me kēia mau mea a me kekahi mau hoʻomaikaʻi ʻē aʻe, hoʻolālā mākou e hoʻomaikaʻi i ka ʻike mea hoʻohana me ka nānā ʻole ʻana i ka pūnaewele a me ka ʻāina, e ʻoi aku ka maʻalahi o ka lawe ʻana i ka ʻeke ma ka honua.

Source: www.habr.com

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