Cookpad Tech Kitchen #15
by
osadake212
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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をイベント通知に使う