AbemaTV Developer Conference に参加してきました。

ちょっと遅刻してしまったけど、21日にAbemaTV Developer Conferenceに参加してきました。 (ほとんど個人のメモです。)

感想

先に感想だけ書いておきます。
※ 僕向けのメモよりスライド探したほうがわかりやすいと思うので(笑)

感想としては、 Abemaのモニタリング、負荷対策の仕組みがマジですごかったこ
AbemaTVのような大規模サービスをどう監視しているのかに、興味があったので、モニタリング関連のセッションは非常に勉強になりました。
特に、セッション中にOSS化されたpromvizはデモ含めてすごくUIがめちゃめちゃイケてました。

github.com

いやほんと超かっこいい。
AbemaTVはPrometheusを使ってたんですね。

developers.cyberagent.co.jp

iOSアプリもデイリーで7~8個PRマージしてるとか、開発もすごい活発に行われている印象を受けました。
AbemaTVといえば何度かダウンしたこともあったけど、その時のことも語られててました。

来月も「72時間ホンネテレビ」というどでかいトラフィックが来るイベントがあるので是非、来年のConferenceでそのあたりについても話が聞きたいなーと思います。

以下自分向けのメモ

iOS開発

  • 1monthで162個のmerge。
  • 営業日換算で7~8個のPRがマージされている。

毎日大量のコードが変更されいる。

  • 開発フローはスクラム
  • 開発とQAの期間の重複があると厳しい
  • QA期間中にフライングする開発も可能
  • 長期間に渡る開発はスプリントをまたぐ

タスクにはストーリーポイントを付けている。 * 大雑把な付け方をしているけれども。

優先度判断については共通言語、共通指標を持っている * 優先度を決める時に、非エンジニアとのコミュニケーションも円滑になる。

レビューはしっかりルール化されている。 * レビューは活発な文化

デザインについて

iOSアプリをAndroidに寄せている * bottom sheetとか * スマホの大画面化に合わせて、全画面モーダルは避けれる傾向にある。 * マテリアルデザインのデザインシステムは非常に優れている。

Web * モバイルページでのアプリDL率向上について * twitterからの流入率は高い。しかし、twitterから来たユーザーのDL率が低い * twitterから流入したユーザーのDLを上げた * ちょっとtwitterからのLPを変更したくらい * エンジニアの工数をほとんど使わずに大きな効果を出せた事例

  • UI変更に抵抗はない
  • UIが急に変わっても、時間が経って文句を言い続けている人はいない
  • ユーザーは慣れる、変更による使いやすさの恩恵も受ける
  • 変化を恐れることは悪

abemaTVにおけるモニタリング

モニタリングシステムの進化 * 最初半年くらいはstackdriver * abemaはほぼすべてのレイヤーでモニタリングしたい * Prometheus + grafana * kubernetsと親和性が高い * PromQLが使いやすい * sqlライク * Exporterを作りやすい * AlertManagerがある

  • stackdriverのモニタリングもPrometheusで監視している。

クラスタ全体のトラフィックの状態がわかりにくい * Prometheusのデータからデータを可視化したい。

speakerdeck.com

Microservices下におけるWebの負荷対策

  • 負荷対策
    • 亀田興毅でwebが死んだ
    • 藤井四段でwebが死んだ

webのシステム構成

  • nginx + node + grpcで構成

webのサーバーリクエストをどうスケーリングさせるのか?

  • LBレベルも通らないキャッシュが必要なのでは?
  • CDNが必要になってくるのではないか?
    • GCPは東京リージョンがあるよ
  • キャッシュミス
    • レスポンシブが合わない
    • PCとスマホで出し分けが存在する
  • フロントエンドエンジニアができることは限りがある。
    • CDNからキャッシュが返ってくればいい。
    • GoogleCloudCDNを活用
    • CDNがキャッシュしたら、nginxのassets配信は必要なくなるのでは?
      • しかし、将来的BFF化を考える、サーバーサイドレンダリングが必要になったタイミングでnginxは必要なのでは?
  • 負荷対策はパフォーマンス改善につながる
    • 負荷対策は運用時の登竜門

MPEG-DASHで行うリニア配信

  • MPEG-DASHとは
    • 会場の方で動画関連の方が使っているのは大体HLS

MPD

  • media presentation description
    • mediaで定義されているメディアに関する情報を記述するxml
    • type
      • dynamic -> 定期的に取りにいく。生放送に使われる
      • static -> 取りに行かない。

abemaTVにおけるリニア配信技術とは?

  • リニア配信とは
    • 予め決められた番組表に則って配信を続ける方法
  • mpeg-dashをどうしてabemaで対応したか?
    • DRM技術に対応したコンテンツ配信を行う必要性
    • DRMはデバイス毎に異なる
  • abemaTVではマニフェストファイルを逐一作る必要がある。
    • ts -> mp4 -> init.m4s/ medeia.m4s の2つを作る。
    • 生放送のCMがどこに入るのかわからない
      • tsが知っている。

配信品質管理

  • トラブルが起きる箇所
    • 配信トラブルをいち早く検知するのは?

AbemaTVの裏側

  • 負荷試験について
    • ヒット企画が多いが、
      • 負荷対策の試練
  • 負荷試験
    • Locus
      • python
      • 分散型ユーザー負荷テストツール
      • GKEと相性がいい
      • ユーザの綿密なシナリオはLocusで記述可能
      • python -> golangに変更したい
    • wrk
      • Lua
      • 大規模な負荷を発生させることが可能
      • abコマンドとかに触ったことがある人には手に馴染みやすい

Referense

developers.cyberagent.co.jp