Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Maglev: A Fast and Reliable Software Network Lo...

Kurochan
January 12, 2017

Maglev: A Fast and Reliable Software Network Load Balancer

GoogleのMaglevというロードバランサの論文の紹介です。

Kurochan

January 12, 2017
Tweet

More Decks by Kurochan

Other Decks in Technology

Transcript

  1. CyberAgent, Inc. All Rights Reserved Maglev: A Fast and Reliable

    Software Network Load Balancer アドテクスタジオ Dynalyst 黒崎 優太
  2. 黒崎 優太 • アドテクスタジオ Dynalyst エンジニア • 2年目 ◦ Scala,

    LXD • 今日はGoogleの論文の紹介をします 査読に参加しました 自宅に設置しました
  3. 概要 • Maglevとは • ロードバランサ 3方式 ◦ ふつうのやつ(?) ◦ DNS-RR

    ◦ DSR • Maglevのアーキテクチャ ◦ ECMP ◦ 分散 Connection Tracking ◦ DSR
  4. GCPのロードバランサ • Compute Engine Load Balancing hits 1 million requests

    per second! ◦ https://cloudplatform.googleblog.com/2013_11_01_archive.html • 1IPアドレス/ウォームアップなしでいきなり 100万RPSをさばける ◦ グローバルな ▪ 負荷分散 ▪ 障害耐性 ◦ ソフトウェアLB
  5. • DNSのAレコードを複数登録しておく ◦ RR = ラウンドロビン DNS RR example.com (198.51.100.1)

    example.com (198.51.100.2) example.com (198.51.100.3) example.com (198.51.100.4) Aレコードが複数あった場合に 毎回違うものが帰ってくるのを利用 (AWSのELBは前述のLBとDNS RRの 組み合わせ)
  6. • Direct Server Returnの略 L2 DSR 198.51.100.10 198.51.100.11 (lo: 198.51.100.10)

    198.51.100.12 (lo: 198.51.100.10) 198.51.100.13 (lo: 198.51.100.10) 198.51.100.14 (lo: 198.51.100.10) s01 s02 s03 s04 198.51.100.10 に アクセス L2 SW
  7. • Direct Server Returnの略 L2 DSR 198.51.100.10 198.51.100.11 (lo: 198.51.100.10)

    198.51.100.12 (lo: 198.51.100.10) 198.51.100.13 (lo: 198.51.100.10) 198.51.100.14 (lo: 198.51.100.10) s01 s02 s03 s04 pc01 宛先MACアドレスを s02のものに書き換える (送信元/宛先IPは書き換えない) 198.51.100.10 に アクセス
  8. • Direct Server Returnの略 L2 DSR 198.51.100.10 198.51.100.11 (lo: 198.51.100.10)

    198.51.100.12 (lo: 198.51.100.10) 198.51.100.13 (lo: 198.51.100.10) 198.51.100.14 (lo: 198.51.100.10) s01 s02 s03 s04 198.51.100.10 に アクセス 宛先MACアドレスを s02のものに書き換える (宛先IPは書き換えない) 戻りパケットは LBを経由しない! (DirectにReturnする!)
  9. L3 DSR このままだとセグメントを 超えられない app-A app-B app-C L2 SW L2

    SW L2 SW L2 SW L3 SW セグメントをまたぐ必要性
  10. L3 DSR パケットをカプセリングする (トンネリング) app-A app-B app-C L2 SW L2

    SW L2 SW L2 SW L3 SW セグメントをまたぐ IP TCP Data IP TCP Data IP 先頭にIPヘッダを付加する(IPIPトンネルの例) IP TCP Data LBでIPヘッダを1つ足す サーバでIPヘッダを1つ取る
  11. L3 DSR パケットをカプセリングする (トンネリング) app-A app-B app-C L2 SW L2

    SW L2 SW L2 SW L3 SW セグメントをまたぐ 戻りのパケットはカプセリング不要
  12. ECMP • Equal Cost Multi Path ◦ コスト(前のスライドで言う距離)が同じだった時 の挙動 ◦

    等コストの場合はルータがロードバランシングす る ◦ (今回の場合)インターネット接続部分 だけでなく、自組織内でも行っている
  13. Connection Trackingのしくみ • 5-tuple ◦   • 5-tupleの組み合わせで転送先を固定する • これでコネクションが維持される

    • ここまでは普通 ◦ (前述の3種類のLBもやってる) • どうやってこれをスケールアウトさせるか ◦ => 分散 Connection Trackingを実装したい!
  14. • バックエンドの数が変わっても均一にしたい Maglev Hashing (Consistent Hashingの応用) • https://blog.acolyer.org/2016/03/21/maglev-a-fast-and-reliable-software-network-load-balancer/ offset =

    hash1(hostname) mod M skip = hash2(hostname) mod (M-1) + 1 (M = 100より大きい素数) // offset = 3, skip = 4のとき B0 = [ 3, // (3 + 0 * 4) mod 7 0, // (3 + 1 * 4) mod 7 4, // (3 + 2 * 4) mod 7 1, // (3 + 3 * 4) mod 7 5, // (3 + 4 * 4) mod 7 2, // (3 + 5 * 4) mod 7 6, // (3 + 6 * 4) mod 7 ]
  15. DSR • 前述のL3 DSR ◦ GREでカプセリング ▪ IPIPのようにヘッダを付加する方式 IP TCP

    Data IP TCP Data IP IP TCP Data LBでIP + GREヘッダを1つ足す サーバでIP + GREヘッダを1つ取る GRE
  16. Maglev論文のまとめ • ECMP + 分散connection tracking + DSR ◦ =>

    Fast and Reliable Software Network Load Balancer • http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/44824.pdf