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

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

Avatar for Kurochan Kurochan
January 12, 2017

Maglev: A Fast and Reliable Software Network Load Balancer

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

Avatar for Kurochan

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