Movatterモバイル変換


[0]ホーム

URL:


Yusuke Komahara, profile picture
Uploaded byYusuke Komahara
PPTX, PDF5,753 views

Ameba広告の配信制御アーキテクチャを刷新した話 ~オレシカナイトvol.3~

オレシカナイト vol.3 の登壇資料です。さまざまな配信にまつわる設定を、実際の広告配信に反映させるための配信制御アーキテクチャを、初期ローンチ後1年半で刷新するにいたった経緯と、そこからの長い戦いの歴史を赤裸々に公開します。

Embed presentation

Downloaded 15 times
Ameba広告の配信制御アーキテクチャを刷新した話オレシカナイト vol.32017-09-27
About me
About me• 駒原 雄祐 (こまはら ゆうすけ)• (株)サイバーエージェント (2010~)MDH アドテクノロジー局所属• サーバサイドエンジニア• Ameba Infeed開発責任者(2015~)
About me• SIer出身• サイバーエージェント入社後• 課金プラットフォーム• コミュニティサービス• 2012年からAmebaの広告のお仕事• 妻と娘(1歳)とチワワ(3歳)の3人と1匹暮らし
今日のテーマ
Ameba広告の配信制御アーキテクチャを刷新した話
配信制御?
ネット広告配信の流れ
作成しているデータ1• 静的なデータ(マスタデータなど)• 広告枠などの配信面の情報• どのフォーマットの広告を何個返すか• 配信したくないNG業種や広告主• 出稿側の情報• 広告主、広告キャンペーン、配信先プレースメント、入札情報など• 広告のクリエイティブ情報(画像、テキスト、動画など) etc…
作成しているデータ2• 動的なデータ• 広告枠ごとに対する配信候補のインデックスなど(様々な条件で時々刻々と変わる)
当初のアーキテクチャ
3分間隔(当初)で設定DBの有効なデータの全量抽出配信に適した形への加工キャッシュサーバへのPUT
バッチサーバが作成したキャッシュデータを世代別に保持
定期的に最新世代のポーリング世代が更新されたらキャッシュサーバのデータを吸い上げオンメモリで保持
良いところ• シンプルな構成でランニングコストが低い• オンメモリで必要な全データをキャッシュするため低レイテンシ• RDBと配信が切り離されているため、RDBがボトルネックになる心配がない• RDB側のスキーマ変更等による配信への影響もない• キャッシュ作成時に問題が起きても、次の世代の処理が成功すれば大丈夫、という安心感
ちなみにこの仕組みについて2016年に弊社公式エンジニアブログで執筆したのでそちらもぜひご一読をhttps://ameblo.jp/principia-ca/entry-12145898865.html当時は「A.J.A.」というブランド名でやってましたが、いろいろあって現在は「Ameba Infeed」という名前でやってます
運用を続けるうちに課題が顕在化
データ量の増加
ビジネス拡大に伴ってデータ量が増大
処理時間が長くなり3分間隔のバッチが3分では終わらなくなる単一サーバのためスケールもできない
データ量増大により容量を逼迫スケールアップで凌ぐ日々
データ量増大によりメモリ逼迫でGCコスト増大吸い上げにも時間がかかるように
結果
当初3分間隔だったバッチ↓10分間隔に
バッチ間隔が延びると・・・• 配信設定の追加/変更や、ON/OFFなどがなかなか配信に反映されない• 予算切れになってもなかなか配信が止まらない
アーキテクチャレベルで刷新することを決断
アーキテクチャレベルで刷新することを決断この時点ではこんなに大変だとは考えていなかった・・・
刷新の方針(状態目標)• DBでのデータ更新から配信への反映は当初と同じ3分以内を目標• スケールしないポイントを作らない• 全データアドサーバ上でのオンメモリにはこだわらない• ただしレイテンシの悪化は許容範囲内に抑える
それを踏まえた実装方針1• 配信設定のデータソースはRDBのまま• データソースまで変えると改修範囲がシステムのほぼ全域に及んでしまう• オンラインでの既存データの移行が現実的でない• 配信時にRDBを直接参照しない点は踏襲
それを踏まえた実装方針2• 世代ごとに毎回全量を作成する方式をやめる• 静的なデータは随時差分更新に(時間あたりの更新対象は少ない)• 動的なデータは一定間隔で全量更新(時間あたりの更新対象は多い)• アドサーバがキャッシュサーバを直接参照する方式から、APIで配信データを提供する方式に
刷新版アーキテクチャ(ver.1)
RDBはこれまでよりも高い並列度のクエリを捌くため、Read Replicaを立ててHAProxy + ELBで負荷分散(ここは苦肉の策・・・)
キャッシュサーバに配信制御に必要な静的データ、動的データが格納されるここにデータが入ることがひとまずのゴール
配信制御APIがアドサーバからのリクエストに対しキャッシュサーバを参照してレスポンスを返す
ジョブスケジューラがキャッシュに載せるデータの種類と抽出条件(例えば最終更新が5分以内のキャンペーンとか)をパラメータにAPIコール
ID PartitionerAPIが指定された条件でDBに対し更新対象のデータのIDを取得するためにSELECT。取得したIDごとにメッセージを作成しKinesisに流す
Synchronizer WorkerがKinesisからメッセージを取り出して該当IDに対するキャッシュデータを作成。キャッシュサーバにPUT
ポイント• 更新対象のデータ種別、条件を指定できるようにし、差分更新を可能に• 現在の設定では最終更新から5分以内の条件で毎分起動(エラー時のリトライも兼ねて)• IDの抽出と、それに対するキャッシュデータ生成とを分離し、Kinesis Streamで非同期化することで並列化しやすくした
Kinesis Stream• AWSのフルマネージドなデータストリーミングサービス• 複数のConsumerアプリケーションに出力できる• シャード数を調整することで、スループットに応じたスケーリングが設定できる• KCLというConsumer用のクライアントライブラリが提供されている
結果
問題点1• 並列度を上げた結果、RDBのレイヤーでReadReplica + HAProxyでもスループットが上がらず、性能要件を満たせない• ある程度以上更新データが混み合うと急激にスローダウンする
問題点2• Kinesis Stream(KCL?)の特性上、シャードとクライアントとが1:1に紐づいてしまう• 特定のクライアントノードでスローダウンが発生したときに他のノードで補い合えない• 遅いクライアントが掴んでいるシャードに入ったメッセージがどんどん遅れてしまう
問題点2 - 図解
問題点2 - 図解
問題点2 - 図解Shard 3に入ったメッセージだけどんどん反映が遅れていく
刷新後アーキテクチャ(ver.2)
RDBをMySQLからAmazon Auroraに• AuroraはAWSが提供するMySQL互換のハイパフォーマンス、高可用なDBエンジン• 元のMySQLと比較して、同じ構成でのスループットが大きく改善して一気に解決• アプリケーションには(既存のものも含めて)一切手を入れなくてもよかった (素晴らしい)
RDBをMySQLからAmazon Auroraに• AWSが提供するMySQL互換のハイパフォーマンス、高可用なDBエンジン• 元のMySQLと比較して、同じ構成でのスループットが大きく改善して一気に解決• アプリケーションには(既存のものも含めて)一切手を入れなくてもよかった (素晴らしい)RDSでのMySQL → Aurora移行もやりました。興味ある方は懇親会でつかまえてください
非同期化部分をKinesis StreamからSQSに• SQSはAWSが提供するフルマネージドなメッセージキューイングサービス• リソースの空いているコンシューマアプリケーションがSQSにメッセージを取りに行くため、特定のデータが遅延していくという心配がなく、均一に
結果
問題点• 静的なデータの更新量が多い状況下ではSynchronizer Workerが混み合い、更新対象の多い動的なデータの定期的な更新が追いつかない• それでも更新要求は一定間隔で送り続けるため、ジョブがどんどん溜まってしまう
刷新後アーキテクチャ(ver.3)
ver.2からの変更点• Synchronizer Workerの後ろにさらにもう一段SQSとWorker(Indexer)を設け、動的なデータ(定期的に全量を洗い直すデータ)はそちらに流すようにした• Indexerは広告枠が生きている限り、インデックスデータを作成したらまたIndexer用SQSにキューイングし、ループすることで繰り返し処理を行う• Indexer用のSQSには30秒の遅延キューの設定を入れた(30秒+αの時間間隔で動的データが更新される)
解決!• SQSの遅延キューの仕組みを利用し、動的データが静的データの影響を受けずに一定間隔(30秒+α)でデータがリフレッシュされる仕組みが実現できた
結果
無事リリース
配信制御のリプレース無事完了
目的は達成できたのか• DBでのデータ更新から配信への反映は当初と同じ3分以内を目標• スケールしないポイントを作らない• 全データアドサーバ上でのオンメモリにはこだわらない• ただしレイテンシの悪化は許容範囲内に抑える
• DBでのデータ更新から配信への反映は当初と同じ3分以内を目標• スケールしないポイントを作らない• 全データアドサーバ上でのオンメモリにはこだわらない• ただしレイテンシの悪化は許容範囲内に抑える目的は達成できたのかデータの更新量により上下するが概ね2分以内で反映
• DBでのデータ更新から配信への反映は当初と同じ3分以内を目標• スケールしないポイントを作らない• 全データアドサーバ上でのオンメモリにはこだわらない• ただしレイテンシの悪化は許容範囲内に抑える目的は達成できたのかDB、キャッシュはもとより、各モジュールが分散並列処理できるようになったため、スケールアウトによるスケーリングが可能に
目的は達成できたのか• DBでのデータ更新から配信への反映は当初と同じ3分以内を目標• スケールしないポイントを作らない• 全データアドサーバ上でのオンメモリにはこだわらない• ただしレイテンシの悪化は許容範囲内に抑える平均レイテンシ約50ms→約65msなんとか許容範囲と思える範囲内に抑えることができた
リリース後
2017年8月に完全移行• 配信制御API• ピーク時70000qps程度• レイテンシ3~4ms前後• 配信への反映• 概ね2分以内を維持
今後の課題• 配信制御APIのレスポンスをもう少し速くしたい• 1回の配信で何度も叩かれるAPIなので、1msの改善が全体では大きくレイテンシの改善につながる• DSP(=Demand Side Platform)などレイテンシ要件が厳しいものにも不安なく使えるようにしたい• インフラコストの削減• システムが複雑化した分、インフラコストは膨らんでしまった
ご清聴ありがとうございました

