„Cloudflare“ turi atvirojo kodo tokio-quiche, asinchroninę QUIC ir HTTP/3 Rust biblioteką, kuri apgaubia išbandytą „quiche“ diegimą su Tokio vykdymo laiku. Biblioteka buvo patobulinta gamybos sistemose, tokiose kaip Apple iCloud Private Relay, naujos kartos Oxy pagrįsti tarpiniai serveriai ir WARP MASQUE klientas, kur ji apdoroja milijonus HTTP/3 užklausų per sekundę su maža delsa ir dideliu pralaidumu. tokio-quiche taikosi į Rust komandas, kurios nori QUIC ir HTTP/3 nerašydamos savo UDP ir įvykių ciklo integravimo kodo.
Nuo quiche iki tokio-quiche
„quiche“ yra „Cloudflare“ atvirojo kodo QUIC ir HTTP/3 diegimas, parašytas Rust ir sukurtas kaip žemo lygio sans-io biblioteka. Jis įgyvendina QUIC transportavimo būsenos mašiną, įskaitant ryšio užmezgimą, srauto valdymą ir srauto tankinimą, nedarant prielaidų, kaip programos atlieka IO. Norėdami tiesiogiai naudoti quiche, integratoriai turi atidaryti UDP lizdus, siųsti ir gauti datagramas, valdyti laikmačius ir pateikti visus paketinius duomenis į quiche teisinga tvarka. Šis dizainas suteikia lankstumo, tačiau dėl to dažnai pasitaiko integravimo klaidų ir tai užima daug laiko.
tokio-quiche supakuoja šį integravimo darbą į daugkartinio naudojimo dėžutę. Jis sujungia sans-io QUIC arba HTTP/3 įgyvendinimą iš quiche su Tokio async vykdymo laiku ir atskleidžia API, kuri jau valdo UDP lizdus, paketų nukreipimą ir skambučius į quiche būsenos mašiną.
Aktorius pagrįsta architektūra iš Tokio
Tokio-quiche viduje Tokijo viršuje naudojamas aktoriaus modelis. Aktoriai yra nedidelės užduotys su vietine būsena, kuri bendrauja per pranešimus, perduodamus kanalais, o tai gerai suderinama su sans-io protokolo įgyvendinimais, kuriems priklauso vidinė būsena ir kurie veikia naudojant pranešimus kaip buferius.
Pagrindinis veikėjas yra IO kilpos veikėjas, kuris perkelia paketus tarp quiche ir UDP lizdo. Vienas iš pagrindinių pranešimų tipų yra an Incoming struktūra, kuri aprašo gautus UDP paketus. Asinchroninis integravimas vyksta pagal fiksuotą modelį, IO kilpa laukia naujų pranešimų, paverčia juos į quiche įvestis, patobulina QUIC būsenos mašiną, tada paverčia išvestis į išeinančius paketus, kurie įrašomi atgal į lizdą.
Kiekvienam UDP lizdui tokio-quiche sukuria dvi svarbias užduotis. InboundPacketRouter priklauso priimančioji pusė lizdo ir nukreipia gaunamas datagramas pagal paskirties ryšio ID kiekvienam ryšio kanalui. IoWorker yra jungties IO kilpa ir valdo vieną quiche Connectionsujungiant skambučius į quiche su iškvietimais į taikomąją programą, įdiegta specifinė logika ApplicationOverQuic. Ši konstrukcija apima ryšio būseną kiekvieno veikėjo viduje ir QUIC apdorojimą izoliuoja nuo aukštesnio lygio protokolo kodo.
ApplicationOverQuic ir H3Driver
QUIC yra transportavimo protokolas ir gali turėti kelis taikomųjų programų protokolus. HTTP/3, DNS per QUIC ir medija per QUIC yra pavyzdžiai, kuriems taikomos IETF specifikacijos. Siekdama išvengti tokio-quiche susiejimo su vienu protokolu, Cloudflare komanda atskleidžia an ApplicationOverQuic bruožas. Šis bruožas abstrahuoja quiche metodus ir pagrindinį IO ir pateikia aukštesnio lygio įvykius bei kabliukus prie programos, kuri įgyvendina protokolą. Pavyzdžiui, HTTP/3 derinimo ir testavimo klientas h3i naudoja ne HTTP/3 įgyvendinimą ApplicationOverQuic.
Be šios savybės, tokio-quiche pristato specialų HTTP/3 įgyvendinimą, pavadintą H3Driver. H3Driver sujungia quiche HTTP/3 modulį su IO kilpos veikėju ir paverčia neapdorotus HTTP/3 įvykius į aukštesnio lygio įvykius su asinchroniniais kūno srautais, kurie yra patogūs programos kodui. H3Driver yra bendras ir atskleidžia ServerH3Driver ir ClientH3Driver variantai, kurie prideda serverio ir kliento pusės elgseną prie pagrindinės tvarkyklės. Šie komponentai yra HTTP/3 serverių ir klientų, kurie bendrina diegimo modelius su vidine „Cloudflare“ infrastruktūra, blokus.
Gamybos panaudojimas ir planas
tokio-quiche buvo naudojamas keletą metų Cloudflare viduje, kol jis buvo išleistas viešai. Jis maitina tarpinį serverį B Apple iCloud Private Relay, Oxy pagrįstus HTTP/3 serverius ir WARP MASQUE klientą, taip pat asinchroninę h3i versiją. WARP kliente MASQUE pagrindu sukurti tokio-quiche tuneliai pakeičia ankstesnius WireGuard pagrindu sukurtus tunelius QUIC pagrindu. Šios sistemos veikia Cloudflare krašto mastu ir parodo, kad integracija gali palaikyti milijonus HTTP/3 užklausų per sekundę gamyboje.
„Cloudflare“ laiko tokio-quiche kaip pagrindą, o ne kaip visą HTTP/3 sistemą. Biblioteka atskleidžia žemo lygio protokolo galimybes ir pavyzdines kliento bei serverio įvykių kilpas ir palieka vietos aukštesnio lygio projektams, skirtiems įdiegti HTTP serverius, DNS per QUIC klientus, MASQUE pagrįstus VPN ir kitas QUIC programas. Išleisdama dėžutę, „Cloudflare“ siekia sumažinti „Rust“ komandų kliūtis naudoti QUIC, HTTP/3 ir MASQUE ir suderinti išorines integracijas su tuo pačiu transportavimo krūvu, naudojamu savo kraštutinėse paslaugose.
Raktai išsinešti
- tokio-quiche = quiche + Tokio: tokio-quiche yra asinchroninė Rust biblioteka, kuri integruoja Cloudflare sans-io QUIC ir HTTP/3 diegimą, quiche, su Tokio vykdymo laiku, todėl kūrėjams nereikia ranka rašyti UDP ir įvykių kilpos santechnikos.
- Aktoriumi pagrįsta QUIC jungčių architektūra: Biblioteka naudoja aktoriaus modelį Tokijuje su an
InboundPacketRouterkuri nukreipia UDP datagramas pagal ryšio ID ir anIoWorkerkad varo vieną kišąConnectionkiekvienai užduočiai, išlaikant transporto būseną izoliuotą ir komponuojamą. - ApplicationOverQuic abstrakcija: Protokolo logika yra atskirta per
ApplicationOverQuicbruožas, kuris abstrahuoja quiche ir IO detales, todėl skirtingi QUIC pagrįsti protokolai, tokie kaip HTTP/3, DNS per QUIC arba pasirinktiniai protokolai, gali būti įdiegti ant to paties perdavimo branduolio. - HTTP/3 per H3Driver, ServerH3Driver ir ClientH3Driver: tokio-quiche laivai
H3DriverpliusasServerH3DriverirClientH3Drivervariantai, sujungiantys quiche HTTP/3 modulį su asinchronizuotu Rust kodu, atskleidžiantys HTTP/3 srautus ir korpusus taip, kad atitiktų tipines Tokijo paslaugas.
Patikrinkite Techninės detalės. Be to, nedvejodami sekite mus Twitter ir nepamirškite prisijungti prie mūsų 100 000+ ML SubReddit ir Prenumeruoti mūsų naujienlaiškis. Palauk! ar tu telegramoje? dabar galite prisijungti prie mūsų ir per telegramą.
Michal Sutter yra duomenų mokslo profesionalas, Paduvos universiteto duomenų mokslo magistro laipsnis. Turėdamas tvirtą statistinės analizės, mašininio mokymosi ir duomenų inžinerijos pagrindą, Michal puikiai sugeba sudėtingus duomenų rinkinius paversti įgyvendinamomis įžvalgomis.


