実際に調べたわけではなくてその前段。
公式のドキュメントに記述があるので、そこを抜粋したメモです。
そもそもmediasoupの仕組み
- `mediasoup`自体はNodeのモジュール
- `Worker`という概念と`Router`という概念がある
- `Worker`はC++のプロセスで、単一のCPUコアで動作する
- `Worker`はNヶの`Router`を抱える
- `Router`はいわゆるRoomのようなもの
- そこに接続したエンドポイントが互いにメディアを送受信する
- `mediasoup`はSFUなので、送られてきたメディアをトランスコードしたりはしない
- SFUに対してメディアを送信することを`produce`すると表す
- 受信は`consume`すると表す
- それらを行う主体をそれぞれ`Producer`と`Consumer`と表す
ユースケース: 会議アプリ
- CPUの強さにもよるが、単一のC++プロセス = `Worker`が抱えられる`Consumer`の最大数は500が目安
- `Worker`はNヶの`Router`を抱えるが、そのトータル
- たとえば4人が互いにvideo+audioを送り合う場合
- その`Router`に`produce`されるのは、4人 * 2track = 8 producers
- 送られてくるのは自分を除く3人分のメディアなので、4人 * (3人 * 2track) = 24 consumers
- スケールさせるためには、複数のCPU、複数のホストで`Router`を配分する
参加者全員がvideo+audioを送り合う場合で、上限目安の500を考えた場合。
- N人の部屋: N * (N-1 * 2)
- 4人部屋: 24 consumers
- 10人部屋: 180 consumers
- 16人部屋: 480 consumers
- 17人部屋: 544 consumers
というわけで、参加者が全員audio+videoを送受信する場合、概算では1つの`Worker`で抱えられるのは16人まで。
そしてそもそも同じ部屋に入るためには同じ`Router`に属する必要があるので、16人会議をやるとなると、その`Worker`ではもうほかの会議は捌けない。
まあそんな全員がvideo+audioを送受信することはそうそうないと過程して、audioのみならどうか。
- N人の部屋: N * (N-1 * 1)
- 4人部屋: 12 consumers
- 22人部屋: 462 consumers
- 23人部屋: 506 consumers
ふむ。
改めて書くけど上記すべてはあくまで1コア = 1worker = 1routerでの試算。