Cookpad Tech Kitchen #15

437a286860fe6003e97d4b33fce7615e?s=47 osadake212
March 29, 2018

Cookpad Tech Kitchen #15

437a286860fe6003e97d4b33fce7615e?s=128

osadake212

March 29, 2018
Tweet

Transcript

  1. cookpadTVのライブ配信の裏側 Cookpad Tech Kitchen #15 2018/03/28

  2. • 長田 卓哉 おさだたくや • https://github.com/osadake212 • 2015年10月クックパッド入社 • 広告事業と動画事業の開発・運用を担当

    • エンジニア歴 ◦ 2013〜 Android ◦ 2015〜 Web (Ruby, Go) 自己紹介
  3. アジェンダ • cookpadTV • サービス構成 ◦ 全体 ◦ AWS Elemental

    MediaLive / AWS Elemental MediaStore ◦ メッセージサーバー
  4. cookpadTV

  5. cookpadTV • 料理家や有名人と一緒に料理ができる • 分かりづらいポイントをその場で質問で き、双方向コミュニケーションができる ◦ コメントで質問 ◦ ハートで盛り上げ

    • その場でレシピを確認でき、料理の工程 が分かりやすい クッキングLIVEアプリ
  6. サービス構成

  7. None
  8. LIVE配信 コメント/ハートAPI

  9. LIVE配信

  10. AWS Elemental MediaLive / AWS Elemental MediaStore • MediaLiveがRTMPで映像を受け取ってHLS形式に出力 •

    Security Groupを設定できる • LIVEデータはMediaStoreへ ArchiveデータはS3へ出力
  11. AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない •

    Input作成時に撮影場所が決まっていない • 場所が決まっても撮影当日までIPアドレスが分からない Problem Why?
  12. AWS Elemental MediaLive / AWS Elemental MediaStore • Inputの前段にhaproxyを配置し、そのSecurity Groupを動的に設定できるように

    した • InputごとにIPアドレスが変わるので、管理画面でボタンを押すと
 設定をいい感じにできるようにした
  13. AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない •

    Input作成時に撮影場所が決まっていない • 場所が決まっても撮影当日までIPアドレスが分からない Problem Why?
  14. AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない •

    Input作成時に撮影場所が決まっていない • 場所が決まっても撮影当日までIPアドレスが分からない Problem Why? 2018/03/21 から編集できるようになりました!
  15. コメント/ハートAPI

  16. メッセージサーバー • 他のAPIとは特性が違い、LIVE中にガッとくる ◦ 同時接続が多い ◦ 流量も多い • アプリからポストされたコメント/ハートを
 接続されている他のアプリに届ける必要がある

    LIVE中のコメント/ハートを捌くAPIサーバー
  17. メッセージサーバー • ECS ServiceのAuto Scalingを設定しピークを乗り切れるようにする • 同時接続が増えてもパフォーマンスを出せるようにするためGoで実装 • レスポンスを速く返すためにDBアクセスがボトルネックにならないよう に、そもそもDBを使わない

    ◦ 認証は寿命の短いトークンをAPI側で発行し、キャッシュに乗せる ◦ データの永続化は非同期で行う
  18. メッセージサーバー • Firebase Realtime Databaseで双方向通信を実現 ◦ iOS/Android SDKがあるので便利 ◦ アプリは特定のノードを


    購読して更新を受け取る • コメント/ハートのポストは
 一度メッセージサーバーが受ける ◦ 認証・データの永続化をする
  19. メッセージサーバー 転送量:多 転送量:少 • データ転送量を抑えるために、同じノード を更新し続ける • クライアント側で過去のコメントを保持

  20. まとめ • MediaLive / MediaStore を使ってLive配信 ◦ haproxyを駆使してSecurity Groupの課題を解決 •

    コメント/ハートを捌くためのメッセージサーバー ◦ 要件に合わせてアプリケーションを分割 ◦ DB使わない ◦ Firebase Realtime Databaseをイベント通知に使う