Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバレスアーキテクチャで実現した「M-1グランプリ」敗者復活戦投票システム

 サーバレスアーキテクチャで実現した「M-1グランプリ」敗者復活戦投票システム

2010年から5年の沈黙を経て復活した M-1グランプリ、その中で優勝者を送り出すなど番組の大きな特徴となっている視聴者投票方式での敗者復活戦。この投票システムを2015年の復活後二回大会に渡り、サーバレスアーキテクチャで実現しました。短期間に発生するトラフィックをさばけるよう、サーバレス構成でどのように注意したのか等を、実際の構成図を交えてご紹介します。

Eiji KOMINAMI / 小南英司

November 18, 2017
Tweet

More Decks by Eiji KOMINAMI / 小南英司

Other Decks in Technology

Transcript

  1. designed by shiho ⾃⼰紹介  ⼩南 英司(こみなみ えいじ)      朝⽇放送株式会社 技術局開発部

      サーバサイドの構築 から アプリの実装 まで   プリキュア応援アプリの開発/実装   ⾼校野球速報アプリの開発/実装   ライブ動画配信⽤制作システムの構築                 ...など 2 @eijikominami
  2. designed by shiho Agenda  M-1グランプリ投票システムの概要 - M-1グランプリの裏側を⽀える投票システムとは -  AWS/サーバレスを選択した理由 -

    なぜAWSのサーバレスアーキテクチャを採⽤したか -  番組との連動に耐えうるシステムの設計 - 信頼性の⾼いシステムの構築 - 3
  3. designed by shiho M-1敗者復活戦投票システムの概要   視聴者投票の実施と集計を⾏うシステム   AWSのサーバレスアーキテクチャの活⽤   ⾃社社員2名のみでシステム構築から運⽤までを担当

      ⽣放送や番組連動でも確実に運⽤可能な⾼可⽤性の実現   集計処理   結果の表⽰  Webページ 投票 結果 v  視聴者投票で最も得票を得たコンビが、決勝戦の舞台へ進出 5 ON AIR
  4. designed by shiho 視聴者 M-1敗者復活戦投票システムの概要   Webコンテンツの提供 Amazon CloudFront Elastic Load

    Balancing Amazon EC2 Amazon Kinesis 管理 システム管理 Amazon CloudWatch 投票データの受付 データの抽出/判定 データの蓄積 結果表⽰ページ インターネット 番組制作者 システム運⽤者 Amazon Web Services Webコンテンツ 表⽰ Amazon EC2 Kinesis Enabled App Amazon DynamoDB     投票データ処理 Amazon API Gateway 投票データ処理 6 2016年〜 データ放送からも 投票が可能に! 膨⼤な負荷への対策 安定した集計処理の実現 投票データの受付
  5. designed by shiho オンプレミス環境 実はオンプレにも投票システムがあります   ABC放送通信連携システム(2012年〜)   データ放送コンテンツ制御  

    SNS連携機能   視聴者投票集計機能 視聴者 インターネット Webコンテンツの提供 投票データの受付 Webサーバ CentOS + Apache + MySQL L4Switch 投票の制御 投票データ集計 集計サーバ CentOS + PHP + MySQL 設問の登録/制御 システム監視 操作端末 スタジオ/サブに設置 データ放送設備等 放送系システム データ放送 コンテンツの制御 9 ディレクター等 番組制作者
  6. designed by shiho 既存の投票システムを使わなかった理由   アクセスの集中↔限りあるサーバリソース   5年ぶりに復活/年に1度のお笑いイベント •  2008年決勝戦視聴率:35.0%(関⻄地区)

      敗者復活戦出場コンビの運命を決める投票企画   M-1グランプリ専⽤に機能の作り込みが必要   ...なのに限られた⾮常にタイトな開発スケジュール v  オンプレミス環境では投票データを処理しきれない可能性 検証期間 M-1グランプリ当⽇  開発期間:わずか43⽇ 仕様決定 開発開始 10/13 11/25 開発 完了 12/6 11/26-12/5 9⽇間 11
  7. designed by shiho AWS/サーバレスを選択した理由 当たり前ですが...   アクセス集中による⾼負荷対策がラク   「マネージドサービス」を利⽤することで簡単に負荷対策等が可能に  

    ドキュメントやツールが豊富   SDKの組み込みにより、プログラムの実装を簡素化 v  短い開発期間(1ヶ⽉強)でシステム構築が可能 v  サーバの増設, 設定値のチューニングなどの⼿間を省⼒化 v  少ない学習コストで実現したいシステムを構築 v  少ない作業コストでシステム運⽤が可能 12
  8. designed by shiho   従来の構成 ロードバランサ 複数台の仮想サーバ リレーショナルデータベース AWS/サーバレスを選択した理由  

    本システム(サーバレスアーキテクチャの採⽤)    Amazon Kinesis    Kinesis Enabled App    Amazon DynamoDB 負荷対策やバックアップ等 設定作業が必要 サーバレス サーバレス 徹底した作り込みが可能に! ⾃社開発プログラム ⾼い拡張性、⾃動バックアップ機能 ⼤量データをリアルタイム処理 バッファ機能による負荷の平準化 負荷対策やバックアップはサービス側におまかせ ⇨ プログラムの開発に⼈的リソースを集中 視聴者 視聴者 従来型 従来型 従来型 13
  9. designed by shiho   従来の構成 ロードバランサ 複数台の仮想サーバ リレーショナルデータベース AWS/サーバレスを選択した理由  

    本システム(サーバレスアーキテクチャの採⽤)    Amazon Kinesis    Kinesis Enabled App    Amazon DynamoDB 負荷対策やバックアップ等 設定作業が必要 サーバレス サーバレス 徹底した作り込みが可能に! ⾃社開発プログラム ⾼い拡張性、⾃動バックアップ機能 ⼤量データをリアルタイム処理 バッファ機能による負荷の平準化 負荷対策やバックアップはサービス側におまかせ ⇨ プログラムの開発に⼈的リソースを集中 視聴者 視聴者 従来型 従来型 従来型 放送通信連動企画で、 本サービスの利⽤は⽇本初! 14
  10. designed by shiho Kinesisはバースト対策に最適   番組連動:バーストトラフィックが発⽣   番組内の告知によって莫⼤なトラフィックが発⽣   全投票数のうち告知後1分間の投票が2〜6割を占める

      Amazon Kinesis:⽔量調整機能を担うダム   指定したシャード数のトラフィックはきちんと受けてくれる   Kinesis Enabled Appの処理能⼒を⾃分で決められる v  莫⼤なアクセスが来ても⾃分で負荷をコントロールできる 毎秒数万レコード Amazon Kinesis Kinesis Enabled App 毎秒数千レコード 15
  11. designed by shiho   テーブル構成   投票データテーブル   得票数テーブル  

    Atomic Counter   投票データ受信毎にどのコンビであるかを判定し、 updateItemメソッドによって各コンビの得票数を増減 16 DynamoDBで簡単集計処理 Kinesis Enabled App Amazon DynamoDB 投票データテーブル ユーザID, 投票したコンビ 得票数テーブル コンビID, 得票数 Atomic Counter 投票済みであるか判定 投票データの格納 EC2 番組制作者 集計結果の表⽰
  12. designed by shiho 17 API Gatewayを⽤いた投票データ受付   テレビからの投票に対応(2016年〜)   データ放送コンテンツ

    •  特殊なマークアップ⾔語(BML)で記述されている •  スクリプト上で使える関数が限られている   通信を⾏う上での制約 •  HTTP(S) POSTのみ送信可能 •  POSTで送信可能なパラメータは1つだけ(Denbun) v  テレビ受像機からKinesisには直接データ投⼊できない Amazon Kinesis Amazon API Gateway Amazon CloudFront SSL終端 データ受付
  13. designed by shiho 想定の最⼤10倍程の 投票リクエストを受信 負荷試験に基づいたシステムの最適化   番組告知時に莫⼤な負荷が集中   ⾼負荷に耐えうるシステムであるか何度もテスト

      負荷試験に基づいてシステム構成や設定値を決定 Kinesis データの取得 負荷⽣成システム M-1投票システム 300万件/20分 最⼤ 1万件/毎秒 データ投⼊ スクリプト EC2 20台 EC2 16台 負荷⽣成 サーバ ロード バランサ 20
  14. designed by shiho 集計処理プログラム(Kinesis Enabled App)   ⾼速処理   複数スレッドによる並列処理とパラメータの最適化

      不正データの排除   厳格なフォーマットチェック   ⾼い安定性   強⼒な例外処理やエラー処理を実装   ⾼い汎⽤性   パラメータを詳細に指定することが可能 •  全国ネットから深夜帯ローカル番組まで様々な番組で使⽤できる Kinesis DynamoDB Kinesis Enabled App データ取得 書き込み # java -jar kinesis-app-m1gp.jar -streamname m1gp_mob -region ap- northeast-1 -maxrecords 1000 -deadline 1449394200000 21
  15. designed by shiho バージニア州にバックアップシステムを構築 バックアップシステム    US・バージニア州 ⽇⽶で同⼀システムを構築 ⽇⽶並⾏して集計処理を実施 本番システム

       東京 v 東京・バージニア間で 受信データバックアップ転送 v 通信障害やデータセンタ障害時も バックアップシステムで処理を継続 23
  16. designed by shiho バージニア州にバックアップシステムを構築 Kinesis [データ蓄積] DynamoDB [データベース] EC2 [結果の表⽰]

    Kinesis enabled App [投票データの抽出] バージニア 東京 通常時 v 投票データを共有し、並⾏して集計処理を実施 投票データ (待機) 監視端末 ABC本社 監視端末 テレビ朝⽇ AWS創業の地 リソースが豊富 24
  17. designed by shiho バージニア州にバックアップシステムを構築 Kinesis [データ蓄積] DynamoDB [データベース] EC2 [結果の表⽰]

    Kinesis enabled App [投票データの抽出] バージニア 東京 障害発⽣時 v バックアップシステムで集計を継続する 投票データ (待機) 監視端末 ABC本社 監視端末 テレビ朝⽇ 25
  18. designed by shiho データストレージへの⾃動バックアップ   各システムが持つデータ/ログをストレージにバックアップ   サービス障害が発⽣してもある程度復旧可能 Kinesis データ蓄積

    DynamoDB データベース EC2 結果の表⽰ Kinesis enabled App 投票データの抽出 投票データ 監視端末 ABC本社 S3 データストレージ データベース バックアップ 通常時 v 各システムのデータ/ログを定期的にバックアップ 26 Lambda Data Pipeline
  19. designed by shiho データストレージへの⾃動バックアップ   各システムが持つデータ/ログをストレージにバックアップ   サービス障害が発⽣してもある程度復旧可能 Kinesis データ蓄積

    DynamoDB データベース EC2 結果の表⽰ Kinesis enabled App 投票データの抽出 監視端末 ABC本社 S3 データストレージ データベース バックアップ 障害発⽣時 v バックアップデータから投票データを復元 投票データ 27 Lambda Data Pipeline
  20. designed by shiho 運⽤負荷低減の試み   システム設定⽤スクリプトを作成   各システムの初期化や設定変更を⾏う対話式スクリプト   システムの再構築や初期化を簡単に⾏うことが可能

    システム運⽤者 少⼈数でも 運⽤可能に 操作端末 Kinesis設定スクリプト データベース設定スクリプト 集計システム設定スクリプト ログ取得設定スクリプト ストレージ設定スクリプト 初期化 設定変更 ⾃社作成スクリプト # sh /home/ec2-user/initialize-dynamodb/initialize-dynamodb.sh Read/WriteCapacitiyUnits : 1000 28
  21. designed by shiho クラウドの機能を最⼤限に活⽤したシステム   サーバレスアーキテクチャの活⽤   ⾃社社員2名のみでシステム構築から運⽤までを⾏う   プログラムの開発実装にリソースを集中

    •  わずか1ヶ⽉強でシステムを内製 •  安定性を重視したシステムを設計 v  システムの構築 v  当⽇の運⽤ ⾼い信頼性を実現 少ない作業負荷 放送通信連携のコアとなるシステムへ 今後も改修/機能追加を予定... 29
  22. designed by shiho 31 動画配信システム基盤におけるAWSの活⽤   動画配信コンテンツ管理システム   動画配信プラットフォームに素材やメタデータを配信  

    動画プレイヤーログ解析   サーバレス & 完全⾃社開発 でシステム運⽤中 Amazon RDS 動画データの管理 Amazon EC2 動画データ管理CMS Amazon S3 動画コンテンツ/メタデータ Amazon API Gateway ログデータの取得 Amazon Kinesis ストリームバッファ Amazon Lambda ログデータの抽出 Amazon S3 ログデータの活⽤ Amazon Athena ログデータ解析 サーバレス サーバレス サーバレス サーバレス サーバレス 導⼊検討中 サーバレス (技術協⼒:         )
  23. designed by shiho   CG送出機の制御と連動したWebシステム   若⼿社員から成る開発チームによる⾃社開発 32 放送システムとAWSとの連携 Amazon

    RDS ステータスの管理 Amazon EC2 データ処理 Amazon EC2 投票受付 視聴者 CG動画送出機 再⽣スタート!