第2回 大量トラフィックを支えるインフラ~独自プロトコル,ファイルシステムの実装もいとわない!~
ドワンゴが分散ファイルシステムを作っているというニュースを見た. しかもRustで. ニュース以上のことも知りたくなったがツテがないし, あったとしても教えてくれるわけがないので外側から推測することにした.
実は分散ファイルシステムも独自に開発しました。もともと既存のオープンソースのファイルシステムを使っていたのですが,それだと期待する性能が出ないことがわかり,独自に調査開発を進めることにしました。
Rustという言語で,ガベージコレクションがなく,C++にメモリ安全性の機能を付加したようなものです。ニコニコの動画・生放送の配信基盤開発ではErlangを使うことが多いのですが,レイテンシを細かく制御したい分散ファイルシステムの分野では,どうしてもガベージコレクションが気になってきます。たしかにErlangのガベージコレクションはすごく優秀ですが,自分で制御したほうが安定して予測した性能を出しやすく,またデータ構造を工夫することで消費メモリサイズも大幅に削減できるので,ガベージコレクションのないRustを選択しました。Rustは低レイヤのリソースを直接操作するような領域にも強いので,将来的に検討している,ブロックデバイスを直接制御するような場面でも有効だと考えています。
太田氏(sile)のGithubを見ると, 関連してそうなリポジトリが出てくる.
- GitHub - sile/hash_ring: Implements consistent hashing in Erlang
- GitHub - sile/rafte: An Erlang implementation of the Raft consensus algorithm
- GitHub - sile/rrsm: Raft based Replicated State Machine in Rust
おれの想像するに, いきなりRustで作ろうということになったのではなく, 最初は実績のあるErlangで作っていたが上に書いてあるようにGCがどうとかいう話になり, じゃあRustにしましょうかということになったのではないかと思う.
そもそも動画配信基盤用でファイルシステムが必要なのか?という疑問はあるが, ファイルシステムだとしてもPOSIX準拠ではなくて不必要な仕様は全部取り除いた特化型ファイルシステムということではないだろうか?例えば, 上書きみたいなことはしないだろうし, 想定ワークロードは極端なread manyだろう. フラッシュ命令についてもかなり要件は緩和されるはず.
ドワンゴのエンジニアはレベルが高いから, こういう重要なところで良い決断が出来る. もともとErlangのバックグラウンドがあったから,Rustにもすぐに入っていけたということだと思う. gihyoの記事はあまり面白くないものが多いが, この記事に関しては感動した. エンジニアリングの大勝利感がある.
ぜひ, オープンソースとして公開してほしい. 読みたい.