AWSで
透過プロキシやってみた
株式会社サイバーエージェント
黒崎 優太
216-3-23
自己紹介
•  黒崎 優太	
•  @kuro_m88
•  株式会社サイバーエージェント
•  新卒
•  サーバサイドエンジニア
•  セキュリティ&プログラミングキャンプ2010 OS自作組
•  最近やってること
•  ドローン自作
316-3-23
416-3-23
アドテクコンペ
	
•  学生に3日間で広告のリアルタイム入札システムを作ってもらう	
•  RTB	
•  広告のインプレッションが発生すると同時に広告枠のオークションをする
•  数万〜数十万 req / sec
学生側の要件
•  本番(オークション)は3時間	
•  2000req /sec	
•  タイムアウトは100ms (SSP側で計測)	
•  リクエストを直接受けるサーバは m4.2xlarge 5台まで	
•  その他はリソース制限なし
•  チームにAWSアカウントを配布するので自由に使ってOK💸💸😱💸💸	
•  広告主ごとの仮想の予算が渡される	
•  機械学習等を用いて効率よく入札して利益を一番多く出したチームが優勝	
516-3-23
616-3-23
DSPの構成例  (学生が作るやつ)
716-3-23
SSPの構成
816-3-23
レスポンスタイムを計測したい
•  リクエストを投げる側がレスポンスタイムを計測するには	
•  リクエストを受け取った時刻 - リクエストを投げた時刻
•  リクエストを返す側(DSP)が不安定だったら?🔥
•  スレッドのディスパッチが遅延したり、
SSPも不安定になる可能性 (ちゃんと計測できない)
•  2000QPS * 8 = 16,000QPS
•  通常なら不安定なDSPは切断するけど、インターンなので😅🙏
•  インフラ側で計測してみよう💪	
916-3-23
ここで言う透過Proxy
1016-3-23
透過Proxy (squid)	
policy based routing
AWSで透過Proxy
1116-3-23
squid 	
ssp slave	
 implied router	
metrics	
to DSP	
nat	
request
出来上がったconfig
1216-3-23
ハマった事
•  ホストの上限にぶち当たる	
•  100台くらい立てても大丈夫なんじゃないの?
•  5台で上限にぶちあたる…
•  急いで上限緩和申請🙇🙇🙏🙏🙇🙇🙏🙏
•  policy based routingされない😱	
•  vyOSでNATが先に適用されてそのまま外に抜けてしまっていた
•  squidをNATした先のセグメントに移動させる
1316-3-23
ハマった事
•  なんかパケットが変な方向から来る😱	
•  意図しないIPから通信を投げている
•  暗黙のルータ…😿😿
1416-3-23
AWSで透過Proxy
1516-3-23
squid 	
ssp
worker	
implied router	
metrics	
to DSP	
nat
ハマった事
•  なんかパケットが変な方向から来る😱	
•  意図しないIPから通信を投げている
•  暗黙のルータ…😿😿
•  デフォゲを書き換えて対応
•  クラウドで変なことするのはつらい 🙊
1616-3-23
ハマった事
•  試しに動かしてみたらヘッダだけ返ってくるんですけど😱	
•  MTU 9001…😭😭😭
•  AWSのデフォルトMTUは9001
•  vyOSのMTUは1500…orz
•  レスポンスヘッダのパケットだけ

小さいから通る/(^o^)\	
1716-3-23
SSPの構成
1816-3-23
Datadogで可視化!
1916-3-23
Datadogで可視化!
2016-3-23
その他
•  Elasticache(Redis)作ってみたんですけど見てもらえますか?🙋	
•  read replicaがサーバの台数と同じだけ居た😱
•  マスタスレーブ構成について知ってもらう
•  レスポンスがめっちゃおそくて泣きそうです!😭😭😭	
•  us-east-1
•  SSPのmasterがログを吐きすぎて死亡	
•  ログの粒度は適切に
•  余裕を持ったストレージ設計
•  LBからはずさずにデプロイを始めたチームがいて、SSPが完全に沈黙	
•  一時的にリクエスト送信対象からはずす
•  学生に自由にクラウドを触らせた結果…	
•  適切な監視をしていれば破産しない💪
•  すごい評判よかったので夏もやるかもしれません!!	
2116-3-23

AWSで透過プロキシをやってみた