ネットサービス

同時接続260万人を越える音声通話サービス「Discord」の仕組み


Discordはゲーマー向けの音声通話サービスで、その使いやすさから世界で1億3000万人以上のユーザーを集めるなど非常に高い人気を誇っています。音声通話の同時接続数は260万人以上にも及んでいますが、一方でDiscordはごく少数のエンジニアで開発されています。わずか40人で同時接続数260万人以上という巨大サービスを運営することを可能にする技術の一端が、公式ブログ上で明かされています。

How Discord Handles Two and Half Million Concurrent Voice Users using WebRTC
https://blog.discordapp.com/how-discord-handles-two-and-half-million-concurrent-voice-users-using-webrtc-ce01c3187429

DiscordはChrome、Firefox、Edgeなどのブラウザで動作するウェブアプリをはじめ、Windows、macOS、Linuxでのネイティブアプリ、そしてiOSとAndroidで動作するスマートフォンアプリなど多数のプラットフォームをサポートしています。複数のプラットフォームで同じコードをできるだけ再利用するためにはWebRTCという技術が鍵とのこと。このWebRTCはHTML5の仕様の一つで、すべてのブラウザで利用できるほか、アプリケーションに組み込むためのネイティブライブラリとしても利用可能です。


ウェブアプリでWebRTCを使用する際にはブラウザのWebRTCの実装に従う必要がありますが、Windowsアプリやスマートフォンアプリなどウェブアプリ以外の場合にはDiscordがカスタマイズしたWebRTCライブラリを使用できます。Discordは以下のような点をカスタマイズして使用しているとのこと。

・Windowsにおける「ダッキング」の回避
ダッキングとはWindowsが音声通話を検知してほかのアプリの音量を自動で下げる機能のことです。

・独自のボリュームコントロールの実装
・音声を検出したり、ゲームの音・映像を一緒に共有したりすることを可能にしている
・無音時の帯域幅やCPUの使用量の削減
・アプリからフォーカスが離れていても送信ボタンを押している間だけ音声を届ける「プッシュ・トゥ・トーク」が利用できるように
・「誰を優先するか」など音声以外の情報の送信

カスタマイズしたWebRTCは、もとのWebRTCの更新に合わせて頻繁に更新して最新の状態にするという骨の折れる作業をしなければならないそうですが、ゲーマーにサービスを提供するためには行う価値のある作業であるとのことです。


さて、Discordのバックエンドでは主に「Discord Gateway」「Discord Guilds」「Discord Voice」の3つのサービスが動作しています。最初のGatewayサービスは、ユーザーがDiscordを起動している時に常に接続されているサービスで、オンライン状態やメッセージなどの受信に使用されます。Guildsサービスは、Discord内の「サーバー」にVoiceサービスを提供するサーバーを割り当てるためのサービスです。音声通話を開始しようとするとまずは「エンドポイントを待っています」と表示されますが、これはGuildsサービスが最適なVoiceサーバーを探し中であることを意味しているそうです。

Voiceサーバーでは音声のやりとりに使用されるSFUと呼ばれる転送コンポーネントと、そのSFUを管理するシグナルコンポーネントが動いています。SFUがクラッシュした際にシグナルコンポーネントがすぐにSFUを再構築することでほとんどパケットを落とさずにサービスを継続できるようになっているとのこと。また、Voiceサーバー自体がダウンしてしまった場合には別のVoiceサーバーが割り当てられるのですが、どのチャンネルに誰がいるのかなどの通話の状態はGuildsサービスが管理しているため、ダウン時と同じ状態を保ったまま新たなVoiceサーバーへと接続できるようになっているそうです。


上記の3つのサービスは水平方向にスケールできるように設計されており、実際にDiscordは世界の13地域に渡って30個以上のデータセンターを使用しており、その中でなんと850個以上の音声サーバーが稼働しています。Discordの音声通話の同時接続数は260万人を越えており、そのトラフィックは220Gbpsで、パケットにして毎秒1億2000万以上のパケットを処理しているとのことです。

この記事のタイトルとURLをコピーする

・関連記事
Discordはどのようにして40人のエンジニアで1億3000万人以上にサービスを提供しているのか? - GIGAZINE

VPNでもWebRTC経由でIPアドレスが漏洩するとセキュリティ専門家が警告、漏洩の危険があるVPNも公開 - GIGAZINE

Googleが病院を訪れた患者の身に「次に何が起こるか?」を予測する技術を開発 - GIGAZINE

Amazonが無限に企業を拡大していくことに成功した「ピザ2枚ルール」 - GIGAZINE

記憶力や情報処理速度など脳の「認知スキル」のピークはいつなのか? - GIGAZINE

in ソフトウェア,   ネットサービス, Posted by log1d_ts

You can read the machine translated English article here.