jaws-2013-lt 10000req/secを50msecで返すサーバーインフラをawsで作る

12
10000req/sec50msecで返す サーバーインフラをAWSで作る - RTB広告配信システムの開発・運用 - 2013/3/15 山田 直行 (株式会社AMoAd(サイバーエージェント))

Upload: naoyuki-yamada

Post on 31-May-2015

1.993 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

10000req/secを50msecで返すサーバーインフラをAWSで作る- RTB広告配信システムの開発・運用 -

2013/3/15山田 直行 (株式会社AMoAd(サイバーエージェント))

Page 2: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

発表者について

• 山田直行(やまだ なおゆき)インフラ寄りのソフトウェアエンジニア(インフラ設計、サーバー運用、負荷対策、運用自動化)

• ソーシャルゲームのインフラエンジニア→広告配信の世界へ

• 好きな言語はPHP 好きなデータベースはMySQL

• 好きなエディタはvimとIntelliJ

• 好きなAWSサービスはRoute53

• https://www.facebook.com/yamadanaoyukihttps://twitter.com/satully

Page 3: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

株式会社AMoAd

• :DeNAとサイバーエージェントの共同出資の子会社Ameba + Mobage + Advertisement = AMoAd

• スマホ向け広告配信(アドネットワーク)事業

• 海外向けに広告配信を今年始めから運用開始→今日はこの中の、RTB広告の配信システムの話をします

Page 4: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

RTB広告配信? SSP = Supply Side Platform(メディア側)DSP = Demand Side Platform(広告主側) RTB = Real Time Bidding(リアルタイム広告入札)

ここの話

Page 5: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

インフラ設計時の要件

• 「ネットワークレイテンシの都合上、サーバーは北米東海岸に置く」

• 「規模は拡大し続けるので、どこまでもスケーラブルに」

• 「世界の他の地域でも立ち上げていくので、多展開しやすいように考慮して」

• 「フルスクラッチで作るけど、3ヶ月後にリリースできるように」

• 「 配信サーバーは10000req/secを50msec以内で安定して返し続けられるように」

• 「 計測サーバーは特にクリック・コンバージョンなどの計測データは絶対にロストしないよう、全てのリクエストを漏らさず受けきる」

Page 6: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

設計方針と課題

•どう見てもAWS一択(S3の存在、マルチリージョン、CloudFrontなど考慮して総合的に)

• リアルタイム入札で他社に勝っていくため、とにかく配信サーバー(bidサーバー)が重要

• 50msecというレスポンスタイム要件が厳しい。ネットワークが安定しないといわれるクラウドでやれるか?

→レイテンシを短くする工夫が必要

Page 7: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

設計上で工夫しているところ

1)フロントのロードバランサにELBを使わず、Apache+mod_proxyを使う

2)配信データのあるMySQLサーバーやKVSは各アプリケーションサーバーにレプリケーションする

3)必要最小限のデータを配信サーバーにレプリケーションするため、 MySQLを多段レプリケーションする

4)配信サーバーはAZ間で冗長化しない。そのかわり障害時には短時間で全てのサーバー群を自動でたちあげて復旧できるようにする

Page 8: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

1)ELBを使わず、Apache+mod_proxyを使う

Page 9: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

2)各アプリケーションサーバーにDBをレプリする

Page 10: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

3)MySQLを多段レプリケーションする

Page 11: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

4)AZ間で冗長化しない。復旧を高速・自動化する

実際には、片方のAZが落ちるということはほとんどない

DSPというサービスだから取れる手段という話も・・・

レイテンシを短くするため、配信系サーバーは一つのAZに集中させる

Page 12: JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る

今後やりたいこと

•OpsWorks?

現状はfabricとchef-soloでCUIベースで独自システムを開発・運用中だが

•RedShift?EMRを使っているところを部分的に置き換えられるかも!