Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cookpad Tech Kitchen #15
Search
osadake212
March 29, 2018
Technology
3
5.9k
Cookpad Tech Kitchen #15
osadake212
March 29, 2018
Tweet
Share
More Decks by osadake212
See All by osadake212
cookpadLive 短期間で行うサービス開発術
osadake212
0
1.9k
App Store/Google Play App内課金の実装 Tips 3つ
osadake212
0
430
cookpadTV のコメント配信における AppSync の導入事例
osadake212
4
1.5k
Other Decks in Technology
See All in Technology
開発生産性を始める前に開発チームができること / optim-improve-development-productivity.pdf
optim
0
110
DuckDB雑紹介(1.1対応版)@DuckDB座談会
ktz
6
1.4k
事前準備が肝!AI活用のための業務改革
layerx
PRO
1
380
効果的なオンコール対応と障害対応
ryuichi1208
6
3.1k
不動産 x AIことはじめ~データの真価を拓くために
estie
0
110
OR学会2024秋_短期収益と将来のオフ方策評価性能を考慮したクーポン割当方策混合比の決定
recruitengineers
PRO
4
460
GC24 Recap: Interface Internals
task4233
0
130
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
cygames
0
180
『GRANBLUE FANTASY Relink』ソフトウェアラスタライザによる実践的なオクルージョンカリング
cygames
0
170
リアルお遍路+SORACOM IoT
ozk009
1
140
LLVM/ASMを使った有限体の高速実装
herumi
0
120
プログラム検証入門
riru
6
870
Featured
See All Featured
Making Projects Easy
brettharned
113
5.8k
Writing Fast Ruby
sferik
623
60k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
123
18k
The Power of CSS Pseudo Elements
geoffreycrofte
71
5.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
263
13k
Code Reviewing Like a Champion
maltzj
517
39k
A better future with KSS
kneath
235
17k
The Pragmatic Product Professional
lauravandoore
31
6.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
48
2.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
8.9k
The Language of Interfaces
destraynor
153
23k
WebSockets: Embracing the real-time Web
robhawkes
59
7.3k
Transcript
cookpadTVのライブ配信の裏側 Cookpad Tech Kitchen #15 2018/03/28
• 長田 卓哉 おさだたくや • https://github.com/osadake212 • 2015年10月クックパッド入社 • 広告事業と動画事業の開発・運用を担当
• エンジニア歴 ◦ 2013〜 Android ◦ 2015〜 Web (Ruby, Go) 自己紹介
アジェンダ • cookpadTV • サービス構成 ◦ 全体 ◦ AWS Elemental
MediaLive / AWS Elemental MediaStore ◦ メッセージサーバー
cookpadTV
cookpadTV • 料理家や有名人と一緒に料理ができる • 分かりづらいポイントをその場で質問で き、双方向コミュニケーションができる ◦ コメントで質問 ◦ ハートで盛り上げ
• その場でレシピを確認でき、料理の工程 が分かりやすい クッキングLIVEアプリ
サービス構成
None
LIVE配信 コメント/ハートAPI
LIVE配信
AWS Elemental MediaLive / AWS Elemental MediaStore • MediaLiveがRTMPで映像を受け取ってHLS形式に出力 •
Security Groupを設定できる • LIVEデータはMediaStoreへ ArchiveデータはS3へ出力
AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない •
Input作成時に撮影場所が決まっていない • 場所が決まっても撮影当日までIPアドレスが分からない Problem Why?
AWS Elemental MediaLive / AWS Elemental MediaStore • Inputの前段にhaproxyを配置し、そのSecurity Groupを動的に設定できるように
した • InputごとにIPアドレスが変わるので、管理画面でボタンを押すと 設定をいい感じにできるようにした
AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない •
Input作成時に撮影場所が決まっていない • 場所が決まっても撮影当日までIPアドレスが分からない Problem Why?
AWS Elemental MediaLive / AWS Elemental MediaStore Security GroupはInput作成時に固定され、後から編集することができない •
Input作成時に撮影場所が決まっていない • 場所が決まっても撮影当日までIPアドレスが分からない Problem Why? 2018/03/21 から編集できるようになりました!
コメント/ハートAPI
メッセージサーバー • 他のAPIとは特性が違い、LIVE中にガッとくる ◦ 同時接続が多い ◦ 流量も多い • アプリからポストされたコメント/ハートを 接続されている他のアプリに届ける必要がある
LIVE中のコメント/ハートを捌くAPIサーバー
メッセージサーバー • ECS ServiceのAuto Scalingを設定しピークを乗り切れるようにする • 同時接続が増えてもパフォーマンスを出せるようにするためGoで実装 • レスポンスを速く返すためにDBアクセスがボトルネックにならないよう に、そもそもDBを使わない
◦ 認証は寿命の短いトークンをAPI側で発行し、キャッシュに乗せる ◦ データの永続化は非同期で行う
メッセージサーバー • Firebase Realtime Databaseで双方向通信を実現 ◦ iOS/Android SDKがあるので便利 ◦ アプリは特定のノードを
購読して更新を受け取る • コメント/ハートのポストは 一度メッセージサーバーが受ける ◦ 認証・データの永続化をする
メッセージサーバー 転送量:多 転送量:少 • データ転送量を抑えるために、同じノード を更新し続ける • クライアント側で過去のコメントを保持
まとめ • MediaLive / MediaStore を使ってLive配信 ◦ haproxyを駆使してSecurity Groupの課題を解決 •
コメント/ハートを捌くためのメッセージサーバー ◦ 要件に合わせてアプリケーションを分割 ◦ DB使わない ◦ Firebase Realtime Databaseをイベント通知に使う