Building and Scaling Video Conferencing in Slack 講演から取ったメモ
本記事は、Building and Scaling Video Conferencing in Slackから取ったメモです。かなり意訳気味にとってるので、何か間違いなどあれば @iwashi86 までお願いします。
補足: voluntas氏にコメントいただき、 Slackの開発チーム
-> SlackのWebRTC開発チーム
へ修正しました。
- Slackの良いところ
- スクリーン共有越しに相手のユーザの画面をコントロールできる
- Screenhero時代からのゴールだった
- SlackのWebRTC開発チームは6人、だいたいどの時代でも
- クライアントアーキテクチャ
- 最初は、自前カスタムのWebRTCのライブラリを使ってた
- ただメンテがつらすぎて、Electron/Chromium に自然に含まれるほうに移行した
- Electronのが自分でメンテするアップデートより早いし
- ただメンテがつらすぎて、Electron/Chromium に自然に含まれるほうに移行した
- トポロジとしてはSFUを100%通る
- だけど、1:1callが約90%あるので、考え直し中
- インフラ
- AWSとGCP使ってる
- SFUの配置場所を探すために、各リージョンにRegion serversというのを置いていて、そこでユーザをディスパッチしている
- その際は、もっともLoad Averageが低いところを選んでる
- この問題は、会議開始時点でどのSFUが適切かわからないという点
- あとから15人入るかもしれない
- 新アプリ・サーバのデプロイで台数が2倍必要になることもある
- というのも、アップデートするときに会議が終わるのを待つのにだいたい24時間かかる(いわゆるdrain問題)
- 選んだサーバがUSなのに会議参加者の大半がオーストラリアかもしれない
- AWSとGCP使ってる
- SFUの配置場所を探すために、各リージョンにRegion serversというのを置いていて、そこでユーザをディスパッチしている
- なので未来の構成を考え中
- 具体的にはSFUをカスケードする(マルチホストする)
- これでユーザはSFUを選ばずに、どの最寄りのSFUに入っても良くなる - GCP/AWSのPrivateFiberを経由するから、UXめっちゃあがるかもね
- 具体的にはSFUをカスケードする(マルチホストする)
- Enterpriseな顧客対応
- UDPが通らない問題
- だからTCPを通した。がそれでも通らない人がいる
- なので、HA Proxy/443 を作った。これでTURN TLSを通した
- Janus対応
- SFUは数年前からForkしたJanusを使ってる
- Janusはプラグインモデルだがおかげで、PlanBやSimulcastを入れ込むのが難しい
- 結果的に開発を続け、デバッグするのが大変になった
- 将来
- elixirで書き直している
- elrangの恩恵をうけられて、障害耐性がある。Processが死んでも、Supervisorが助けてくれる
- ついでにhot codeリロードができる。インフラコストが安くなりそう
- 重い処理(暗号化とか、アクティブ話者発見)はC++で書くつもり