Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Maglev: A Fast and Reliable Software Network Lo...
Search
Kurochan
January 12, 2017
Technology
1
180
Maglev: A Fast and Reliable Software Network Load Balancer
GoogleのMaglevというロードバランサの論文の紹介です。
Kurochan
January 12, 2017
Tweet
Share
More Decks by Kurochan
See All by Kurochan
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
220
入門 電気通信事業者
kurochan
13
5.6k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
5.6k
GoでTCP Proxyを実装してみよう
kurochan
1
1.1k
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
490
スケールするというのはどういうことなのか
kurochan
14
4.9k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
52
46k
Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
kurochan
10
3.5k
セキュキャンを卒業してその後
kurochan
0
1.4k
Other Decks in Technology
See All in Technology
In Praise of "Normal" Engineers (LDX3)
charity
2
1.2k
AIの最新技術&テーマをつまんで紹介&フリートークするシリーズ #1 量子機械学習の入門
tkhresk
0
120
LinkX_GitHubを基点にした_AI時代のプロジェクトマネジメント.pdf
iotcomjpadmin
0
160
ハノーバーメッセ2025座談会.pdf
iotcomjpadmin
0
140
エンジニア向け技術スタック情報
kauche
0
110
kubellが挑むBPaaSにおける、人とAIエージェントによるサービス開発の最前線と技術展望
kubell_hr
1
390
Observability infrastructure behind the trillion-messages scale Kafka platform
lycorptech_jp
PRO
0
130
生成AIでwebアプリケーションを作ってみた
tajimon
2
120
本部長の代わりに提案書レビュー! KDDI営業が毎日使うAIエージェント「A-BOSS」開発秘話
minorun365
PRO
14
2.3k
Perk アプリの技術選定とリリースから1年弱経ってのふりかえり
stomk
0
120
讓測試不再 BB! 從 BDD 到 CI/CD, 不靠人力也能 MVP
line_developers_tw
PRO
0
1.1k
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
550
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
14k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Why Our Code Smells
bkeepers
PRO
337
57k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Being A Developer After 40
akosma
90
590k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Side Projects
sachag
455
42k
Optimizing for Happiness
mojombo
379
70k
KATA
mclloyd
29
14k
Practical Orchestrator
shlominoach
188
11k
Transcript
CyberAgent, Inc. All Rights Reserved Maglev: A Fast and Reliable
Software Network Load Balancer アドテクスタジオ Dynalyst 黒崎 優太
黒崎 優太 • アドテクスタジオ Dynalyst エンジニア • 2年目 ◦ Scala,
LXD • 今日はGoogleの論文の紹介をします 査読に参加しました 自宅に設置しました
概要 • Maglevとは • ロードバランサ 3方式 ◦ ふつうのやつ(?) ◦ DNS-RR
◦ DSR • Maglevのアーキテクチャ ◦ ECMP ◦ 分散 Connection Tracking ◦ DSR
Maglevとは
Maglevとは • Googleの分散型L4ロードバランサ ◦ GCPのロードバランサの元になっている • 今日はタイトルになっているMaglevに関す る論文を解説します。
GCPのロードバランサ • Compute Engine Load Balancing hits 1 million requests
per second! ◦ https://cloudplatform.googleblog.com/2013_11_01_archive.html • 1IPアドレス/ウォームアップなしでいきなり 100万RPSをさばける ◦ グローバルな ▪ 負荷分散 ▪ 障害耐性 ◦ ソフトウェアLB
余談: Facebook • http://www.slideshare.net/pallotron/dhcp-at-facebook-evolution-of-an-infrastructure
ロードバランサ3方式: ふつうのやつ
• 普通すぎて(?)なんと言えばよいのやら… ◦ 一番わかりやすい例 ◦ NAPTする ふつうのやつ
ロードバランサ3方式: DNS RR
• 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の 組み合わせ)
ロードバランサ3方式: DSR
• 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
• 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 に アクセス
• 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する!)
• 戻りトラフィックがどんなに大きくてもLBはリ クエストだけ転送すれば良いので ◦ 転送負荷が非常に低くなる! ◦ 遅延も抑えられる! ◦ 送信元IPが書き換わらない! L2
DSR のいいところ
L3 DSR • 前述のDSRをL3で行う • L2 DSRだと各ネットワークセグメントごとにLB を設置しなければならない • →別セグメントにLBを設置!
◦ このままだとパケットがセグメントを またげないのでL3に対応する必要が…
L3 DSR このままだとセグメントを 超えられない app-A app-B app-C L2 SW L2
SW L2 SW L2 SW L3 SW セグメントをまたぐ必要性
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つ取る
L3 DSR パケットをカプセリングする (トンネリング) app-A app-B app-C L2 SW L2
SW L2 SW L2 SW L3 SW セグメントをまたぐ 戻りのパケットはカプセリング不要
Maglevのアーキテクチャ: ECMP
パケットは吸い込むもの • インターネット上では トラフィックは吸い込まれる ◦ 経路を広告すると、パケットが 送られてくる(吸い込まれるイメージ) ◦ 複数拠点で同じ経路を広告すれば、 近い方(コストが小さい方)に吸い込まれる
パケットは吸い込むもの • 同じアドレスレンジを広報しても、 近い方に吸い込まれる(IP AnyCast) 日本リージョン アメリカリージョン 198.51.100.1/24 は こっちですよ♪
198.51.100.1/24 は こっちですよ♪
パケットは吸い込むもの • リージョン丸ごと障害が起きても大丈夫 198.51.100.1/24 は こっちですよ♪ 198.51.100.1/24 は こっちですよ♪ 一番近いところへ
日本リージョン アメリカリージョン
ECMP • Equal Cost Multi Path ◦ コスト(前のスライドで言う距離)が同じだった時 の挙動 ◦
等コストの場合はルータがロードバランシングす る ◦ (今回の場合)インターネット接続部分 だけでなく、自組織内でも行っている
ECMP • 同じ距離(コスト)のルータが複数あったら? アメリカリージョン 198.51.100.1/24 は こっちですよ♪ 198.51.100.1/24 は こっちですよ♪
日本リージョン
ECMP • ロードバランスされる アメリカリージョン 198.51.100.1/24 は こっちですよ♪ 198.51.100.1/24 は こっちですよ♪
日本リージョン
Maglevのアーキテクチャ: 分散 Connection Tracking
Connection Tracking • これがないと通信が崩壊する
Connection Trackingがない時… TCPのコネクションを確立してみる SYN
Connection Trackingがない時… TCPのコネクションを確立してみる SYN SYN/ACK
TCPのコネクションを確立してみる Connection Trackingがない時… SYN SYN/ACK ACK 身に覚えのない ACK コネクション 確立不能
Connection Trackingがある時! TCPのコネクションを確立してみる SYN
Connection Trackingがある時! TCPのコネクションを確立してみる SYN SYN/ACK
Connection Trackingがある時! TCPのコネクションを確立してみる SYN SYN/ACK ACK コネクション 確立成功! connection tracking
Connection Trackingのしくみ • 5-tuple ◦ • 5-tupleの組み合わせで転送先を固定する • これでコネクションが維持される
• ここまでは普通 ◦ (前述の3種類のLBもやってる) • どうやってこれをスケールアウトさせるか ◦ => 分散 Connection Trackingを実装したい!
スケールアウトさせるには • どのLBに通信が来ても同じ挙動をする必要 がある ECMP コネクション確立済
• どのLBに通信が来ても同じ挙動をする必要 がある ◦ 独立してコネクション 管理するとダメ スケールアウトさせるには 身に覚えのない コネクション ECMP
クライアントは 1コネクションしか張っていな いので 1台としか通信できない コネクション確立済
• こうなってほしい ◦ 全台が同じ情報を持った状態 ◦ とはいえLB間でコネクションの情報を リアルタイムに同期するのは難しい スケールアウトさせるには コネクション確立済 ECMP
ECMP 必ず1対1で通信が 成立する状態!
Consistent Hashing • http://www.slideshare.net/paulowniaceae/consistent-hash
Consistent Hashing • 円を用意します • ハッシュ関数を使って適当に サーバを置きます
Consistent Hashing • ハッシュ関数を使って適当にサーバと クライアントを 振り分けます ◦ 5-tupleを使う hash((srcIP, srcPort,
dstIP, dstPort, proto))
Consistent Hashing • 各サーバは時計回り方向のクライアントを 処理する
• 複数LBでも一意な転送ができる! Consistent Hashing hash( ) hash( ) Maglev nodes
• スケールアウトしても担当が変わる サーバが最小限 Consistent Hashing ↑増えた hash( ) hash( )
Maglev nodes
• バックエンドの数が変わっても均一にしたい 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 ]
Maglevのアーキテクチャ: DSR
DSR • 前述のL3 DSR ◦ GREでカプセリング ▪ IPIPのようにヘッダを付加する方式 IP TCP
Data IP TCP Data IP IP TCP Data LBでIP + GREヘッダを1つ足す サーバでIP + GREヘッダを1つ取る GRE
Maglevとは
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
今日話さなかったこと
疑問 • GCPはHTTP ロードバランサ(L7)も 用意されてるがどんな仕組みなのか • 1ノードあたりの性能高すぎない? ◦ ショートパケットでも10Gbps出るらしい ▪
ユーザ空間でパケットを処理 (Intel DPDK的な)してるらしい
ご清聴ありがとうございました