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

Cookpad Tech Kitchen #15

osadake212
March 29, 2018

Cookpad Tech Kitchen #15

osadake212

March 29, 2018
Tweet

More Decks by osadake212

Other Decks in Technology

Transcript

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

    View full-size slide

  2. ● 長田 卓哉 おさだたくや
    ● https://github.com/osadake212
    ● 2015年10月クックパッド入社
    ● 広告事業と動画事業の開発・運用を担当
    ● エンジニア歴
    ○ 2013〜 Android
    ○ 2015〜 Web (Ruby, Go)
    自己紹介

    View full-size slide

  3. アジェンダ
    ● cookpadTV
    ● サービス構成
    ○ 全体
    ○ AWS Elemental MediaLive / AWS Elemental MediaStore
    ○ メッセージサーバー

    View full-size slide

  4. cookpadTV
    ● 料理家や有名人と一緒に料理ができる
    ● 分かりづらいポイントをその場で質問で
    き、双方向コミュニケーションができる
    ○ コメントで質問
    ○ ハートで盛り上げ
    ● その場でレシピを確認でき、料理の工程
    が分かりやすい
    クッキングLIVEアプリ

    View full-size slide

  5. サービス構成

    View full-size slide

  6. LIVE配信
    コメント/ハートAPI

    View full-size slide

  7. AWS Elemental MediaLive / AWS Elemental MediaStore
    • MediaLiveがRTMPで映像を受け取ってHLS形式に出力
    • Security Groupを設定できる
    • LIVEデータはMediaStoreへ ArchiveデータはS3へ出力

    View full-size slide

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

    View full-size slide

  9. AWS Elemental MediaLive / AWS Elemental MediaStore
    • Inputの前段にhaproxyを配置し、そのSecurity Groupを動的に設定できるように
    した
    • InputごとにIPアドレスが変わるので、管理画面でボタンを押すと

    設定をいい感じにできるようにした

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. コメント/ハートAPI

    View full-size slide

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

    接続されている他のアプリに届ける必要がある
    LIVE中のコメント/ハートを捌くAPIサーバー

    View full-size slide

  14. メッセージサーバー
    ● ECS ServiceのAuto Scalingを設定しピークを乗り切れるようにする
    ● 同時接続が増えてもパフォーマンスを出せるようにするためGoで実装
    ● レスポンスを速く返すためにDBアクセスがボトルネックにならないよう
    に、そもそもDBを使わない
    ○ 認証は寿命の短いトークンをAPI側で発行し、キャッシュに乗せる
    ○ データの永続化は非同期で行う

    View full-size slide

  15. メッセージサーバー
    ● Firebase Realtime Databaseで双方向通信を実現
    ○ iOS/Android SDKがあるので便利
    ○ アプリは特定のノードを

    購読して更新を受け取る
    ● コメント/ハートのポストは

    一度メッセージサーバーが受ける
    ○ 認証・データの永続化をする

    View full-size slide

  16. メッセージサーバー
    転送量:多
    転送量:少
    ● データ転送量を抑えるために、同じノード
    を更新し続ける
    ● クライアント側で過去のコメントを保持

    View full-size slide

  17. まとめ
    ● MediaLive / MediaStore を使ってLive配信
    ○ haproxyを駆使してSecurity Groupの課題を解決
    ● コメント/ハートを捌くためのメッセージサーバー
    ○ 要件に合わせてアプリケーションを分割
    ○ DB使わない
    ○ Firebase Realtime Databaseをイベント通知に使う

    View full-size slide