Cookpad Tech Kitchen #15
by
osadake212
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
cookpadTVのライブ配信の裏側 Cookpad Tech Kitchen #15 2018/03/28
Slide 2
Slide 2 text
● 長田 卓哉 おさだたくや ● https://github.com/osadake212 ● 2015年10月クックパッド入社 ● 広告事業と動画事業の開発・運用を担当 ● エンジニア歴 ○ 2013〜 Android ○ 2015〜 Web (Ruby, Go) 自己紹介
Slide 3
Slide 3 text
アジェンダ ● cookpadTV ● サービス構成 ○ 全体 ○ AWS Elemental MediaLive / AWS Elemental MediaStore ○ メッセージサーバー
Slide 4
Slide 4 text
cookpadTV
Slide 5
Slide 5 text
cookpadTV ● 料理家や有名人と一緒に料理ができる ● 分かりづらいポイントをその場で質問で き、双方向コミュニケーションができる ○ コメントで質問 ○ ハートで盛り上げ ● その場でレシピを確認でき、料理の工程 が分かりやすい クッキングLIVEアプリ
Slide 6
Slide 6 text
サービス構成
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
LIVE配信 コメント/ハートAPI
Slide 9
Slide 9 text
LIVE配信
Slide 10
Slide 10 text
AWS Elemental MediaLive / AWS Elemental MediaStore • MediaLiveがRTMPで映像を受け取ってHLS形式に出力 • Security Groupを設定できる • LIVEデータはMediaStoreへ ArchiveデータはS3へ出力
Slide 11
Slide 11 text
AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない ● Input作成時に撮影場所が決まっていない ● 場所が決まっても撮影当日までIPアドレスが分からない Problem Why?
Slide 12
Slide 12 text
AWS Elemental MediaLive / AWS Elemental MediaStore • Inputの前段にhaproxyを配置し、そのSecurity Groupを動的に設定できるように した • InputごとにIPアドレスが変わるので、管理画面でボタンを押すと 設定をいい感じにできるようにした
Slide 13
Slide 13 text
AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない ● Input作成時に撮影場所が決まっていない ● 場所が決まっても撮影当日までIPアドレスが分からない Problem Why?
Slide 14
Slide 14 text
AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない ● Input作成時に撮影場所が決まっていない ● 場所が決まっても撮影当日までIPアドレスが分からない Problem Why? 2018/03/21 から編集できるようになりました!
Slide 15
Slide 15 text
コメント/ハートAPI
Slide 16
Slide 16 text
メッセージサーバー ● 他のAPIとは特性が違い、LIVE中にガッとくる ○ 同時接続が多い ○ 流量も多い ● アプリからポストされたコメント/ハートを 接続されている他のアプリに届ける必要がある LIVE中のコメント/ハートを捌くAPIサーバー
Slide 17
Slide 17 text
メッセージサーバー ● ECS ServiceのAuto Scalingを設定しピークを乗り切れるようにする ● 同時接続が増えてもパフォーマンスを出せるようにするためGoで実装 ● レスポンスを速く返すためにDBアクセスがボトルネックにならないよう に、そもそもDBを使わない ○ 認証は寿命の短いトークンをAPI側で発行し、キャッシュに乗せる ○ データの永続化は非同期で行う
Slide 18
Slide 18 text
メッセージサーバー ● Firebase Realtime Databaseで双方向通信を実現 ○ iOS/Android SDKがあるので便利 ○ アプリは特定のノードを 購読して更新を受け取る ● コメント/ハートのポストは 一度メッセージサーバーが受ける ○ 認証・データの永続化をする
Slide 19
Slide 19 text
メッセージサーバー 転送量:多 転送量:少 ● データ転送量を抑えるために、同じノード を更新し続ける ● クライアント側で過去のコメントを保持
Slide 20
Slide 20 text
まとめ ● MediaLive / MediaStore を使ってLive配信 ○ haproxyを駆使してSecurity Groupの課題を解決 ● コメント/ハートを捌くためのメッセージサーバー ○ 要件に合わせてアプリケーションを分割 ○ DB使わない ○ Firebase Realtime Databaseをイベント通知に使う