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
kubellが挑むBPaaSにおける、人とAIエージェントによるサービス開発の最前線と技術展望
kubell_hr
1
390
【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術
cygames
0
820
標準技術と独自システムで作る「つらくない」SaaS アカウント管理 / Effortless SaaS Account Management with Standard Technologies & Custom Systems
yuyatakeyama
2
990
~宇宙最速~2025年AWS Summit レポート
satodesu
1
1k
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
770
(非公式) AWS Summit Japan と 海浜幕張 の歩き方 2025年版
coosuke
PRO
1
320
Clineを含めたAIエージェントを 大規模組織に導入し、投資対効果を考える / Introducing AI agents into your organization
i35_267
4
1.3k
Amazon S3標準/ S3 Tables/S3 Express One Zoneを使ったログ分析
shigeruoda
2
380
CI/CDとタスク共有で加速するVibe Coding
tnbe21
0
230
白金鉱業Meetup_Vol.19_PoCはデモで語れ!顧客の本音とインサイトを引き出すソリューション構築
brainpadpr
2
470
Agentic Workflowという選択肢を考える
tkikuchi1002
1
350
原則から考える保守しやすいComposable関数設計
moriatsushi
3
500
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
A better future with KSS
kneath
239
17k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
How GitHub (no longer) Works
holman
314
140k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Visualization
eitanlees
146
16k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
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的な)してるらしい
ご清聴ありがとうございました