Kif OpenAI twassal AI bil-vuċi b’latenza baxxa fuq skala kbira
Minn Yi Zhang u William McDonald, Membri tal-Persunal Tekniku
L-IA bil-vuċi tidher naturali biss jekk il-konverżazzjoni timxi bl-istess ritmu tad-diskors. Meta n-network tfixkel, in-nies jisimgħu dan minnufih bħala pawżi skomdi, interruzzjonijiet maqtugħin, jew interventi mdewma. Dan huwa importanti għall-vuċi ta’ ChatGPT, għall-iżviluppaturi li jużaw ir-Realtime API, għall-aġenti li jaħdmu fi flussi tax-xogħol interattivi u għall-mudell li jeħtieġ jipproċessa l-awdjo waqt li l-utent ikun għadu qed jitkellem.
Fuq l-iskala ta’ OpenAI, dan jissarraf fi tliet rekwiżiti konkreti:
- Firxa globali għal aktar minn 900 miljun utent attiv kull ġimgħa
- Konfigurazzjoni rapida tal-konnessjoni sabiex utent ikun jista’ jibda jitkellem hekk kif tibda sessjoni
- Ħin ta’ vjaġġ bir-ritorn tal-midja baxx u stabbli, b’livell baxx ta’ varjanza baxxa u ta’ telf ta’ pakketti, sabiex it-teħid tal-fluss tal-konverżazzjoni jinħass preċiż
It-tim f’OpenAI responsabbli għall-interazzjonijiet tal-IA f’ħin reali reċentement reġa’ ddisinja l-arkitettura tal-istack WebRTC tagħna biex jindirizza tliet restrizzjonijiet li bdew jiġu f'kunflitt fuq skala kbira: it-terminazzjoni tal-midja b’port wieħed għal kull sessjoni ma taqbilx sew mal-infrastruttura ta’ OpenAI, is-sessjonijiet ICE (Interactive Connectivity Establishment) u DTLS (Datagram Transport Layer Security) li jżommu stat jeħtieġu sjieda stabbli u r-routing globali għandu jżomm il-latenza baxxa tal-ewwel qabża. F’din il-pubblikazzjoni, nispjegaw pass pass l-arkitettura maqsuma tar-relay flimkien ma' transriċevitur li bnejna biex nippreservaw l-imġiba standard ta’ WebRTC għall-klijenti, filwaqt li nbiddlu kif il-pakketti jiġu diretti fl-infrastruttura ta’ OpenAI.
WebRTC huwa standard miftuħ għat-trażmissjoni ta’ awdjo, vidjo u dejta b’latenza baxxa bejn il-brawżers, l-apps mobbli u s-servers. Spiss tiġi assoċjata ma’ telefonati fejn il-pari, iżda hija wkoll bażi prattika għal sistemi f’ħin reali bejn klijent u server, għax tistandardizza l-partijiet diffiċli tal-midja interattiva: ICE għall-istabbiliment tal-konnettività u t-traversali tan-NAT (Traduzzjoni tal-Indirizz tan-Netwerk - Network Address Translation), DTLS u SRTP (Protokoll ta' Trasport Sigur f'Ħin Reali - Secure Real-time Transport Protocol) għat-trasport ikkriptat, in-negozjar tal-codecs għall-kompressjoni u d-dekodifikazzjoni tal-awdjo, RTCP (Protokoll ta' Kontroll tat-Trasport f'Ħin Reali - Real-time Transport Control Protocol) għall-kontroll tal-kwalità u karatteristiċi min-naħa tal-klijent bħall-kanċellazzjoni tal-eku u l-buffering tal-varjazzjoni tal-altenza.
Dik l-istandardizzazzjoni hija importanti għall-prodotti tal-IA. Mingħajr WebRTC, kull klijent ikollu bżonn soluzzjoni differenti dwar kif jistabbilixxi konnettività permezz tan-NATs, jikkripta l-midja, jinnegozja l-codecs (il-kodifikaturi-dekodifikaturi magħżula għat-trażmissjoni u d-dekompressjoni) u jadatta għall-kundizzjonijiet tan-network li jinbidlu. B’WebRTC, nistgħu nibnu fuq stack ta’ protokolli li diġà huwa implimentat fil-brawżers u fuq pjattaformi mobbli, filwaqt li niffokaw ix-xogħol tagħna stess fuq l-infrastruttura li tgħaqqad il-midja f’ħin reali mal-mudelli.
Aħna nibnu wkoll fuq l-ekosistema ta’ WebRTC nnifisha, inklużi implimentazzjonijiet maturi b’sors miftuħ u l-ħidma ta’ standardizzazzjoni li żżomm lill-brawżers, l-apps mobbli u s-servers interoperabbli. Ix-xogħol fundamentali ta’ Justin Uberti (wieħed mill-arkitetti oriġinali ta’ WebRTC) u Sean DuBois (il-ħallieq u l-mantenitur ta’ Pion) għamilha possibbli għal timijiet bħal tagħna li jibnu fuq infrastruttura tal-midja ttestjata sew, minflok jerġgħu jivvintaw trasport ta’ livell baxx, kriptaġġ u kontroll tal-konġestjoni. Għandna x-xorti li kemm Justin kif ukoll Sean issa huma kollegi tagħna hawn f’OpenAI u qed jgħinu jiggwidaw kif inressqu WebRTC u l-AI f’ħin reali aktar qrib xulxin.
Għall-IA, l-aktar proprjetà importanti hija li l-awdjo jasal bħala fluss kontinwu. Aġent bil-vuċi jista’ jibda jittraskrivi, jagħmel raġunament, isejjaħ l-għodod, jew jiġġenera diskors waqt li l-utent ikun għadu qed jitkellem, minflok ma jistenna li t-tlugħ ikun komplut. Dik hi d-differenza bejn sistema li tħossha bħal konverżazzjoni u waħda li tinħass qisha push-to-talk.
Ladarba għażilna WebRTC, il-mistoqsija li jmiss kienet fejn għandna ntemmuha (fejn konna se naċċettaw u nkunu sidien tal-konnessjoni WebRTC—pereżempju, fil-marġni) u kif ngħaqqdu dawk is-sessjonijiet mal-backend tal-inferenza. It-terminazzjoni hija importanti għax tiddetermina kif nimmaniġġjaw l-istat tas-sessjoni f’ħin reali, it-trasport tal-midja, ir-routing, il-latenza u l-iżolament tal-fallimenti.
SFU, jew unità ta’ forwarding selettiva, huwa server tal-midja li jrċievi fluss wieħed ta’ WebRTC minn kull parteċipant u jgħaddi l-flussi b’mod selettiv lill-oħrajn. F’dan il-mudell, l-SFU tittermina konnessjoni separata ta’ WebRTC għal kull parteċipant u l-IA tingħaqad bħala parteċipant ieħor fis-sessjoni. Dan jista’ jkun adattat għal prodotti li min-natura tagħhom jinvolvu diversi parteċipanti, bħal sejħiet tal-grupp, klassijiet, jew laqgħat kollaborattivi. Dan iżomm il-codecs tal-awdjo, il-messaġġi RTCP, il-kanali tad-dejta, ir-reġistrazzjoni u l-politika għal kull fluss f’post wieħed.1
Anke fi prodotti client-to-IA, SFU spiss tkun il-punt tat-tluq awtomatiku għax tippermetti lit-timijiet jerġgħu jużaw sistema waħda ppruvata għas-sinjalar, ir-rotot tal-midja, ir-reġistrazzjoni, l-osservabbiltà u estensjonijiet futuri bħat-trasferiment lil operatur uman jew iż-żieda ta’ aktar parteċipanti.
It-tagħbija tax-xogħol tagħna hija differenti. Il-biċċa l-kbira tas-sessjonijiet huma 1:1—utent wieħed jitkellem ma’ mudell wieħed, jew applikazzjoni waħda titkellem ma’ aġent wieħed f’ħin reali—b’sensittività għal-latenza f’kull dawra. Għal dik ix-xejra ta’ traffiku, għażilna mudell ta’ transriċevitur: servizz fit-tarf tal-WebRTC jittermina l-konnessjoni tal-klijent u mbagħad jikkonverti l-midja u l-avvenimenti fi protokolli interni aktar sempliċi għall-inferenza tal-mudell, it-traskrizzjoni, il-ġenerazzjoni tad-diskors, l-użu tal-għodod u l-orkestrazzjoni.
F’dan id-disinn, it-transriċevitur huwa l-uniku servizz li għandu s-sjieda tal-istat tas-sessjoni WebRTC, inklużi l-verifiki tal-konnettività ICE, il-handshake tad-DTLS, il-kodiċijiet tal-kriptaġġ SRTP u ċ-ċiklu tal-ħajja tas-sessjoni. “Terminazzjoni” hawn tfisser li t-transriċevitur huwa l-punt tat-tmiem li jikkompleta dawk il-handshakes u jikkripta jew jiddekripta l-kontenut tal-midja. Iż-żamma ta’ dak l-istat f’post wieħed għamlet is-sjieda tas-sessjoni aktar faċli biex tinftiehem u ppermettiet lis-servizzi backend jiskalaw bħal servizzi ordinarji minflok jaġixxu bħala pari tal-WebRTC huma stess.
Wara li għażilna l-mudell tat-transriċevitur, l-ewwel implimentazzjoni tagħna kienet servizz Go wieħed mibni fuq Pion li jimmaniġġja kemm is-sinjalar u kif ukoll it-terminazzjoni tal-midja. Iħaddem il-vuċi ta’ ChatGPT, il-punt ta’ tmiem WebRTC tal-API f’ħin reali u diversi proġetti ta’ riċerka.
B’mod operazzjonali, is-servizz tat-transriċevitur iwettaq żewġ kompiti:
- Sinjalar: negozjar tal-SDP, għażla tal-codec, kredenzjali tal-ICE u konfigurazzjoni tas-sessjoni
- Midja: Terminazzjoni tal-konnessjonijiet WebRTC downstream u żamma tal-konnessjonijiet upstream mas-servizzi backend għall-inferenza u l-orkestrazzjoni
Ridna li s-servizz jaħdem bħall-bqija tal-infrastruttura tagħna: fuq Kubernetes, fejn il-workloads jistgħu jespandu u jikkuntrattaw u jiċċaqalqu bejn il-hosts hekk kif tinbidel id-domanda. Iżda l-mudell konvenzjonali ta’ WebRTC b’port wieħed għal kull sessjoni mhux adattat għal dak l-ambjent, għax jiddependi fuq firxiet kbar ta’ portijiet UDP pubbliċi li huma diffiċli biex jiġu esposti, assigurati u ppreservati hekk kif il-pods jiżdiedu, jitneħħew jew jiġu skedati mill-ġdid.2
L-ewwel problema kienet il-mudell innifsu ta’ port wieħed għal kull sessjoni. F’livelli għoljin ta’ konkorenza, dan ifisser li jiġu esposti u ġestiti firxiet kbar ħafna ta’ portijiet UDP.
- Il-load balancers tal-cloud u s-servizzi ta’ Kubernetes mhumiex imfassla biex jappoġġjaw għexieren ta’ eluf ta’ portijiet UDP pubbliċi għal kull servizz. Kull firxa addizzjonali żżid il-kumplessità operazzjonali fil-konfigurazzjoni tal-load balancer, fil-kontrolli tas-saħħa, fil-politika tal-firewall u fis-sigurtà tar-rollout.3
- Firxiet kbar ta’ portijiet UDP huma diffiċli biex jiġu ssiġurati, għax iżidu ż-żona li tista’ tintlaħaq minn barra u jagħmlu l-awditjar tal-politika tan-netwerk aktar diffiċli.
- Huma wkoll mhux adattati sew għall-iskalar awtomatiku. Il-Pods jiġu miżjuda, imneħħija u skedati mill-ġdid kontinwament fi Kubernetes. Li tirrikjedi li kull pod jirriżerva u jħabbar firxa kbira u stabbli ta’ portijiet jagħmel dik l-elastiċità fraġli.4
Għalhekk ħafna sistemi WebRTC qed jimxu lejn port UDP wieħed għal kull server, b’demultiplexing fil-livell tal-applikazzjoni wara dak il-port.5
Id-disinji li jużaw port wieħed għal kull server isolvu l-problema tal-għadd tal-ports, iżda jintroduċu problema oħra: kif tinżamm is-sjieda ta’ kull sessjoni fi ħdan flotta.
ICE u DTLS huma protokolli stateful. Il-proċess li ħoloq sessjoni għandu jibqa’ jirċievi l-pakketti ta’ dik is-sessjoni biex ikun jista’ jivvalida l-kontrolli tal-konnettività, ilesti l-handshake tad-DTLS, jiddeċifra SRTP u jipproċessa bidliet aktar tard fis-sessjoni, bħar-ristartjar tal-ICE. Jekk il-pakketti tal-istess sessjoni jispiċċaw fuq proċess differenti, it-twaqqif jista’ ma jirnexxix jew il-midja tista’ tieqaf taħdem.
Dan tana mira speċifika: nesponu superfiċje UDP żgħira u fissa għall-internet pubbliku, filwaqt li xorta nagħmlu routing kull pakkett lejn it-transriċevitur li għandu s-sessjoni WebRTC korrispondenti.
Ivvalutajna diversi modi kif naslu s’hemm, inkluż TURN (Traversal Using Relays around NAT), fejn relay tal-periferija jtemm l-allokazzjonijiet tal-klijenti u jgħaddi t-traffiku f’isimhom.2
Approċċ | Vantaġġi | Żvantaġġi |
IP:port uniku għal kull sessjoni (magħruf ukoll bħala dirett nattiv UDP) | Mogħdija diretta tal-midja mill-klijent għas-server L-ebda saff tat-tgħaddija fil-mogħdija tad-dejta | Teħtieġ port UDP pubbliku wieħed għal kull sessjoni Firxiet estensivi ta’ portijiet huma diffiċli biex jiġu esposti u ssikurati Mhux adattat sew għal Kubernetes u bilanċjaturi tat-tagħbija tal-cloud |
IP:port uniku għal kull server | Marka pubblika UDP ferm iżgħar mill-espożizzjoni għal kull sessjoni Socket kondiviż wieħed għal kull server jista’ jissepara ħafna sessjonijiet | Jaħdem bla xkiel fuq host wieħed, iżda ma jaħdimx waħdu fuq flotta kondiviża bbilanċjata bit-tagħbija Id-demultipleksjar tas-sessjonijiet fuq host wieħed jgħin biss wara li pakkett jasal għand dak il-host; madwar flotta bi bbilanċjar tat-tagħbija, l-ewwel pakkett xorta jista’ jispiċċa fuq l-istanza żbaljata, għalhekk xorta waħda għandek bżonn mod deterministiku biex tidderieġi kull sessjoni lejn il-proċess li għandu s-sjieda tagħha |
Ir-relay TURN (li jtemm il-protokoll) | Il-klijenti għandhom bżonn biss jilħqu l-indirizz u l-port tar-relay TURN Jista’ jiċċentralizza l-politika fuq it-tarf | L-allokazzjonijiet TURN iżidu iterazzjonijiet tal-konfigurazzjoni It-trasferiment jew l-irkupru tal-allokazzjonijiet bejn servers TURN għadu diffiċli |
Forwarder mingħajr stat + terminatur bi stat (relay + transriċevitur ta’ OpenAI) | Firxa pubblika żgħira ta' UDP It-transriċevitur għadu għandu s-sjieda tas-sessjoni WebRTC sħiħa | Iżid qabża waħda ta’ inoltrazzjoni qabel ma l-midja tasal għand it-transriċevitur li għandu s-sjieda tagħha Jeħtieġ koordinazzjoni apposta bejn ir-relay u t-transriċevitur |
L-arkitettura li ħriġna tissepara l-instradament tal-pakketti mit-tmiem tal-protokoll. Is-sinjali xorta jaslu għand it-transriċevitur għall-istabbiliment tas-sessjoni, filwaqt li l-midja tidħol l-ewwel permezz tar-relay. Ir-relay huwa saff ħafif għall-istradament tal-UDP b’impronta pubblika żgħira u t-transriċevitur huwa l-punt ta' tmiem ta’ WebRTC li jżomm l-istat warajh.
Ir-relay ma jiddeċifrax il-midja, ma jħaddimx magni tal-istat ICE u lanqas jipparteċipa fin-negozjar tal-codecs. Jaqra biżżejjed metadejta tal-pakkett biex jagħżel destinazzjoni, imbagħad jgħaddi l-pakkett lit-transriċevitur li għandu s-sessjoni. It-transriċevitur għadu jara fluss normali ta’ WebRTC u għadu jikkontrolla l-istat kollu tal-protokoll. Mill-perspettiva tal-klijent, xejn dwar is-sessjoni WebRTC ma jinbidel.
Ir-rottaġġ tal-ewwel pakkett huwa l-pass ewlieni f’din il-konfigurazzjoni. Relay irid jagħmel routing l-ewwel pakkett mingħand klijent qabel ma teżisti kwalunkwe sessjoni fuq il-mogħdija tal-pakketti nnifisha, minflok ma jieqaf jiddependi fuq servizz estern ta’ tfittxija.
Kull sessjoni WebRTC diġà ġġorr ganċ ta’ rotta nattiv tal-protokoll: il-framment tal-isem tal-utent tal-ICE, jew ufrag, jiġifieri identifikatur qasir li jiġi skambjat waqt it-twaqqif tas-sessjoni u li jerġa’ jidher fil-kontrolli tal-konnettività tal-STUN. Niġġeneraw il-ufrag min-naħa tas-server sabiex ikun fih biss biżżejjed metadata dwar ir-rotta biex ir-relay ikun jista’ jiddetermina l-cluster tad-destinazzjoni u t-transriċevitur propjetarju.
Waqt is-sinjalizzazzjoni, it-transriċevitur jalloka l-istat tas-sessjoni u jirritorna VIP tar-relay kondiviż u port UDP fit-tweġiba SDP. VIP huwa indirizz IP virtwali li jservi bħala l-faċċata għall-flotta ta’ relay; flimkien mal-port, jipprovdi lill-klijent destinazzjoni waħda stabbli, bħal `203.0.113.10:3478`, minkejja li ħafna istanzi ta’ relay jinsabu warajh. L-ewwel pakkett tal-mogħdija tal-midja tal-klijent normalment ikun talba ta’ rbit STUN (Session Traversal Utilities for NAT), li ICE juża biex jivverifika li l-pakketti jistgħu jilħqu l-indirizz imħabbar.
Relay jipproċessa biss kemm meħtieġ minn dak l-ewwel pakkett STUN biex jaqra l-ufrag tas-server, jiddekodifika l-ħjiel tal-instradament u jgħaddi l-pakkett lit-transriċevitur proprjetarju. Kull transriċevitur jisma’ fuq socket UDP kondiviż, jiġifieri punt ta’ tmiem wieħed tas-sistema operattiva marbuta ma’ IP:port intern, mhux socket wieħed għal kull sessjoni. Wara li r-relay joħloq sessjoni mill-IP:port tas-sors tal-klijent għal dik id-destinazzjoni tat-transriċevitur, il-pakketti sussegwenti tad-DTLS, RTP u RTCP jgħaddu fi ħdan is-sessjoni mingħajr ma jerġa’ jiġi dekodifikat l-ufrag.
Is-sessjoni tar-relay hija intenzjonalment minima u tikkonsisti biss f’sessjoni fil-memorja biex tiggwida l-instradament tal-pakketti, flimkien mal-kontaturi meħtieġa għall-monitoraġġ u t-timers għall-iskadenza u t-tindif tas-sessjoni. Din l-għażla tad-disinn iżżomm l-instradament tal-pakketti direttament fuq il-mogħdija tal-pakketti. Jekk relay jerġa’ jibda u jitlef is-sessjoni, il-pakkett STUN li jmiss jerġa’ jibni s-sessjoni mill-ħjiel tar-routing ufrag. Biex dan ikun saħansitra aktar affidabbli, jintuża cache ta’ Redis biex iżomm l-immappjar ta’ <IP tal-klijent + port, IP tat-transriċevitur + port> ladarba tiġi stabbilita r-rotta, sabiex ikun jista’ jiġi rkuprat ħafna aktar kmieni, qabel ma jasal il-pakkett STUN li jmiss.
Ladarba naqqasna s-superfiċje pubblika tal-UDP għal numru żgħir ta’ indirizzi u portijiet stabbli, stajna nimplimentaw l-istess mudell ta’ relay globalment. Global Relay hija l-flotta tagħna ta’ punti ta’ ingress tar-relay iddistribwiti ġeografikament li kollha jimplimentaw l-istess imġiba ta’ għaddija tal-pakketti.
Dħul ġeografiku mifrux iqassar l-ewwel hop mill-klijent għal OpenAI, għax pakkett jista’ jidħol fin-network tagħna f’relay qrib l-utent, kemm ġeografikament u kif ukoll fit-topoloġija tan-network, minflok l-ewwel jaqsam l-internet pubbliku lejn reġjun imbiegħed. F’termini prattiċi, dan ifisser latenza aktar baxxa, inqas varjazzjoni tal-latenza u inqas bursts ta’ telf li jistgħu jiġu evitati qabel ma t-traffiku jilħaq il-backbone tagħna.6
Nużaw id-direzzjoni ġeografika u tal-prossimità ta’ Cloudflare għas-sinjalizzazzjoni sabiex it-talba inizjali HTTP jew WebSocket tasal għand raggruppament ta’ transriċevituri fil-qrib. Il-kuntest tat-talba jiddetermina l-post tas-sessjoni u liema punt ta’ ingress ta’ Global Relay jiġi mħabbar lill-klijent. It-tweġiba SDP tipprovdi l-indirizz ta’ Global Relay, filwaqt li l-ufrag fih biżżejjed informazzjoni biex Global Relay ikun jista’ jirrotta l-midja lejn il-cluster imfassal u biex ir-relay isirilha routing lejn it-transriċevitur tad-destinazzjoni.
Flimkien, is-sinjalar indirizzat skont il-post (geo‑steered) u Global Relay iqiegħdu kemm l-istabbiliment tas-sessjoni (setup) kif ukoll il-midja fuq rotta ta’ dħul qrib, filwaqt li jżommu s-sessjoni ankrata ma’ transriċevitur wieħed. Dan inaqqas il-ħin minn tarf sa tarf għas-sinjalar u għall-ewwel verifika tal-konnettività ICE u b’hekk iqassar direttament kemm idum l-utent jistenna qabel ma jkun jista’ jibda jitkellem.
Ktibna s-servizz ta’ relay f’Go u żammejna l-implimentazzjoni ristretta apposta. Fuq Linux, l-istack tan-networking tal-kernel jirċievi pakketti UDP mill-interfaċċa tan-network tal-magna u jwassalhom għal socket, li huwa l-punt ta' tmiem tas-sistema operattiva li proċess jaqra minnu wara li jorbot IP:Port. Relay jaħdem fl-ispazju tal-utent, għalhekk proċess Go regolari jaqra l-intestaturi tal-pakketti minn dak is-socket, jaġġorna ammont żgħir ta’ stat tal-fluss u jgħaddi l-pakketti mingħajr ma jtemm WebRTC. Ma kellniex bżonn l-ebda qafas ta’ kernel-bypass, li kien jippermetti lil proċess fl-ispazju tal-utent jagħmel polling direttament tal-kjuwijiet tan-netwerk għal rati ogħla ta’ pakketti, iżda kien iżid ukoll il-kumplessità operattiva.
Għażliet ewlenin tad-disinn:
- L-ebda terminazzjoni tal-protokoll: Ir-Relay janalizza biss l-headers STUN/ufrag; juża l-istat fil-cache għal DTLS, RTP u RTCP sussegwenti u jżomm il-pakketti mhux iddeċifrati.
- Stat effimeru: Iżomm mappa żgħira, b’timeout qasir u fil-memorja, mill-indirizz tal-klijent għad-destinazzjoni tat-transriċevitur għall-istat tal-fluss u l-osservabbiltà.
- Skalabbiltà orizzontali: Diversi istanzi ta’ relay jaħdmu b’mod parallel wara load balancer. L-istat mhuwiex stat WebRTC riġidu, għalhekk ir-ristartjar jikkawża telf minimu ta’ traffiku u rkupru rapidu tal-fluss.
Miżuri ta’ effiċjenza:
SO_REUSEPORThija għażla ta’ socket ta’ Linux li tippermetti lil diversi workers tar-relay fuq l-istess magna jorbtu l-istess port UDP. Il-kernel imbagħad iqassam il-pakketti deħlin fost dawk il-workers u b’hekk tiġi evitata konġestjoni ta’ read-loop waħda.runtime.LockOSThreadtorbot kull goroutine li taqra l-UDP ma’ thread speċifiku tas-sistema operattiva (OS). Meta jiġi kkombinat ma’SO_REUSEPORT, dan għandu t-tendenza li jżomm il-pakketti mill-istess fluss (l-IP:Port tas-sors u tad-destinazzjoni flimkien mal-protokoll) fuq l-istess qalba tas-CPU u b’hekk itejjeb il-lokalità tal-cache u jnaqqas il-bdil tal-kuntest.- Buffers allokati minn qabel u kopjar minimu jżommu l-overhead tal-parsing u tal-allokazzjoni baxx sabiex tiġi evitata l-ġabra tal-iskart f’Go.
Din l-implimentazzjoni immaniġġjat it-traffiku globali tagħna tal-midja f’ħin reali b’impronta ta’ relay relattivament żgħira, għalhekk żammejna d-disinn aktar sempliċi minflok ma adottajna triq bypass tal-kernel.
Din l-arkitettura tippermettilna nħaddmu l-midja ta’ WebRTC f’Kubernetes mingħajr ma nesponu eluf ta’ portijiet UDP. Dan huwa importanti għaliex superfiċje UDP iżgħar u fissa hija aktar faċli biex tiġi protetta u biex it-tagħbija tagħha tiġi bbilanċjata u tippermetti lill-infrastruttura tiskala mingħajr ma jiġu riservati firxiet kbar ta’ portijiet pubbliċi. B’appoġġ aħjar għall-infrastruttura minn Kubernetes u aktar sigurtà minħabba superfiċje iżgħar ta’ attakk, dan id-disinn jippreserva wkoll l-imġiba standard ta’ WebRTC għall-klijenti u jikkonferma li disinn mingħajr SFU kien l-għażla predefinita t-tajba għall-workload tagħna. Il-biċċa l-kbira tas-sessjonijiet tagħna huma minn punt għal punt, sensittivi għal-latenza u aktar faċli biex jiġu skalati meta s-servizzi ta’ inferenza ma jkollhomx għalfejn iġibu ruħhom bħal peers tal-WebRTC.
Il-lezzjoni usa’ hija li l-aħjar post fejn iżżid il-kumplessità huwa f’saff irqiq ta’ routing, mhux f’kull servizz tal-backend u mhux f’imġiba personalizzata tal-klijent. Il-kodifikazzjoni tal-metadata tar-routing f’qasam nattiv tal-protokoll tatna routing deterministiku tal-ewwel pakkett, impronta UDP pubblika żgħira u biżżejjed flessibbiltà biex inpoġġu l-ingress qrib l-utenti madwar id-dinja.
Xi għażliet kienu speċjalment importanti:
- Ippreserva s-semantika tal-protokoll fit-tarf. Il-klijenti jibqgħu jikkomunikaw permezz ta’ WebRTC standard u b’hekk l-interoperabbiltà mal-brawżers u mal-apparat mobbli tibqa’ intatta.
- Żomm l-istati tas-sessjoni importanti f’post wieħed. It-transriċevitur jimmaniġġja ICE, DTLS, SRTP u ċ-ċiklu tal-ħajja tas-sessjoni; ir-relay jgħaddi biss il-pakketti.
- Irrotta abbażi ta' informazzjoni diġà preżenti fil-konfigurazzjoni. L-ICE ufrag tana hook tar-routing tal-ewwel pakkett mingħajr ma żied dipendenza ta’ tiftix fil-hot path.
- Ottimizza għall-każ komuni qabel ma tuża l-bypass tal-kernel. Implimentazzjoni Go ffukata b’użu bir-reqqa ta’
SO_REUSEPORT, ippinnjar tat-threads u parsing b’allokazzjoni baxxa kienet biżżejjed għat-tagħbija tax-xogħol tagħna.
L-intelliġenza artifiċjali tal-vuċi f’ħin reali taħdem biss meta l-infrastruttura tagħmel il-latenza tinħass inviżibbli. Għalina, dan kien ifisser li nbiddlu l-għamla tal-iskjerament tagħna ta’ WebRTC mingħajr ma nbiddlu dak li l-klijenti jistennew minn WebRTC innifsu.
Awtur
Referenzi
2. GitHub - l7mp/stunner: A Kubernetes media gateway for WebRTC(jinfetaħ f’tieqa ġdida)
3. WebRTC Ports in a nutshell [Examples] - BlogGeek.me(jinfetaħ f’tieqa ġdida)
4. Deploy to Kubernetes - LiveKit docs(jinfetaħ f’tieqa ġdida)
6. Cloudflare Calls: millions of cascading trees all the way down(jinfetaħ f’tieqa ġdida)


