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
クッキングライブアプリの高速開発
Search
Yuta Iwama
May 29, 2018
Technology
0
210
クッキングライブアプリの高速開発
AWS Summit Tokyo 2018
Yuta Iwama
May 29, 2018
Tweet
Share
More Decks by Yuta Iwama
See All by Yuta Iwama
CNCFCon&KubeCon NA 2019
ganmacs
0
95
Recent enhancements in Fluentd and the future
ganmacs
0
46
gRPC in Cookpad
ganmacs
7
4k
Treasure Data Summer Internship 2016
ganmacs
0
100
Other Decks in Technology
See All in Technology
Oracle Cloud Infrastructure:2025年1月度サービス・アップデート
oracle4engineer
PRO
0
200
サーバーレスで楽しよう!お気軽に始められる3つのポイント / Have fun with Serverless!
_kensh
2
230
GitLab SelfManagedをCodePipelineのソースに設定する/SetGitLabSelfManagedtoCodePipeline
norihiroishiyama
1
120
20250129 Findy_テスト高活用化
dshirae
0
230
サービスローンチを成功させろ! 〜SREが教える30日間の攻略ガイド〜
mmmatsuda
2
4.4k
アクセシブルなマークアップの上に成り立つユーザーファーストなドロップダウンメニューの実装 / 20250127_cloudsign_User1st_FE
bengo4com
2
1.2k
アーキテクチャわからん、の話
shirayanagiryuji
0
150
20250125_Agent for Amazon Bedrock試してみた
riz3f7
2
110
Postman Vaultを使った秘密情報の安全な管理
nagix
3
140
private spaceについてあれこれ調べてみた
operando
1
170
プロダクト開発、インフラ、コーポレート、そしてAIとの共通言語としての Terraform / Terraform as a Common Language for Product Development, Infrastructure, Corporate Engineering, and AI
yuyatakeyama
6
1.6k
RevOpsへ至る道 データ活用による事業革新への挑戦 / path-to-revops
pei0804
3
800
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Building an army of robots
kneath
302
45k
Adopting Sorbet at Scale
ufuk
74
9.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
How to train your dragon (web standard)
notwaldorf
89
5.8k
The World Runs on Bad Software
bkeepers
PRO
67
11k
A Philosophy of Restraint
colly
203
16k
Building Your Own Lightsaber
phodgson
104
6.2k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Scaling GitHub
holman
459
140k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Transcript
クッキングライブアプリの 高速開発 クックパッドが仕掛ける新規事業 渡辺 慎也 岩間 雄太
自己紹介 • 渡辺 慎也 ◦ twitter.com/wata_dev • クックパッド株式会社 ◦ メディアプロダクト開発部部長
• CookpadTV 株式会社 ◦ 取締役 CTO
レシピ動画事業注力の為、子会社を設立 new!
目指す 3 つの No.1
目指す 3 つの No.1 レシピ動画数 No.1 レシピ動画広告 No.1 レシピ動画ユーザー課金 No.1
クッキング LIVEで 新しい料理体験 スマホなしで 2 時間で、誰もが驚く レシピが決まる 1 分動画を。 cookpad studio storeTV cookpadTV
Image Area cookpad studio 2 時間で、誰もが驚く 1 分動画を。
Image Area storeTV スマホなしで レシピが決まる
Image Area cookpadTV クッキングライブで 新しい料理体験
全体アーキテクチャ cookpad-tv-admin cookpad-tv-message cookpad-tv-api cookpad-tv-kinu ライブ動画配信基盤 fluentd-proxy streaming load Amazon
Redshift bricolage HAproxy cookpad auth RTMP HLS 番組情報 コメント 認証 画像
AWS Elemental MediaLive • MediaLive がすぐに配信出来る状態にはならない ◦ 配信直前ではなく番組配信日時が決まったらすぐにリソース作成 ◦ 配信予定番組数分リソースが必要に
▪ →制限緩和依頼
AWS Elemental MediaLive • リリース当初は SecurityGroup が編集不可 ◦ 番組登録時は IP
アドレスが未確定 EIP + HAproxy を前段において EC2 インスタンスの SecurityGroup を動的 変更することで対応
API サーバの Auto Scaling • ライブ配信は配信開始時に一気にアクセスが発生 ◦ 通常の Auto Scaling
では間に合わない ◦ 事前に Auto Scaling しておく仕組みが必要 独自のデータ活用基盤で過去の 来場者数等を集計しアプリケー ションの MySQL に保存
API サーバーの Auto Scaling • 過去の来場者数をベースに事前 Auto Scaling ◦ desired
count ではなく min capacity を上げる ◦ 放送開始時に min capacity を戻す(後は自然 scale-in に任せる) 詳細は Techlife「cookpadTV ライブ配信サービスの”突貫”Auto Scaling 環境構築」 http://techlife.cookpad.com/entry/2018/04/26/214500
コメント、ハート配信 • ライブの盛り上がり、コミュニケーションの要 ◦ 気軽にコメント、ハートを連打させたい ◦ コメントサーバは golang で別途実装 詳細は
Techlife「クッキングLIVEアプリcookpadTVのコメント配信技術」 http://techlife.cookpad.com/entry/2018/04/12/180000
ライブ動画 配信基盤
自己紹介 • 岩間雄太 ◦ twitter.com/ganmacs • クックパッド株式会社 ◦ 2017新卒 ◦
技術部開発基盤グループ
ライブ動画配信基盤の責任とは • ライブ動画 ◦ 開始/終了時間 をもとにライブ動画配 信 • アーカイブ動画 ◦
ライブ終了後の見逃し配信
設計方針 • 配信部分は S3 / MediaStore のような マネージドサービスに任せる • 避けたかったこと
◦ 人気番組があるからサーバ増強 ◦ 想定外のアクセスがあって落ちる よくスケールして運用が楽であること
AWS Elemental MediaLive 採用理由 • Wowza Streaming Engine と比較 ◦
想定した設計を素直に構築できる ▪ S3 / MediaStore との連携 ◦ AWS の他のサービスとの連携 ◦ マネージドサービスに任せられる 詳細 : AWS Elemental MediaLive を使用したライブ動画配信アプリの基盤開発 http://techlife.cookpad.com/entry/2018/05/10/090000
アーキテクチャ • APIサーバがリクエストをもとに MediaLive に channel / input を作成 •
ライブ動画は MediaStore を output • アーカイブ動画は S3 を output • S3 / MediaStore がオリジンサーバ ◦ エンコーダから直接配信しない • CDN 経由で配信
ライブ配信 1. 番組情報を受け取る 2. 1. をもとに MediaLive に channel /
input を 作成 3. 開始時間の一定時間前 3.1. MediaLive のchannel を idle から running へ 3.2. AWS CloudWatch のアラーム設定 4. 配信されてきた動画をMediaStore へ ユーザは CDN を経由して視聴
アーカイブ配信 • MediaLive の Archive Output Group • 出力先を S3
へ • ライブ配信が終了したら S3 から動画を 集めて変換
工夫した点 • MediaLive の状態遷移 ◦ 稀に running 状態にならないことがあった • 動画の配信検知
◦ CloudWatch のアラーム設定 • Archive Output Group
MediaLive の状態遷移 • MediaLive で配信するためには running にする必 要がある • idle
から running にならないことがあった • 一定時間 running にならなければ channel を再作 成するようにして対応している
動画の配信検知 • 配信検知用のデーモンを実装 • 開始検知 ◦ アーカイブの S3 Event を使用
◦ 1つ目の動画作成されると SQS に通知 • 終了検知 ◦ MediaLive の Network out を使用 ◦ 当初は両方 Network out
Archive Output Group の動画フォーマット • 数秒ごとに ts ファイルを作られる • S3
Multipart Upload で細切れの ts ファイル を結合 • 1つの ts ファイルを社内動画変換サービスへ ◦ 動画変換サービスのバックエンドは ElasticTranscoder S3 Multipart Upload: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html
今後の開発 • 演者との更なる双方向コミュニケーション機能の実装 ◦ アンケート、スタンプ、特別なコメント ◦ AWS AppSync を利用 •
有料機能の実装 ◦ 都度課金、継続課金 • トライアルとしてグローバル展開
We are hiring! https://cookpad.jobs/