Recommended

PDF
SmartNews TechNight vol5 SmartNews Ads大図解
PDF
SmartNews TechNight Vol.5 : SmartNews Ads の配信最適化の仕組みはどうなってるの? (エンジニア / SmartN...
PDF
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
PPTX
Firebaseを利用するためにGCPとCloud IAMの 基本を理解しよう
ODP
Guide To AGPL
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
PPTX
基礎から学ぶ? EC2マルチキャスト
PDF
GraphQL入門 (AWS AppSync)
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
PDF
20200630 AWS Black Belt Online Seminar Amazon Cognito
PPTX
BuildKitによる高速でセキュアなイメージビルド
PPTX
Elasticsearch as a Distributed System
PPTX
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PDF
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PPTX
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
PPT
Cassandraのしくみ データの読み書き編
PDF
Consulを頑張って理解する
PDF
Yahoo! JAPANにおけるApache Cassandraへの取り組み
PDF
はじめよう DynamoDB ハンズオン
PDF
Aws auto scalingによるwebapサーバbatchサーバの構成例
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
PDF
マイクロにしすぎた結果がこれだよ!
PDF
ストリーム処理エンジン「Zero」の開発と運用
PDF
goで末尾再帰最適化は使えるか?

More Related Content

PDF
SmartNews TechNight vol5 SmartNews Ads大図解
PDF
SmartNews TechNight Vol.5 : SmartNews Ads の配信最適化の仕組みはどうなってるの? (エンジニア / SmartN...
PDF
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
PPTX
Firebaseを利用するためにGCPとCloud IAMの 基本を理解しよう
ODP
Guide To AGPL
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
PPTX
基礎から学ぶ? EC2マルチキャスト
SmartNews TechNight vol5 SmartNews Ads大図解
SmartNews TechNight Vol.5 : SmartNews Ads の配信最適化の仕組みはどうなってるの? (エンジニア / SmartN...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
Firebaseを利用するためにGCPとCloud IAMの 基本を理解しよう
Guide To AGPL
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
基礎から学ぶ? EC2マルチキャスト

What's hot

PDF
GraphQL入門 (AWS AppSync)
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
PDF
20200630 AWS Black Belt Online Seminar Amazon Cognito
PPTX
BuildKitによる高速でセキュアなイメージビルド
PPTX
Elasticsearch as a Distributed System
PPTX
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PDF
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PPTX
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
PPT
Cassandraのしくみ データの読み書き編
PDF
Consulを頑張って理解する
PDF
Yahoo! JAPANにおけるApache Cassandraへの取り組み
PDF
はじめよう DynamoDB ハンズオン
PDF
Aws auto scalingによるwebapサーバbatchサーバの構成例
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
PDF
マイクロにしすぎた結果がこれだよ!
GraphQL入門 (AWS AppSync)
ヤフー社内でやってるMySQLチューニングセミナー大公開
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
20200630 AWS Black Belt Online Seminar Amazon Cognito
BuildKitによる高速でセキュアなイメージビルド
Elasticsearch as a Distributed System
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
Cassandraのしくみ データの読み書き編
Consulを頑張って理解する
Yahoo! JAPANにおけるApache Cassandraへの取り組み
はじめよう DynamoDB ハンズオン
Aws auto scalingによるwebapサーバbatchサーバの構成例
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
マイクロにしすぎた結果がこれだよ!

Viewers also liked

PDF
ストリーム処理エンジン「Zero」の開発と運用
PDF
goで末尾再帰最適化は使えるか?
PPTX
NIPS2015読み会: Ladder Networks
PDF
Test Yourself - テストを書くと何がどう変わるか
PPTX
re:Invent 行ってきた
PDF
ICCV 2017 速報
PPTX
DSPでgolangの屍を超えた話 (オレシカナイト Vol.2)
PPTX
1年目でgolangとscalaを触った話
 
PDF
iQONを支えるクローラーの裏側
PDF
コンピュータビジョンの今を映す-CVPR 2017 速報より- (夏のトップカンファレンス論文読み会)
ストリーム処理エンジン「Zero」の開発と運用
goで末尾再帰最適化は使えるか?
NIPS2015読み会: Ladder Networks
Test Yourself - テストを書くと何がどう変わるか
re:Invent 行ってきた
ICCV 2017 速報
DSPでgolangの屍を超えた話 (オレシカナイト Vol.2)
1年目でgolangとscalaを触った話
 
iQONを支えるクローラーの裏側
コンピュータビジョンの今を映す-CVPR 2017 速報より- (夏のトップカンファレンス論文読み会)

Ameba広告の配信制御アーキテクチャを刷新した話 ~オレシカナイトvol.3~


[8]ページ先頭

©2009-2025 Movatter.jp