自社では WebRTC をサーバー経由で配信する、WebRTC SFU をパッケージとして開発、販売している。開発は 2013 年くらいからで、2015 年に販売を開始、2023 年の今はこの製品だけで十分な利益が出るところまで来た。
2023 年 12 月のリリースで分散 WebRTC SFU に向けた仕組みを追加して、2024 年前半には分散 WebRTC SFU を提供できるように開発を進めている。
分散 WebRTC SFU ってなに?
WebRTC SFU が複数が起動していて、どの WebRTC SFU にアクセスしても、同じルームの音声や映像、データを受信できるようになる仕組み。
つまり WebRTC SFU をスケールアウトさせる仕組みの一つ。
分散すると何が嬉しいの?
どの WebRTC SFU にアクセスしても良いので、大規模配信が実現可能になる。1 台のサーバーで 1 万の配信が出来るならば、 100 台サーバーがあれば 100 万の視聴者に 1 秒未満での配信が可能になる。
つまり超低遅延、かつ大規模配信を実現できるようになる。
もちろん、耐障害性もあがる。特定の WebRTC SFU が落ちても他の WebRTC SFU に繫げば良くなるので。
分散ってそんなに難しいの?
難しい。ただ片方向だけであればわざわざ分散させる必要もない。自社の場合は双方向も重視しているので、かなりやっかい。
分散はどうやって実現するの?
Erlang/OTP と Raft で実現する。サーバー間通信は Erlang/OTP 分散機能を利用し、Raft ライブラリは RabbitMQ が開発している ra というライブラリを利用する。
外部データベースに依存した方が楽では?
それはそう。ただ、パッケージ製品の場合は「外部にデータベースを用意してください」は許されないと思っており、パッケージ内で分散 WebRTC SFU を完結することが大事だと考えてる。
WebRTC SFU を起動するだけで、後は分散してくれるの大変良いし、運用も楽になる。
まとめ
- 分散 WebRTC SFU をパッケージで提供する
- 分散 WebRTC SFU は外部アプリケーションに依存せずスケールアウトできるようになる
- 分散 Media over QUIC Transport も同じ仕組みで実現できるはず