More Related Content
Similar to Maglev: A Fast and Reliable Software Network Load Balancer (20)
Maglev: A Fast and Reliable Software Network Load Balancer
- 1. CyberAgent, Inc. All Rights Reserved
Maglev:
A Fast and Reliable
Software
Network Load
Balancer
アドテクスタジオ Dynalyst 黒崎 優太
- 2. 黒崎 優太
● アドテクスタジオ Dynalyst エンジニア
● 2年目
○ Scala, LXD
● 今日はGoogleの論文の紹介をします
査読に参加しました 自宅に設置しました
- 6. GCPのロードバランサ
● Compute Engine Load Balancing hits 1
million requests per second!
○ https://cloudplatform.googleblog.com/2013_11_01_archive.html
● 1IPアドレス/ウォームアップなしでいきなり
100万RPSをさばける
○ グローバルな
■ 負荷分散
■ 障害耐性
○ ソフトウェアLB
- 11. ● 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の
組み合わせ)
- 13. ● 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
- 14. ● 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 に
アクセス
- 15. ● 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する!)
- 17. L3 DSR
● 前述のDSRをL3で行う
● L2 DSRだと各ネットワークセグメントごとにLB
を設置しなければならない
● →別セグメントにLBを設置!
○ このままだとパケットがセグメントを
またげないのでL3に対応する必要が…
- 25. ECMP
● Equal Cost Multi Path
○ コスト(前のスライドで言う距離)が同じだった時
の挙動
○ 等コストの場合はルータがロードバランシングす
る
○ (今回の場合)インターネット接続部分
だけでなく、自組織内でも行っている
- 46. ● バックエンドの数が変わっても均一にしたい
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
]
- 48. DSR
● 前述のL3 DSR
○ GREでカプセリング
■ IPIPのようにヘッダを付加する方式
IP TCP Data
IP TCP DataIP
IP TCP Data
LBでIP + GREヘッダを1つ足す
サーバでIP + GREヘッダを1つ取る
GRE
- 50. 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