A High-Speed Load-Balancer Design with Guaranteed Per-Connection-Consistencyのメモ

A High-Speed Load-Balancer Design with Guaranteed Per-Connection-Consistency

Tom Barbette, Chen Tang, Haoran Yao, Dejan Kostić, Gerald Q. Maguire Jr., Panagiotis Papadimitratos, and Marco Chiesa, KTH Royal Institute of Technology

NSDI 20

2020

どんなもの?

スケーラブルでバックエンドへのバランシングを公平に行うロードバランサのメカニズムの提案 GoogleのMaglevなどのロードバランサはPer-Connection-Consistencyを可能な限り確保するために,ハッシュを用いてバックエンドを決定してバランシングしている. 毎回ハッシュを用いてバランシングしているためMaglevでは最大で30%も偏ったバックエンドの選択を行ってしまう事がある. そこで,この論文ではバックエンドの選択が公平でPer-Connection-Consistencyを保証したロードバランサの提案を行っている.

先行研究と比べてどこがすごい?

毎回ハッシュを用いてバランシングしているためMaglevでは最大で30%も偏ったバックエンドの選択を行ってしまう事がある. この論文ではスケーラブルで,バックエンドの選択が公平なロードバランサを提案している.

技術や手法のキモ

一般的なロードバランサは以下のようなアーキテクチャで動作している. 基本的にストレートフォワードにバックエンドを決定していく,

提案手法のロードバランサでは,以下のようにパケットを処理する. 提案手法は最初のパケットに対しては,公平なアルゴリズムを用いてバックエンドを決定する. そして,戻りパケットを解析し,バックエンドの情報をcookieとしてパケットに埋め込む. 二回目以降は埋め込まれたcookieの情報を用いて,バックエンドを算出しパケットをバックエンドにバランスする, LBはスケールする時にこのバックエンドのテーブルだけを共有すればいいため,スケーリングも容易になる.

どうやって有効だと検証した?

実際に実装しベンチマークをとった. 提案手法は,性能もそこそこ出ており,バックエンドの選択が公平で,バックエンドのロードアベレージのばらつきも少ないことを確認した.

議論はある?

パケットにCookieを付加することがインターネットで可能なのかという事について. QUICの場合は,QUICの connection-id を使用する事が出来る ただ,TCPの場合には,TCP timestamp 拡張を使用する必要があり,これが動作するのかは疑問が残る

個人的にはDDoS攻撃には、Cookieを計算するためのhash関数をリバースエンジニアリングする必要があるからDDoSはstatelessの物と変らないという事になっているが、これは本当かなぁとちょっと思う。 もちろん、理論上正しくはそうかもしれないが、それをちゃんと実装出来ている物をあまり見た事がない。(Bindとかも常にこういう問題を出し続けているし、hash計算の失敗によるDoSは常に見付かり続けているので)

この構成を作るには、MSのAnantaみたいな構成を作る必要があるので、MaglevでL3DSRをやっているような構成だと使うのは難しい所がある。 結構、単純にLBを作るのではなく、CloudのD-Planeとしてまとまった物を作る必要がありそう。