Discord の採用している技術
Discord はゲーマー向けのボイスチャットサービス。テキストチャットもできるし最近ではビデオチャットや画面共有もできるようになった。
UI はかなり Slack に似ている、モダンなデザインということなんだろう。
WebRTC 技術を利用しているということで、とても気にはなっていたが使うタイミングがなかったことからあまり追いかけていなかったが、先日ビデオチャットと画面共有が追加されたということで色々調べてみることにした。
Electron
Windows/Mac/Linux 向けのデスクトップクライアントには Electron を採用している。かなり早い段階から採用しているイメージ。Electron は Chromium ベースなので WebRTC が利用できる。WebSocket も。ブラウザとほぼ変わらぬ動きを再現している。
React-Native
iOS/Android クライアントには React-Native を採用している。こちらもかなり早い段階から採用している記憶がある。
When I interviewed for the iOS developer opening at Discord last spring, the tech lead Stanislav told me:blog.discordapp.com
WebRTC
音声や映像の通信には WebRTC を利用している。P2P ではないようで、サーバ経由と見ている。SDP を見る限り P2P で利用される SDP ではない。
実際一人で接続ができる。P2P の場合は必ず相手がいないと接続ができない。
ただ、なんのサーバを利用しているかは SDP を見る限りはわからなかった。Mixer で利用されている Janus や mediasoup や Kurento 、 Jitsiといったメジャーな OSS が採用している SDP ではなかった。
また TURN サーバは用意していないようで、UDP が通信できる前提だ。これはゲーム専用だからか UDP が通信できない状況で使うんじゃねぇという思いがあるのかもしれない。
React / Babel / Webpack
クライアントは React ベースで ES6 を採用。ビルドは Webpack のようだ。
クライアントが明るくないので、もしもう少し詳しい情報があったらコメントしてほしい。
Cassandra / Elasticsearch
メッセージの記録は全て Cassandra へ。検索は Elasticsearch 。
Apache Beam
名前くらいしか知らないので … バッチ処理やストリーミング処理でデータ処理をするフレームワーク … っぽい。すみません詳しい方コメントください。
Elixir
From the beginning, Discord has been an early adopter of Elixir. The Erlang VM was the perfect candidate for the highly…blog.discordapp.com
https://github.com/vishnevskiy CTO が Elixir 大好きな模様。
メッセージ配信とかは全て Elixir を採用している模様。通信部分は WebSocket を利用。まぁ王道。結構気合い入れて利用している模様。
C++
Apply for jobs at Discord HQ and build a sweet chat app that millions of gamers use to play with their friends. Check…discordapp.com
libwebrtc も Electron も C++ だし、コアになる WebRTC サーバもおそらく C++ で書かれている。ゲームに組み込む SDK も C++ 。
Python / Go
データ解析やインフラ系には Python をメインして Go も採用している。