OpenAI ዝቅተኛ-መዘግየት የድምፅ ሰው ሠራሽ አስተውሎትን (AI) በስፋት እንዴት እንደሚያቀርብ
በYi Zhang እና William McDonald፣ የቴክኒክ ሠራተኞች አባላት
የድምፅ ሰው ሠራሽ አስተውሎት (AI) ተፈጥሯዊ ስሜት የሚሰጠው ውይይቱ በንግግር ፍጥነት ሲካሄድ ብቻ ነው። አውታረ መረቡ እንቅፋት ሲሆን፣ ሰዎች ይህን ወዲያውኑ እንደ ምቾት የሚነሱ ዝምታዎች፣ የተቀነጠቡ መቆራረጦች፣ ወይም እንደ ዘገየ ጣልቃ ገብነት አድርገው ይሰሙታል። ይህ ለChatGPT ድምፅ፣ በእውነተኛ ጊዜ API ለሚገነቡ ገንቢዎች፣ በይነተገናኝ የሥራ ፍሰቶች ውስጥ ለሚሰሩ ወኪሎች እና ተጠቃሚው አሁንም እያወራ እያለ ኦዲዮን ማስኬድ ለሚያስፈልጋቸው ሞዴሎች አስፈላጊ ነው።
በOpenAI መለኪያ፣ ይህ ወደ ሦስት ተጨባጭ መስፈርቶች ይተረጎማል፦
- ከ 900 ሚሊዮን በላይ ሳምንታዊ ንቁ ተጠቃሚዎች ዓለም አቀፍ ተደራሽነት
- ፈጣን የግንኙነት ማዋቀር ስለዚህ አንድ ተጠቃሚ ክፍለ ጊዜ እንደጀመረ መናገር እንዲጀምር
- ዝቅተኛ እና የተረጋጋ የሚዲያ የደርሶ መልስ ጊዜ፣ ከዝቅተኛ ጫጫታ እና የፓኬት እጦታ ጋር፣ ስለዚህ ተራ መጠበቅ ጥርት ያለ ስሜት ይፈጥራል
የእውነተኛ ጊዜ የሰው ሠራሽ አስተውሎት (AI) መስተጋብር ኃላፊነት የወሰደው የOpenAI ቡድን በቅርቡ የWebRTC ንብርብራችንን እንደገና በመተየብ ደረጃ ላይ መጋጠም የጀመሩ ሦስት ገደቦችን ለመፍታት አስችሏል፡ የአንድ-ፖርት-በ-ክፍለ ጊዜ የሚዲያ መቋረጥ ለOpenAI መሠረተ ልማት በተገቢነት አይመጥንም፣ ሁኔታዊ ICE (በይነተገናኝ ግንኙነት ማቋቋም) እና DTLS (Datagram Transport Layer Security፣ የውሂብግራም ትራንስፖርት ንብርብር ደኅንነት) ክፍለ ጊዜዎች የተረጋጋ ባለቤትነት ያስፈልጋቸዋል፣ እና ዓለም አቀፍ አቅጣጫ አወጣጥ የመጀመሪያ-ሆፕ መዘግየት ዝቅተኛ መሆን አለበት። በዚህ ጽሑፍ ውስጥ፣ ፓኬቶች በOpenAI መሠረተ ልማት ውስጥ እንዴት እንደሚተላለፉ እየለወጥን፣ ለደንበኞች መደበኛ የWebRTC ባህሪን ለመጠበቅ የገነባነውን የተከፋፈለ ቅብብሎሽ እና ትራንስሲቨር አርክቴክቸር እናያለን።
WebRTC በአሳሾች፣ በሞባይል መተግበሪያዎች እና በሰርቨሮች መካከል ዝቅተኛ መዘግየት ያለው ኦዲዮ፣ ቪዲዮ እና ውሂብ ለመላክ ክፍት መስፈርት ነው። ብዙውን ጊዜ ከአቻ-ለአቻ ጥሪ ጋር የተያያዘ ነው፣ ነገር ግን በይነተገናኝ ሚዲያዎች ውስጥ ያሉትን ጠንካራ ክፍሎች መደበኛ ስለሚያደርግ ለደንበኛ-ለሰርቨር የእውነተኛ ጊዜ ሥርዓቶች ተግባራዊ መሠረት ነው፦ ለግንኙነት ማቋቋም ICE እና NAT (የአውታረ መረብ አድራሻ ትርጉም) መተላለፊያ፣ ለተመሰጠረ ትራንስፖርት DTLS እና SRTP (Secure Real-time Transport Protocol፣ ደኅንነቱ የተጠበቀ የእውነተኛ ጊዜ የትራንስፖርት ፕሮቶኮል)፣ ለመጭመቅ እና ለዲኮድ ድምፅ የኮዴክ ድርድር፣ ለጥራት ቁጥጥር RTCP (Real-time Transport Control Protocol፣ የእውነተኛ ጊዜ የትራንስፖርት ቁጥጥር ፕሮቶኮል) እና እንደ የአስተጋቢ መሰረዝ እና ጫጫታ ማቋረጫ ያሉ የደንበኛ-ጎን ባህሪያት።
ያ ደረጃ አጠባበቅ ለሰው ሠራሽ አስተውሎት (AI) ምርቶች አስፈላጊ ነው። WebRTC ባይኖርም፣ እያንዳንዱ ደንበኛ በNATs መካከል ግንኙነትን እንዴት መፍጠር እንደሚቻል፣ ሚዲያዎችን እንዴት ማመስጠር እንደሚቻል፣ ኮዴኮችን (ለማስተላለፊያ እና ለመጭመቅ የተመረጡት የኮደር-ዲኮደሮች) እንዴት መደራደር እንደሚቻል እና ከተለዋዋጭ የአውታረ መረብ ሁኔታዎች ጋር እንዴት መላመድ እንደሚቻል የተለየ መልስ ይፈልጋል። በWebRTC፣ በአሳሾች እና በሞባይል መድረኮች ላይ አስቀድሞ በተተገበረ የፕሮቶኮል ቁልል ላይ መገንባት እንችላለን፣ የራሳችንን ሥራ በእውነተኛ ጊዜ ሚዲያዎችን ከሞዴሎች ጋር የሚያገናኘውን መሠረተ ልማት ላይ ማተኮር እንችላለን።
እንዲሁም በWebRTC ሥነ-ምህዳር ላይ እንገነባለን፣ ይህም የተሻሻሉ ክፍት ምንጭ አተገባበሮችን እና አሳሾችን፣ የሞባይል መተግበሪያዎችን እና ሰርቨሮችን እርስ በእርስ እንዲተሳሰሩ የሚያደርግ መደበኛ ሥራ ያካትታል። የJustin Uberti (ከWebRTC የመጀመሪያ አርክቴክቶች አንዱ) እና የSean DuBois (የPion ፈጣሪ እና አስተናጋጅ) መሠረታዊ ሥራዎች እንደኛ ያሉ ቡድኖችን ዝቅተኛ ደረጃ ያለው የትራንስፖርት፣ የምስጠራ እና የመጨናነቅ ቁጥጥር ባህሪን እንደገና ከመፍጠር ይልቅ በጦርነት የተፈተኑ የሚዲያ መሠረተ ልማቶችን መገንባት እንዲችሉ አስችሏቸዋል። Justin እና Sean አሁን እዚህ ኦፕንአይ ውስጥ ባልደረቦች በመሆናቸው እድለኞች ነን፣ በዚህም WebRTC እና ቅጽበታዊ AIን እንዴት ማቀራረብ እንደምንችል መመሪያ በመስጠት ይረዳሉ።
ለሰው ሠራሽ አስተውሎት (AI)፣ በጣም አስፈላጊው ባህሪ ድምፅ እንደ ቀጣይ ፍሰት መድረሱ ነው። ተናጋሪ ወኪል ተጠቃሚው እያወሩ እያለ ሙሉ ሰቀላ ከመጠበቅ ይልቅ መተርጎም፣ ማመዛዘን፣ የጥሪ መሣሪያዎችን ወይም ንግግርን ማመንጨት መጀመር ይችላል። ይህ የውይይት ስሜት ባለው እና በ ለመናገር-ጫን-ይበሉ በሚመስል ሥርዓት መካከል ያለው ልዩነት ነው።
WebRTCን አንዴ ከመረጥን በኋላ፣ የሚቀጥለው ጥያቄ የት ማቋረጥ እንዳለብን (የWebRTC ግንኙነትን የት እንደምንቀበል እና ባለቤት እንደሆንን—ለምሳሌ፣ ጠርዝ ላይ) እና እነዚያን ክፍለ ጊዜዎች ከማጠቃለያው የኋላ ክፍል ጋር እንዴት ማገናኘት እንደሚቻል ነበር። ማቋረጥ አስፈላጊ ነው ምክንያቱም የእውነተኛ ጊዜ ክፍለ ጊዜ ሁኔታን፣ የሚዲያ ትራንስፖርትን፣ አቅጣጫን፣ መዘግየትን እና ያለመሳካት ማግለልን እንዴት እንደምናስተናግድ ይወስናል።
SFU ወይም የተመረጠ የማስተላለፊያ ክፍል፣ ከእያንዳንዱ ተሳታፊ አንድ የWebRTC ዥረት የሚቀበል እና ዥረቶችን ወደ ሌሎች የሚልክ የሚዲያ ሰርቨር ነው። በዚህ ሞዴል፣ SFU ለእያንዳንዱ ተሳታፊ የተለየ የWebRTC ግንኙነትን ያቋርጣል፣ እና ሰው ሠራሽ አስተውሎት (AI) በክፍለ-ጊዜው ውስጥ እንደ ሌላ ተሳታፊ ይቀላቀላል። ይህ እንደ የቡድን ጥሪዎች፣ የመማሪያ ክፍሎች ወይም የትብብር ስብሰባዎች ላሉ በተፈጥሯቸው በርካታ ወገን ላላቸው ምርቶች ተስማሚ ሊሆን ይችላል። ይህ የድምፅ ኮዴኮችን፣ የRTCP መልዕክቶች፣ የውሂብ ቻናሎች፣ መቅዳትን እና የእያንዳንዱ ዥረት ፖሊሲን በአንድ ቦታ ያስቀምጣል።1
በደንበኛ-ወደ-ሰው ሠራሽ አስተውሎት (AI) ምርቶች ውስጥ እንኳን፣ SFU ብዙውን ጊዜ ነባሪ የመነሻ ነጥብ ነው ምክንያቱም ቡድኖች ለምልክት፣ ለሚዲያ ማስተላለፊያ፣ ለቀረጻ፣ ለታዛቢነት እና እንደ ሰው ማስተላለፍ ወይም ተጨማሪ ተሳታፊዎችን ለመጨመር ያሉ የወደፊት ማራዘሚያዎችን አንድ የተረጋገጠ ሥርዓት እንደገና እንዲጠቀሙ ያስችላቸዋል።
የእኛ የሥራ ጫና የተለየ ነው። አብዛኛዎቹ ክፍለ ጊዜዎች 1፡1 ናቸው—አንድ ተጠቃሚ ከአንድ ሞዴል ጋር ሲነጋገር፣ ወይም አንድ መተግበሪያ ከአንድ የእውነተኛ ጊዜ ወኪል ጋር ሲነጋገር—በእያንዳንዱ ዙር የመዘግየት ትብነት አለው። ለዚያ የትራፊክ አይነት፣ የትራንሲቨር ሞዴል መርጠናል፡ የWebRTC ጠርዝ አገልግሎት የደንበኛውን ግንኙነት ያቋርጣል ከዚያም ሚዲያዎችን እና ዝግጅቶችን ለሞዴል ማጠቃለያ፣ ለጽሑፍ ቅጂ፣ ለንግግር ማመንጨት፣ ለመሣሪያ አጠቃቀም እና ለማደራጀት ወደ ቀላል ውስጣዊ ፕሮቶኮሎች ይለውጣል።
በዚህ ንድፍ ላይ፣ ትራንሲቨር የWebRTC ክፍለ ጊዜ ሁኔታ ባለቤት የሆነ ብቸኛው አገልግሎት ሲሆን፣ ይህም የICE የግንኙነት ፍተሻዎችን፣ የDTLS ግንኙነት፣ የSRTP ምስጠራ ቁልፎችን እና የክፍለ ጊዜ የሕይወት ዑደትን ያካትታል። እዚህ ላይ «መቋረጥ» ማለት ትራንሲቨሩ እነዚያን የግንኙነት ሂደቶች የሚያጠናቅቅ እና ሚዲያውን የሚያመሰጥር ወይም ምስጠራውን የሚፈታ መጨረሻ ነጥብ ነው ማለት ነው። ያንን ሁኔታ በአንድ ቦታ ማቆየት የክፍለ ጊዜ ባለቤትነትን ለማመዛዘን ቀላል አድርጎታል፣ እና የኋላ ክፍል አገልግሎቶችን እንደ WebRTC እኩያ ከመሆን ይልቅ እንደ ተራ አገልግሎቶች እንዲሰፉ አስችሏቸዋል።
የትራንሲቨር ሞዴሉን ከመረጥን በኋላ፣ የመጀመሪያ ትግበራችን በPion ላይ የተገነባ እና ሲግናል መስጫም ሆነ የሚዲያ መቋረጥን የሚያስተናግድ አንድ የGo አገልግሎት ነበር። የChatGPT ድምፅን፣ የእውነተኛ ጊዜ API's WebRTC የመጨረሻ ነጥብን እና በርካታ የምርምር ፕሮጀክቶችን ያጎላብታል።
በአሠራር ረገድ፣ የትራንሲቨር አገልግሎቱ ሁለት ተግባራት ያከናውናል፡፡
- ሲግናል መስጠት፦ የSDP ድርድር፣ የኮዴክ ምርጫ፣ የICE ማረጋገጫ መረጃዎች እና የክፍለ ጊዜ ውቅር
- ሚዲያ፦ የታች የWebRTC ግንኙነቶችን ማቋረጥ እና ለኢንፈረንስ እና ለማደራጀት የኮድ የጀርባ ክፍል አገልግሎቶችን የላይ ግንኙነት መጠበቅ
አገልግሎቱ እንደ የተቀረው የመሠረተ ልማታችን እንዲሠራ ፈልገን ነበር፦ በKubernetes፣ የሥራ ጫናዎች ሊጨምሩና ሊቀንሱ የሚችሉበት እና ፍላጎት ሲቀየር በአስተናጋጆች መካከል የሚዘዋወሩበት። ነገር ግን የተለመደው የአንድ-መሰኪያ-በ-ክፍለ-ጊዜ የWebRTC ሞዴል ለዚያ አካባቢ በደንብ አይመጥንም፣ ምክንያቱም ፖዶች ሲታከሉ፣ ሲወገዱ ወይም እንደገና ሲቀጠሩ ለማጋለጥ፣ ለመጠበቅ እና ለመጠበቅ አስቸጋሪ በሆኑ ትላልቅ የህዝብ UDP ወደቦች ክልሎች ላይ የተመሠረተ ነው።2
የመጀመሪያው ችግር የአንድ-መሰኪያ-በ-ክፍለ-ጊዜ ሞዴል ራሱ ነበር። በከፍተኛ ተመሳሳይነት፣ ይህ ማለት በጣም ትልቅ የUDP ወደብ ክልሎችን ማጋለጥ እና ማስተዳደር ማለት ነው።
- የክላውድ ጭነት ሚዛናዊ ማድረጊያዎች እና የKubernetes አገልግሎቶች በአንድ አገልግሎት በአስር ሺዎች የሚቆጠሩ ሕዝባዊ የUDP መሰኪያዎች ለመደገፍ የተነደፉ አይደሉም። እያንዳንዱ ተጨማሪ ክልል በጭነት ሚዛን ውቅር፣ በጤና ፍተሻ፣ በፋየርዎል ፖሊሲ እና በስርጭት ደኅንነት ውስጥ የአሠራር ውስብስብነትን ይጨምራል።3
- ትላልቅ የUDP መሰኪያ ክልሎች ከውጭ ሊደረስበት የሚችል የገጽታ ስፋትን ስለሚያሰፉ እና የአውታረ መረብ ፖሊሲን ኦዲት ለማድረግ አስቸጋሪ ስለሚያደርጉት ደኅንነቱ የተጠበቀ ለማድረግ አስቸጋሪ ናቸው።
- እነሱም ለራስ-ሰር ማስፋፋት ተስማሚ አይደሉም። ፖዶች በKubernetes ውስጥ ያለማቋረጥ ይታከላሉ፣ ይወገዳሉ እና እንደገና ይዘጋጃሉ። እያንዳንዱ ፖድ ትልቅ የተረጋጋ የመሰኪያ ክልል እንዲያስቀምጥ እና እንዲያስተዋውቅ ማስገደድ ያንን የመለጠጥ ችሎታ ተሰባሪ ያደርገዋል። 4
ለዚህም ነው ብዙ የWebRTC ሲስተሞች በአንድ ሰርቨር ወደ አንድ ነጠላ የ UDP ወደብ የሚንቀሳቀሱት፣ ከዚያ ወደብ በስተጀርባ የመተግበሪያ ደረጃ ዲሙልቲፕሌክሽን ያለው።5
የአንድ-መሰኪያ-በ-ሰርቨር ንድፎች የወደብ ብዛትን ይፈታሉ፣ ነገር ግን ሁለተኛ ችግር ያመጣሉ፦ ይህም በእያንዳንዱ ክፍለ ጊዜ በአንድ ኃይል ላይ የባለቤትነት መብት ይጠብቃል።
ICE እና DTLS ሁኔታ የሚይዙ ፕሮቶኮሎች ናቸው። ክፍለ ጊዜን የፈጠረው ሂደት የግንኙነት ፍተሻዎችን ማረጋገጥ፣ የDTLS የእጅ ጭብጨባ ማጠናቀቅ፣ የSRTP ምስጠራ ማንሳት እና እንደ ICE ዳግም ማስጀመር ያሉ የክፍለ ጊዜ ለውጦችን ማስኬድ እንዲችል የክፍለ ጊዜውን ፓኬቶች መቀበል መቀጠል አለበት። ለተመሳሳይ ክፍለ ጊዜ የሚሆኑ ፓኬቶች በተለየ ሂደት ላይ ቢወድቁ፣ ማዋቀር ሊበላሽ ይችላል ወይም ሚዲያ ሊሰበር ይችላል።
ይህም የተወሰነ ግብ ሰጥቶናል፡ ትንሽ፣ ቋሚ የ UDP ገጽን ለሕዝብ ኢንተርኔት ማጋለጥ፣ እያንዳንዱን ፓኬት ወደ ተዛማጅ የWebRTC ክፍለ ጊዜ ባለቤት ወደሆነው ትራንስክሪፕተር እያዞረ።
ወደዚያ ለመድረስ በርካታ መንገዶችን ገምግመናል፣ ይህም TURN (በNAT ዙሪያ ቅብብሎሾችን በመጠቀም የሚደረግ ጉዞ)፣ የጠርዝ ቅብብሎሽ የደንበኛ ምደባዎችን የሚያቋርጥ እና በእነሱ ምትክ ትራፊክን የሚያስተላልፍበትን መንገድ ያካትታል።2
አቀራረብ | ጥቅሞች | ጉዳቶች |
ለእያንዳንዱ ክፍለ ጊዜ ልዩ IP:መሰኪያ (ተወላጅ ቀጥተኛ UDP በመባልም ይታወቃል) | ቀጥተኛ ከደንበኛ-ወደ-ሰርቨር የሚዲያ መንገድ በውሂብ መንገዱ ውስጥ ምንም የማስተላለፊያ ንብርብር የለም | በአንድ ክፍለ ጊዜ አንድ ይፋዊ የUDP መሰኪያ ይፈልጋል ሰፊ የፖርት ክልሎችን ማጋለጥ እና ደኅንነታቸውን ማስጠበቅ አስቸጋሪ ነው ለKubernetes እና ለክላውድ ጭነት ሚዛናዊ ማድረጊያዎች ደካማ ተስማሚነት |
ልዩ IP፦በእያንዳንዱ ሰርቨር መሰኪያ | ከክፍለ-ጊዜው ተጋላጭነት በጣም ያነሰ የሕዝብ UDP አሻራ በአንድ ሰርቨር አንድ የተጋራ ሶኬት ብዙ ክፍለ ጊዜዎች መፍታት ይችላል | በአንድ አስተናጋጅ ላይ ብቻውን ይሠራል፣ ነገር ግን በተጋራ ጭነት-ሚዛናዊ መርከቦች ላይ ብቻውን አይሠራም በአንድ አስተናጋጅ ላይ የክፍል ጊዜ ክፍፍል የሚረዳው ፓኬት ወደዚያ አስተናጋጅ ከደረሰ በኋላ ብቻ ነው፤ በጭነት ሚዛናዊ መርከቦች ላይ፣ የመጀመሪያው ፓኬት በተሳሳተ ሁኔታ ላይ ሊወድቅ ይችላል፣ ስለዚህ እያንዳንዱን ክፍለ ጊዜ ወደ ባለቤቱ ሂደት ለመምራት አሁንም የተወሰነ መንገድ ያስፈልግዎታል። |
TURN ቅብብሎሽ (ፕሮቶኮል-ማቋረጥ) | ደንበኞች የሚያስፈልጋቸው ወደ TURN ቅብብሎሽ አድራሻ እና መሰኪያ መድረስ ብቻ ነው ፖሊሲውን በጠርዝ ላይ ማማከል ይችላል | የTURN ምደባዎች የማዋቀሪያ ዙር ጉዞዎችን ያክላሉ በTURN ሰርቨሮች ላይ የተመደቡትን ማዛወር ወይም መልሶ ማግኘት አሁንም አስቸጋሪ ነው |
ሁኔታ አልባ አስተላላፊ + ባለ ሁኔታ አቋራጭ (የOpenAI ቅብብሎሽ + ትራንሲቨር) | አነስተኛ ይፋዊ የUDP አሻራ ትራንሲቨሩ አሁንም የመላው የWebRTC ክፍለ ጊዜ ባለቤት ነው | ሚዲያው ባለቤት ከሆነው ትራንሲቨር ጋር ከመድረሱ በፊት አንድ የማስተላለፍ ዝላይ ያክላል በቅብብሎሽ እና በትራንሲቨር መካከል ብጁ ቅንጅት ያስፈልጋል |
የላክነው አርክቴክቸር የፓኬት ማስተላለፊያን ከፕሮቶኮል መቋረጥ ይለያል። ሲግናል መስጠት አሁንም ለክፍለ ጊዜ ማዋቀር ወደ ትራንሲቨሩ ይደርሳል፣ ሚዲያ ደግሞ በመጀመሪያ በቅብብሎሽ በኩል ይገባል። ቅብብሎሽ አነስተኛ የህዝብ ተገናኝነት ያለው ቀላል የ UDP ማስተላለፊያ ንብርብር ነው፣ ትራንሲቨሩም ከጀርባው ያለ ሁኔታ የሚያከብር የWebRTC መጨረሻ ነጥብ ነው።
ቅብብሎሹ የሚዲያ ምስጠራ አያነሳም፣ የICE ሁኔታ ማሽኖችን አያሠራም፣ እና በኮዴክ ድርድር ውስጥ አይሳተፍም። መዳረሻ ለመምረጥ የሚያስችል በቂ የፓኬት ሜታዳታ ያነባል፣ ከዚያ ፓኬቱን ክፍለ ጊዜውን ባለቤት ወደሆነው ትራንሲቨር ያስተላልፋል። ትራንሲቨሩ አሁንም መደበኛ የWebRTC ፍሰትን ያያል እና ሁሉንም የፕሮቶኮል ሁኔታ ይቆጣጠራል። ከደንበኛው ዕይታ አንጻር፣ በWebRTC ክፍለ ጊዜው ላይ ምንም ለውጥ አይኖርም።
የመጀመሪያ-ፓኬት ማስተላለፍ በዚህ ማዋቀር ውስጥ ቁልፍ እርምጃ ነው። ቅብብሎሹ በውጫዊ የፍለጋ አገልግሎት ላይ ለአፍታ ከመቆም ይልቅ፣ ማንኛውም ክፍለ ጊዜ በፓኬት መንገድ ላይ ከመኖሩ በፊት የመጀመሪያውን ፓኬት ከደንበኛው ማስተላለፍ አለበት።
እያንዳንዱ የWebRTC ክፍለ ጊዜ አስቀድሞ የፕሮቶኮል-ቤተኛ የማስተላለፊያ መንጠቆ አለው፦ የICE የተጠቃሚ ስም ክፍልፋይ ወይም ufrag፣ በክፍለ-ጊዜ ማዋቀር ወቅት የሚለዋወጥ እና በSTUN የግንኙነት ፍተሻዎች ውስጥ የሚስተጋባ አጭር መለያ። ለቅብብሎሽ የመዳረሻ ክላስተር እና የባለቤትነት ማስተላለፊያውን ለመገመት የሚያስችል በቂ የማዞሪያ ዲበ ውሂብ እንዲኖረው በማድረግ የሰርቨር-ጎን ufragን እናመነጫለን።
በሲግናል መስጠት ወቅት፣ አስተላላፊው የክፍለ ጊዜ ሁኔታን ይመድባል እና በSDP መልስ ውስጥ የተጋራ ቅብብሎሽ VIP እና UDP ወደብ ይመልሳል። VIP ከቅብብሎሽ ኃይሉ ፊት ለፊት የሚገኝ ምናባዊ የIP አድራሻ ነው፤ ምንም እንኳን ብዙ የቅብብሎሽ ምሳሌዎች ከጀርባው ቢኖሩም ከመሰኪያው ጋር ሲጣመር ለደንበኛው እንደ «203.0.113.10:3478» ያለ አንድ የተረጋጋ መዳረሻ ይሰጠዋል። የደንበኛው የመጀመሪያው የሚዲያ-መንገድ ፓኬት አብዛኛውን ጊዜ የSTUN (የክፍለ ጊዜ ዝውውር መገልገያዎች ለNAT) ማሰሪያ ጥያቄ ሲሆን፣ ICE ፓኬቶቹ በማስታወቂያው አድራሻ ላይ መድረስ እንደሚችሉ ለማረጋገጥ ይጠቀምበታል።
ቅብብሎሽ የሰርቨር ufragን ለማንበብ፣ የማዞሪያ ፍንጩን ለመፍታት እና ፓኬቱን ወደ ባለቤት አስተላላፊው ለማስተላለፍ የመጀመሪያውን የSTUN ፓኬት በቂ ትንታኔ ይሰጣል። እያንዳንዱ ትራንሲቨር በተጋራ የUDP ሶኬት ላይ ያዳምጣል፣ ይህም ማለት አንድ የሥርዓተ ክወና የመጨረሻ ነጥብ ከውስጣዊ IP፡መሰኪያ ጋር የተሳሰረ እንጂ፣ በአንድ ክፍለ ጊዜ አንድ ሶኬት አይደለም። ቅብብሎሽ ከደንበኛው ምንጭ IP:መሰኪያ የትራንሲቨር መዳረሻ ክፍለ ጊዜ ከፈጠረ በኋላ፣ የሚቀጥሉት DTLS፣ RTP እና RTCP ፓኬቶች ufrag ን እንደገና ሳይፈቱ በክፍለ ጊዜው ውስጥ ይፈስሳሉ።
የቅብብሎሽ ክፍለ ጊዜ ሆን ተብሎ አነስተኛ የተደረገ ሲሆን፣ የፓኬት ማስተላለፍን ለማሳወቅ በማስታወሻ ውስጥ የሚደረግ ክፍለ ጊዜን ብቻ፣ ለክትትል አስፈላጊ ከሆኑ ቆጣሪዎች እና ለክፍለ ጊዜ ማብቂያ እና ጽዳት የሰዓት ቆጣሪዎች ጋር ያካትታል። ይህ የንድፍ ምርጫ የፓኬት ማስተላለፍን በቀጥታ በፓኬት መንገድ ላይ እንዲቆይ ያደርጋል። ቅብብሎሽ እንደገና ከተጀመረ እና ክፍለ ጊዜውን ካጣ፣ የሚቀጥለው የSTUN ፓኬት ክፍለ ጊዜ ከufrag ራውተር ፍንጭ እንደገና ይገነባል። የበለጠ አስተማማኝ ለማድረግ፣ የሚቀጥለው የSTUN ፓኬት ከመምጣቱ በፊት እጅግ ቀደም ብሎ መልሶ ማግኘት እንዲቻል የ <የደንበኛ IP + መሰኪያ፣ ትራንሲቨር IP + መሰኪያ> ካርታ ለመያዝ የRedis መሸጎጫ ይሰማራል።
የሕዝብ UDP ገጽን ወደ ጥቂት የተረጋጉ አድራሻዎች እና መሰኪያዎች ካቀረብን በኋላ፣ በዓለም አቀፍ ደረጃ ተመሳሳይ የቅብብሎሽ ንድፍ ልናሰማራ እንችላለን። ዓለም አቀፍ ቅብብሎሽ ተመሳሳይ የፓኬት ማስተላለፊያ ባህሪን የሚተገብሩ በጂኦግራፊያዊ መልኩ የተከፋፈሉ የቅብብሎሽ መግቢያ ነጥቦች ዝርዝራችን ነው።
ሰፊ ጂኦግራፊያዊ መግቢያ የመጀመሪያውን ከደንበኛ-ወደ-OpenAI ዝላይ ያሳጥረዋል ምክንያቱም አንድ ፓኬት ወደ አውታረ መረባችን ሊገባ የሚችለው በጂኦግራፊም ሆነ በአውታረ መረብ ቶፖሎጂ፣ መጀመሪያ የሕዝብ በይነመረብን ወደ ሩቅ ክልል ከማሻገር ይልቅ በጂኦግራፊም ሆነ በአውታረ መረብ አቀማመጥ አቅራቢያ በሚገኝ ቅብብሎሽ ላይ ነው። በተግባራዊ አነጋገር፣ ይህ ማለት የትራፊክ መጨናነቅ ከመድረሱ በፊት ዝቅተኛ መዘግየት፣ የእንቅስቃሴ መቆራረጥ መቀነስ እና ሊወገድ የሚችል የኪሳራ ፍንዳታ መቀነስ ማለት ነው።6
የመጀመሪያው የHTTP ወይም የWebSocket ጥያቄ በአቅራቢያ ወዳለ የትራንሲቨር ክላስተር እንዲደርስ፣ ለሲግናል መስጫ የCloudflare ምድራዊ እና የቅርበት አቅጣጫ እንጠቀማለን። የጥያቄው አውድ የክፍለ ጊዜው ቦታ እና የትኛው ግሎባል ቅብብሎሽ የመግቢያ ነጥብ ለደንበኛው እንደሚታወጅ ይወስናል። የSDP መልስ የአለም አቀፍ ቅብብሎሽ አድራሻ የሚሰጥ ሲሆን፣ ufrag ደግሞ አለም አቀፍ ቅብብሎሽ ሚዲያን ወደተመደበው ክላስተር እና ወደ መድረሻ ማስተላለፊያው መንገድ ለማስተላለፍ የሚያስችል በቂ መረጃ ይዟል።
ክፍለ ጊዜውን ከአንድ ትራንሲቨር ጋር አቆራኝተው እንዲቆይ በማድረግ፣ በጂኦግራፊያዊ አቅጣጫ የተመራ ሲግናል አሰጣጥ እና ግሎባል ቅብብሎሽ አንድ ላይ ሆነው ማዋቀር እና ሚዲያን በአቅራቢያው በሚገኝ የመግቢያ መንገድ ላይ አስቀምጠዋል። ይህ ለሲግናል መስጠት እና ለመጀመሪያው የICE ግንኙነት ፍተሻ የደርሶ መልስ ጉዞ ጊዜ ይቀንሳል፣ ይህም አንድ ተጠቃሚ ንግግር ከመጀመሩ በፊት ምን ያህል ጊዜ እንደሚጠብቅ በቀጥታ ያሳጥረዋል።
የቅብብሎሽ አገልግሎቱን በGo ውስጥ ጽፈናል እና ትግበራውን በዓላማ ጠባብ አድርገነዋል። በLinux ላይ፣ የከርነል አውታረ መረብ ንብርብር የUDP ፓኬቶችን ከማሽኑ የአውታረ መረብ በይነገጽ ተቀብሎ ወደ ሶኬት ያደርሳቸዋል፣ ይህም ሂደት IP፡መሰኪያ ከተገናኘ በኋላ የሚያነበው የሥርዓተ ክወና የመጨረሻ ነጥብ ነው። ቅብብሎሽ በተጠቃሚ ቦታ ውስጥ ይሠራል፣ ስለዚህ መደበኛ የGo ሂደት ከዚያ ሶኬት የፓኬት ራስጌዎችን ያነባል፣ አነስተኛ መጠን ያለው የፍሰት ሁኔታ ያዘምናል፣ እና WebRTCን ሳያቋርጥ ፓኬቶችን ያስተላልፋል። የተጠቃሚ ቦታ የሂደት ምርጫ አውታረ መረብ ከፍ ያለ የፓኬት መጠን ለማግኘት በቀጥታ ወረፋ እንዲይዝ የሚያስችል፣ ነገር ግን የአሠራር ውስብስብነትንም የሚጨምር ምንም አይነት የከርነል-ማለፊያ ማዕቀፍ አያስፈልገንም ነበር።
አስፈላጊ ንድፍ ምርጫዎች፦
- ፕሮቶኮል ማቋረጥ የለም፦ ቅብብሎሽ የSTUN ራስጌዎችን/ufragን ብቻ ይተነትናል፤ ለተከታይ DTLS፣ RTP እና RTCP የተሸጎጠ ሁኔታን ይጠቀማል፣ ፓኬቶችን ግልጽ ያልሆኑ አድርጎ ያቆያል።
- አፍታዊ ሁኔታ፦ ለፍሰት ሁኔታ እና ለእይታ ምቹነት የደንበኛ አድራሻን ወደ ትራንሲቨር መድረሻ የሚያደርስ ትንሽ፣ አጭር ጊዜ የሚፈጅ፣ በማስታወሻ ውስጥ ያለ ካርታ ይይዛል።
- በአግድም ሊሰፋ የሚችልበት ሁኔታ፦ በርካታ የቅብብሎሽ አብነቶች ከጭነት ሚዛናዊ ማድረጊያ ጀርባ በትይዩነት ይሠራሉ። ሁኔታው አካላዊ የWebRTC ሁኔታ አይደለም፣ ስለዚህ ዳግም ማስጀመር አነስተኛ የትራፊክ ጠብታዎች እና ፈጣን የፍሰት መልሶ ማግኛን ያስከትላል።
የብቃት እርምጃዎች፦
SO_REUSEPORTበተመሳሳይ ማሽን ላይ ያሉ በርካታ የቅብብሎሽ ሠራተኞች ተመሳሳይ የUDP መሰኪያ እንዲያገናኙ የሚያስችል የLinux ሶኬት አማራጭ ነው። ከዚያ ከርነሉ ገቢ ፓኬቶችን በእነዚያ ሠራተኞች መካከል ያሰራጫል፣ ይህም ነጠላ የንባብ-ዑደት ማነቆ ያስወግዳል።runtime.LockOSThreadእያንዳንዱን የUDP ንባብ goroutine ከአንድ የተወሰነ የሥርዓተ ክወና ክር ጋር ያያይዘዋል። ከSO_REUSEPORTጋር ሲጣመር፣ ፓኬቶችን በተመሳሳይ የCPU ኮር ላይ ከተመሳሳይ ፍሰት (ምንጭ እና መድረሻ IP:መሰኪያ plus ፕሮቶኮል) እንዲቆዩ ያደርጋል፣ ይህም የመሸጎጫ አካባቢን ያሻሽላል እና የአውድ መቀያየርን ይቀንሳል።- አስቀድሞ የተመደቡ ቋቶች እና አነስተኛ ቅጂዎች በGo ውስጥ የቆሻሻ መሰብሰብን ለማስቀረት ከመጠን በላይ መተንተን እና መመደብ ዝቅተኛ ሆኖ ይቆያል።
ይህ ትግበራ ዓለም አቀፍ የእውነተኛ ጊዜ የሚዲያ ትራፊክን በአንጻራዊ ሁኔታ አነስተኛ በሆነ የቅብብሎሽ አሻራ አስተናግዷል፣ ስለዚህ የከርነል ማለፊያ መንገድ ከመጠቀም ይልቅ ቀላሉን ንድፍ አቆይተናል።
ይህ አርክቴክቸር በሺዎች የሚቆጠሩ የUDP መሰኪያዎች ሳናጋልጥ የWebRTC ሚዲያን በKubernetes እንድናስኬድ ያስችለናል። ይህ አስፈላጊ የሆነው አነስተኛ እና ቋሚ የUDP ገጽታ በቀላሉ ደኅንነቱ የሚጠበቅ እና የጭነት ሚዛናዊነት የሚጠብቅ በመሆኑ እና ትላልቅ የሕዝብ መሰኪያዎችን ሳይጠብቅ የመሠረተ ልማትን መስፋፋት ስለሚያስችል ነው። ከKubernetes በሚገኘው የተሻለ የኢንፍራ ድጋፍ እና በአነስተኛ የገጽታ ምክንያት በሚገኘው የበለጠ ደኅንነት፣ ይህ ንድፍ እንዲሁም ለደንበኞች መደበኛ የWebRTC ባህሪን ይጠብቃል እና SFU-አልባ ንድፍ ለሥራ ጫናችን ትክክለኛው ነባሪ መሆኑን ያረጋግጣል። አብዛኛዎቹ ክፍለ ጊዜዎቻችን ከነጥብ-ወደ-ነጥብ፣ ለመዘግየት-ስሜታዊ እና የማጣቀሻ አገልግሎቶች እንደ WebRTC እኩዮች ባህሪ ማሳየት በማይፈልጉበት ጊዜ ለማስፋት ቀላል የሆኑ ናቸው።
አጠቃላዩ ትምህርት ውስብስብነትን ለመጨመር በጣም ጥሩው ቦታ በእያንዳንዱ የኮድ የጀርባ ክፍል አገልግሎት ውስጥ እና በተበጀ የደንበኛ ባህሪ ውስጥ ሳይሆን፣ በቀጭን የማስተላለፊያ ንብርብር ውስጥ መሆኑ ነው። የፕሮቶኮል-ተወላጅ መስክን ወደ ማስተላለፊያ ዲበውሂብ ኢንኮድ ማድረግ የተወሰነ የመጀመሪያ-ፓኬት ማስተላለፊያ፣ አነስተኛ የሕዝብ UDP አሻራ እና በዓለም ዙሪያ ላሉ ተጠቃሚዎች ቅርብ የሆነ መግቢያ ለማስገባት የሚያስችል በቂ ተለዋዋጭነት ሰጥቶናል።
በተለይ ጥቂት ምርጫዎች አስፈላጊ ነበሩ፦
- የፕሮቶኮል ትርጉሞችን በጠርዝ ላይ ያቆዩ። ደንበኞች አሁንም መደበኛውን WebRTC ይናገራሉ፣ ይህም የአሳሽ እና የሞባይል መስተጋብርን ሳይበላሽ እንዲቆይ ያደርጋል።
- አካላዊ የክፍለ-ጊዜ ሁኔታዎችን በአንድ ቦታ ያቆዩ። ትራንሲቨር የICE፣ DTLS፣ SRTP እና የክፍለ ጊዜ የሕይወት ዑደት ባለቤት ነው፤ ቅብብሎሽ ፓኬቶችን ወደፊት ብቻ ያስተላልፋል።
- የማስተላለፊያ መረጃው አስቀድሞ በውቅር ላይ ይገኛል። የICE ufrag የተመራጭ መንገድ የፍለጋ ጥገኝነት ሳያክል የመጀመሪያውን የፓኬት ማስተላለፊያ መንጠቆ ሰጥቶናል።
- የከርነል ማለፊያ ከመፈለግዎ በፊት ለተለመደው ጉዳይ ያመቻቹ።
SO_REUSEPORTበጥንቃቄ በመጠቀም፣ የክር መሰኪያ እና ዝቅተኛ ምደባ ትንተናን በመጠቀም ጠባብ የGo ትግበራ ለሥራ ጫናችን በቂ ነበር።
የእውነተኛ ጊዜ የድምፅ ሰው ሠራሽ አስተውሎት (AI) የሚሠራው መሠረተ ልማት መዘግየት የማይታይ እንዲመስል ሲያደርግ ብቻ ነው። ለእኛ፣ ይህ ማለት ደንበኞች ከራሱ ከWebRTC የሚጠብቁትን ሳይቀይሩ የWebRTC ስምሪታችንን ቅርፅ መቀየር ማለት ነው።
ደራሲ
ማጣቀሻዎች
1. Discord ሁለት ከግማሽ ሚሊዮን የአንድ ጊዜ የድምፅ ተጠቃሚዎችን በWebRTC እንዴት እንደሚያስተናግድ(በአዲስ መስኮት ውስጥ ይክፈታል)
2. GitHub - l7mp/stunner፦ ለWebRTC የKubernetes ሚዲያ መግቢያ።(በአዲስ መስኮት ውስጥ ይክፈታል)
3. የWebRTC መሰኪያዎች በአጭሩ [ምሳሌዎች] - BlogGeek.me(በአዲስ መስኮት ውስጥ ይክፈታል)
4. ወደ Kubernetes ማሰማራት - የLiveKit ሰነዶች(በአዲስ መስኮት ውስጥ ይክፈታል)
5. ለሚዲያ ግንኙነት ከትልቅ የፖርት ክልል ይልቅ አንድ የUDP መሰኪያ ብቻ ይጠቀሙ - mediasoup(በአዲስ መስኮት ውስጥ ይክፈታል)
6. Cloudflare Calls፦ እስከ ታች ድረስ በሚሊዮኖች የሚቆጠሩ የተደበቁ ዛፎች(በአዲስ መስኮት ውስጥ ይክፈታል)


