Borg Paper 感想

Kubernetes の元ネタになった Borg というシステムの whitepaper が出ていた。読んでみる。自分の Borg 経験は hello world したくらい。 全然知らない。そしてめんどくさそうなので出来ることなら使わずに人生を終えたいと思っている。 でも後学のために読んでも損はあるまい。 Google インフラシリーズでは親玉格のはず。

Whitepaper としては不親切な内容。読者がこの手のスケジューラについてある程度知っている前提で書かれている。ただ Cell だの Borgmaster だの Borglet だの Preemption だの、サーバ側の人々の会話に出てくる用語は一通り解説されている。きっとポイントは押さえられているのだろう。

・・・と思って読んだものの、やはりどうにもとりとめがない。細かい工夫の話が多く big picture がよく見えない。設定ファイルの例やプロセスのデプロイ方法といったエンドユーザ視点の説明が少なく、どうやってシステムを bootstrap するか、マシンを足す時はどうやるかなど運用の目線もなく、実装する人の観点だけで書かれているからだろう。それは正しい想定読者だと思うけど、もうちょっとファンサービスがあってもいいのではないか。そのうち tech talk のひとつもやってほしいもんです。

後半の Lessons セクションを見ると, Borg のいまいちだったところは Kubernetes で直したと繰り返している。クラスタマネージャを勉強したくなったらむしろ Kubernetes について調べるほうがいいのかもしれない。まあ Borg みたいにチューニングされまくってはいないだろうけれど、コードやマニュアルが読めるぶんよい。気がする。ちなみに Mesos paper はもうちょっとフレンドリーだった記憶。

以下ランダムに面白かったこと:

  • エージェント(Borglet)が中央のサーバ(Borgmaster)に状態を報告するのではなく、Borgmaster が Borglet に状態を訊いて回る。そうやってスパイクを避けているという。なるほど。
  • 名前解決のサービス (BNS) がついている。どの物理マシンにジョブが割り振られてもこの名前で引ける。名前サービスは別なのかとおもってたら Borg の一部だったのか。
  • ユーザ毎の資源はクオータで制限しており、クオータ割り当てはシステムの外で決めている。そもそも他の方法があるのだろうかとおもったが、理論的にはなんかあるっぽい。
  • Compressible な資源 (CPU や IO 帯域など)と Non-compressible な資源(メモリやディスク)を区別している。たしかにそういう区別は必要そう。
  • Preemption によって優先度の低いタスクは殺されることがある。殺されると pending queue にはいってやりなおし。「夜に流して帰った Map Reduce が朝来たら死んでた…」みたいなぼやきをたまに聞いたのを思い出す。これだったか。ハードウェアの故障以前にスケジューラが殺しに来るんじゃ idempotent に作らないとどうにもならないね。むしろこの荒々しい世界で Map Reduce を使わずバッチの何かを書くのは大変そう。
  • 資源の割り当て設定を変えるとデプロイしなおし。資源をインクリメンタルに要求できる普通の OS とは違う。Mesos はインクリメンタルに要求できた気がする。まあフレームワークという巨大な単位相手にリソースを割り振るからだろうけど。
  • Borg 対応バイナリには HTTP サーバが入ってる。便利そう。
  • 同じマシンで動かしたい job を指定するには Allocs という仕組みを使う。仮想 job みたいなもんか.

Related work のセクションでは色々な会社の似たようなシステムが紹介されている。YARN, Mesos, Aurora は聞いたことがあったけれど、Facebook の Tupperware やら Alibaba の Fuxi やらはまったく知らなかった。Facebook ウォッチャーを気取っていたけど未熟であった。そろそろ Uber ウォッチャーに宗旨替えすべきか・・・。

数年前 Twitter 開催の tech talk で Mesos の話を聞いた時、講演者は Mesos のことを “Google の Borg みたいなもんです” と説明していた。元 Google 社員が蔓延するベイエリアのテック企業では Borg の存在は公然の秘密になっており、でかい会社は結局どこも似たようなものを持っているのだなあと思ったのだった。

Twitter といえば、かの社で SRE(Ops) をやってる人が Borg は動きが予測できなくて辛い、Mesos のほうがわかりやすくてよい、というようなことを以前書いていた。どうなんだろうね。最近 Twitter は MySQL-Mesos インテグレーションを Mysos という名前で発表している。ちゃんとつかってるぽい。

オープンソース好きとしては Kubernetes と Mesos を応援していきたい。 といっても一個人にはまったく使い道がない。掛け声だけ。