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
450
cookpadTV のコメント配信における AppSync の導入事例
osadake212
4
1.6k
Other Decks in Technology
See All in Technology
2025年に挑戦したいこと
molmolken
0
150
Amazon Q Developerで.NET Frameworkプロジェクトをモダナイズしてみた
kenichirokimura
1
190
FODにおけるホーム画面編成のレコメンド
watarukudo
PRO
2
250
EMConf JP の楽しみ方 / How to enjoy EMConf JP
pauli
2
140
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
12k
新しいスケーリング則と学習理論
taiji_suzuki
10
3.8k
embedパッケージを深掘りする / Deep Dive into embed Package in Go
task4233
1
200
Azureの開発で辛いところ
re3turn
0
240
Reactフレームワークプロダクトを モバイルアプリにして、もっと便利に。 ユーザに価値を届けよう。/React Framework with Capacitor
rdlabo
0
110
Accessibility Inspectorを活用した アプリのアクセシビリティ向上方法
hinakko
0
170
実践! ソフトウェアエンジニアリングの価値の計測 ── Effort、Output、Outcome、Impact
nomuson
0
2k
東京Ruby会議12 Ruby と Rust と私 / Tokyo RubyKaigi 12 Ruby, Rust and me
eagletmt
3
850
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
The Cult of Friendly URLs
andyhume
78
6.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
BBQ
matthewcrist
85
9.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Building Applications with DynamoDB
mza
93
6.2k
Practical Orchestrator
shlominoach
186
10k
Optimising Largest Contentful Paint
csswizardry
33
3k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Site-Speed That Sticks
csswizardry
2
260
Building Your Own Lightsaber
phodgson
104
6.2k
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をイベント通知に使う