Bbabo NET

Навука & Тэхналогіі Навіны

Signal павялічыў максімальную колькасць удзельнікаў аўдыё- і відэазванкоў з пяці да 40

Месенджэр Signal выпусціў абнаўленне, у якім максімальная колькасць удзельнікаў групавых аўдыё-і відэазванкоў павялічылася з пяці да 40. Распрацоўнікі патлумачылі, як ім удалося вырашыць праблему падтрымкі групавых званкоў з вялікай колькасцю ўдзельнікаў і скразным шыфраваннем адначасова.

Па словах прадстаўнікоў месэнджэра, яны сутыкнуліся з праблемай таго, што, калі ўсе ўдзельнікі шлюць свае аўдыё і відэафайлы кожнаму іншаму ўдзельніку па асобнасці і гэтак жа атрымліваюць іх (full mesh), то скразное шыфраванне працуе, але многім удзельнікам будзе не хапаць прапускной здольнасці, бо ў званку на 40 чалавек трэба падтрымліваць 39 злучэнняў. Калі ж кожны ўдзельнік шле свае аўдыё і відэа на сервер, а сервер перанакіроўвае адзіны аўдыё і відэаструмень для кожнага іншага ўдзельніка, то прапускной здольнасці будзе хапаць, але не працуе скразное шыфраванне.

У выніку распрацоўшчыкі выбралі альтэрнатыўны варыянт: Selective Forwarding Unit, калі кожны ўдзельнік шле свае аўдыё і відэа на сервер, а сервер перасылае іх астатнім, не расшыфроўваючы. Каманда Signal самастойна стварыла службу апрацоўкі сігналаў з адчыненым зыходным кодам і выклала код на GitHub.

Спрошчаная версія асноўнага цыкла ў кодзе ў SFU выглядае так:

Каманда Signal ацаніла мноства SFU з адчыненым зыходным кодам, але толькі два з іх, як адзначаецца, мелі адэкватны кантроль перагрузкі. Распрацоўнікі запусцілі групавыя выклікі з выкарыстаннем мадыфікаванай версіі аднаго з гэтых сервераў, але неўзабаве выявілі, што нават з сур'ёзнымі мадыфікацыямі не могуць надзейна маштабаваць колькасць удзельнікаў, калі яно больш за восем, з-за высокай загрузкі ЦП. Тады яны напісалі SFU з нуля на Rust.

Самай складанай часткай распрацоўкі SFU была арганізацыя перасылання відэа з правільным дазволам кожнаму ўдзельніку выкліку, у той час як умовы сеткі ўвесь час змяняюцца. Каманда аб'яднала некалькі тэхнік: Simulcast і Packet Rewriting дазваляюць перамыкацца паміж рознымі дазволамі відэа, Congestion Control вызначае правільны аб'ём для адпраўкі, а Rate Allocation вызначае, што адпраўляць у рамках гэтага аб'ёму.

Рэалізацыя скразнога шыфравання захоўваецца ў RingRTC, бібліятэцы відэазванкоў з адкрытым зыходным кодам, напісанай на Rust. Змест кожнага кадра перасылаецца відэа зашыфроўваецца перад падзелам на пакеты, як у SFrame. Калі кліент далучаецца да выкліку, ён генеруе ключ і адпраўляе яго ўсім іншым удзельнікам сазвону ў выглядзе паведамлення, якое ўжо абаронена шыфраваннем Signal. Ён выкарыстоўвае гэты ключ для шыфравання носьбіта перад яго адпраўкай у SFU. Кожны раз, калі які-небудзь карыстач далучаецца да выкліку, ён генеруе новы ключ і адпраўляе яго ўсім астатнім удзельнікам.

У лістападзе Signal дадаў блакаванне спам-паведамленняў і адпраўку скаргаў прама на старонцы з перапіскай. Зараз карыстачы месэнджэра могуць блакаваць і паведамляць пра спам у адзін клік. Пры адпраўцы скаргі на серверы месэнджэра паступаюць толькі тэлефон і ID меркаванага парушальніка. Гэтыя дадзеныя суадносяцца з іншымі зваротамі. Калі адзін і той жа тэлефонны нумар і ID будуць адзначаны ў некалькіх скаргах або сістэма выявіць прыкметы таго, што акаўнт выкарыстоўваецца для рассылання спаму, Signal папросіць прайсці базавую праверку на "чалавечнасць". Сярод аднаго з метадаў праверкі пазначаны CAPTCHA. Карыстальнік не зможа дасылаць новыя паведамленні, пакуль не пацвердзіць, што ён чалавек.

Signal павялічыў максімальную колькасць удзельнікаў аўдыё- і відэазванкоў з пяці да 40