dotsっていつの間に名前変わってたんや・・!
AbemaTVを支えるGoogle Cloud Platform by Google Platform Japan 福田潔様
AbemaTV on GCP
GKE
- Google Kubernetes Engine
- Dockerもk8sをネイティブサポート
- 各種クラウドベンダーもだいたいk8sをサポート
- コンテナやるならk8sな時代
- Google is your SRE
- Site Reliability Engineer
- コードも書けるし運用もできるエンジニア
- k8sのノードのアップデートとかも面倒みてくれる
- Kubernetes: Running MongoDB on Kubernetes with StatefulSets
- 当時はk8s上では永続化層は設けないのがベストプラクティスだった
- k8sやるならGKEがオススメ
- 歴史もあるし、なによりGoogleだし
AbemaTV将棋チャンネルの配信技術 〜全国完全生中継への挑戦〜 by 藤崎 智
お台場のテレビ局を経て、個人で局をやったりした経験が
中継技術の進化
将棋中継の仕組み
想定外実話 Best3
- 3位: インターネットが黒電話だった
- 150年の歴史がある旅館でございます
- 2位: 8階までクレーンであげる
- 末端が隣の建物の地下、試合するのは別館の8F
- 1位: 国宝
- 工事できません
- ネットもつながりません!
めっちゃおもしろかった・・すごい話やった・・。
AbemaTVの画質定義~ラウドネスマネージメント by 御池 崇史
トランスコードエンジニアっていう肩書の人もいるのね!
用語説明
- 解像度
- フルHD: 1920x1080
- 720P: 1280x720
- 854x480
- 640x360
- 426x240
- CODEC
- 映像・音声を圧縮
- COder / DECorder
- コンテナ・拡張子
入稿素材
- h264がメジャー
- PRORES422
- mxfコンテナ
トランスコード
品質評価
AbemaTV モバイルアプリの開発体制と開発プロセスの話 by 波戸勇二
iOSアプリ
開発体制とかプロセスとか
- 開発とQAが並走すると辛いので、1週間ごとに繰り返すように(あわせて2週間のスプリント)
- スプリントにしてはざっくりしたポイントで
- 0.5, 1, 2 みたいな
- 5段階の優先度
- 使ってるツールは一般的
- https://github.com/toshi0383/cmdshelf
- バイナリコマンドをまとめられる内製ツール
- PRのマージルールとかも決まってる
- レビュー文化も活発
- コーディング規約もある
- テストは2000くらい
- モデルとかロジックまわりのみ
- 週一で定例
- GitのブランチはGitHubFlow
- Bot通知とかも活用
- 毎日同じ文言で遅刻連絡を自動化してる人がいる説
Beta配信
- Carshlytics
- iTunesConnect -> TestFlight
QA効率化
- ローカル通知のシミュレート
- ユーザー設定、キャッシュなどの削除
- UIアニメの調整
- 映像情報をオーバーレイしたり
事業スピードも品質も落とさず継続開発するって大変やと思うので、すごいなという。
デザインのBefore & After by 松本 俊介(@ShunsukeM108) & 清水 康秀
前半はiOS / Androidのデザイナーさん、後半がWebのデザイナーさん。
デザイナー
- チーム全体でデザイナーは4人
- 3つのラインでデザイン改善
- グロースライン
- ビデオライン
- UX改善ライン
アプリの改善例
Web
まとめ
- UI変更に抵抗はない
- ユーザーもUI変更に追従する
- 改悪も確かにあるが、変化を恐れるほうが悪
AbemaTVにおけるモニタリング by Le Van Nghia(@nghialv2607)
モニタリングシステム
- すべてのレイヤーを監視したい
- 昔はStackDriverで
- Prometheus + Grafanaでやり替え
- Prometheus
- k8sと親和性が高い
- パフォーマンスよし = 10000target/1instance
- クラスタ内に1つ
- Grafanaで複雑なクエリを書くと遅い
- 取りたいメトリクスが増えた
- Nodeメトリクス
- k8sのメトリクス
- CCUメトリクス(同時接続数)
- 1つのPrometheusでは厳しくなってきた
- メトリクスの種類で分ける
- ターゲットで分ける
- HA Prometheus
- メトリクスからMicroServicesを自動でスケーリングしたい
- Config書く運用が大変
- 設定かえたら再起動
- Prometheus Operator
- Configの自動生成(代わりにservice-monitorを記述)
- ホットリロード
- AlertManager
- NodeのHighCPUUsageなどがあるとSlackに通知
- 割といい感じにモニタリングできてきた
- が、まだ問題はいろいろある
- k8sのyaml重複
- applyする順番
- Helm
Microservices下におけるWebの負荷対策 -SSR×SPA×PWAへ向けて- by 大泉 明日香(@asukaleido)
Microservices下におけるWebの負荷対策 / AbemaTV DEVELOPER CONFERENCE 2017 // Speaker Deck
事の発端
- 亀田興毅の番組でWebが死
- 復帰も遅かった
- 藤井4段のときも死
- アプリが5分くらいで復活する中・・
それまでの構成
- Nginx x Node.js
- Nginxはアセット、HTML
- Nodeは他サービスからgRPCでタイトルなどの情報をもらって返す
- WebはSPAなので後はAPIを叩くだけ
- しかし死
対策
Webでやりたいこと
- 負荷対策 = パフォーマンス向上
- 他のCAサービスに比べると劇的に遅い
- SSR、js分割など
- パフォーマンス改善に命を燃やす!
なんかもうフロントエンドだけで完結できる話ではないし、やっぱ広い目で見ないといかんなーという気持ち。
AbemaTVを支えるアプリの優しさ by 小形 昌樹
優しさとは
- ユーザーへの優しさ
- ネットワーク帯域
- バッテリー消費
- 親切なアニメーション
- 通信料をおさえること
プレイリスト取得しすぎ問題
- HLSのプレイリスト
- Liveの場合、再取得の時にEXT-X-MEDIA-SEQUENCEが増える
- Adaptiveなのでマスターのプレイリストもある
- 各セグメントは2秒なのに、Androidは0.6秒間隔で取ってた
- Androidで使ってるExoPlayerのバグだった
- https://github.com/google/ExoPlayer
MPEG-DASHによるリニア型配信 by みゆっき(@toriimiyukki)
MPEG-DASHの基礎
MPDファイル解説
- `.mpd`のXMLファイル
- MPD
- type: dynamic | static
- minBufferTime
- ISO Base media Profile
- プロファイルにより、機能の実装を制限できる
- Period
- 番組の枠
- 本編、CMとか
- AdaptionSet
- コンテンツの種類(映像・音声)
- `mimeType`とか
- Segment
- SegmentTemplate とかでも書ける
- セグメントへのパス
- SegmentTimeline
- `timescale`で割って算出される
- Representation
- `id`が画質レベル
- さっきのTemplateにハマる変数
- 帯域、コーデックの指定
- 解像度別に
- M4S
- `fmp4`
- HLSに比べると実装がすごく面倒くさい
リニア型配信
AbemaTVの裏側 - 大規模トラフィックを支える技術と負荷対策の話 by 岡田 翔乃介(@rm_rf_slant)
負荷試験
- Locust と wrk を使ってる
- Locust
- https://github.com/locustio/locust
- Pythonの分散型ユーザー負荷テストツール
- WebUIからいろいろ見れる
- スケールできる
- GKEと相性がいい
- 綿密なシナリオも定義できる
- 大規模な試験には向いてる
- wrk
- https://github.com/wg/wrk
- LuaのHTTPベンチマークツール
- パラメータとURL指定するだけ
- レポートの集計まわりは自作が必要になる
試験用のデータ
おわりに
お気づきの方もおおいでしょうが、専門外の分野すぎてメモの精度が微妙です。
専門外の分野の勉強会がこんなに消耗するもんだとは思わんかった・・けど、いろいろモチベーションも上がる会だったのでよかった。
やっぱフロントエンド以外のこともやってかないとダメよなー、はてさて・・。