3周年に突入するAbemaTVの挑戦と苦悩 / The challenge and anguish of AbemaTV celebrating the third anniversary

646a01801bac1886ddf86aee2de913ed?s=47 Yusei Yamanaka
February 15, 2019

3周年に突入するAbemaTVの挑戦と苦悩 / The challenge and anguish of AbemaTV celebrating the third anniversary

646a01801bac1886ddf86aee2de913ed?s=128

Yusei Yamanaka

February 15, 2019
Tweet

Transcript

  1. 5.

    ຊ ֨ త ͳ ։ ൃ ։ ࢝  

    Ծ ։ ہ   ُ ా ڵ ؽ ʹ উ ͬ ͨ Β     ສ ԁ ࢹ ௌ ऀ ͕ ࡴ ౸ ͠  ࣌ ؒ ൒ μ ΢ ϯ  ։ ہ  प ೥  Ϗ σ Φ ػ ೳ ɾ ॎ ը ໘ Ϧ Ϧ ɹ ε ʔ ։ ہ  प ೥  μ ΢ ϯ ϩ ɹ υ ɾ ௥ ͬ ͔ ͚ ࠶ ੜ Ϧ Ϧ ɹ ε ʔ ʔ ೥ ຤ ೥ ࢝ ಛ ൪   ແ ࣄ ೥ ຤ ೥ ࢝ Λ ৐ Γ ੾ Δ ೥ ຤ ೥ ࢝ ಛ ൪   ϐ ɹ Ϋ ଳ ͷ $ . ࣌ ʹ ࢹ ௌ ো ֐ ʔ ຊ ։ ہ  ཌ ೔ ʹ ( $ 1 ͷ શ Ϧ ɹ δ ϣ ϯ ো ֐ ʔ   ࣌ ؒ ϗ ϯ ω ς Ϩ Ϗ ແ ࣄ ഑ ৴ Λ ߦ ͍ ա ڈ ࠷ ߴ ࢹ ௌ Λ ه ࿥  ʮ ʯ
  2. 7.

    技術レイヤー チーム体制 アプリケーション ネットワーク 開発⽀援 モニタリング プロジェクト プロジェクト管理 ⾔語 構成管理

    通信プロトコル CDN 広告 CI/CD テスト デプロイ 監視 ログ メトリクス ミドルウェア プラットフォーム 仮想化 勤務体制
  3. 12.

    Android iOS Web New Device Streaming Client Developer Infrastructure Product

    Content Engineering Content Delivery Data Management SRE Direction Design QA CTO VPoE BOARD
  4. 19.

    GCPの課題 • 開発当初に東京リージョンはなかったが、台湾リージョンを使⽤しているこ とでいくつかの課題が浮上 ⽇本と台湾間のネットワーク 遅延と安定性が国内のリージョンに⽐べて劣る 東京リージョンや国内の別のプラットフォームに移動したい Legacy Network(VPC) 開発当初はLegacy

    Networkしかなかったため、Legacy Networkを使⽤しているが、
 Lagacy Network上ではリージョン間でサブネットを作成することができないなど、
 リージョン移⾏ やネットワーク移⾏を⾏う負担が⼤きい
  5. 25.

    データベース • MongoDB 開発当初はGCPで提供している、Cloud BigtableかCloud Datastoreにしたかった 先⾏して編成ツールを完成する必要があり、クエリ要件やスキーマの柔軟な変更が求められ る開発状況の為、MongoDBを採⽤ MongoDB Cloud

    Managerを使⽤して管理 各種メトリクスの表⽰、スナップショットの管理など シャーディングによる分散とレプリカセットによる冗⻑化構成 vCPU core、RAM GBのmongodインスタンスが約60台稼働 ドメインに応じてクラスタを⽤意 過去にデータベースのコネクションが枯渇してサービス影響が出たことがあったため
 負荷分散と障害影響の最⼩化を⽬的として、ユーザー⽤、コメント⽤、配信⽤とクラスタを分散
  6. 31.

    クライアント間通信 • gRPCも検討したが… 開発当初は、GCLB(Google Cloud Load Balancing)がHTTPの負荷分散ではHTTP/ . や gRPCでのバックエンドとの通信に対応していなかった

    → 現在はgRPCでのバックエンドとの通信をサポート • クライアントとの通信フォーマットとしてProtocol Buffersを使⽤
  7. 33.

    広告 • リニア型配信ではSSAI(Server-Side Ad Insertion)で広告を挿⼊ 開発当初では、社内で開発している広告サーバと独⾃⽅式で通信をしていたが、
 汎⽤的な規格であるVASTに統⼀ • VOD型配信ではCSAI(Client-Side Ad

    Insertion)で広告を挿⼊ サーバで挿⼊するとシーク制御が難しいため、クライアント側で挿⼊ Google IMA(Interactive Media Ads)のSDKをクライアントに⼊れて、VASTで通信を⾏う
  8. 37.

    リリース時のフロー Apply Deploykun Developer GitHub Codeship Create release Create tag

    Hook Run test Return result GKE Push image Create ops PR Merge ops PR Deploy バージョン 作成 リリース
  9. 39.

    監視 • サービスのスパイク‧エラー監視はBugsnagを使⽤ ライブラリをインポートして、呼び出すとエラーを集計 リリース後の新規エラーやスパイクなどを検知することが可能 • Google Cloud MonitoringにてGCE/GKEの挙動を監視 •

    これらの異常を検知すると、Slackに投稿&バックエンドエンジニアにコール ⾃分の担当以外のサービスのコールが掛かってくる エンジニア以外が対応ステータスがわかりにくい PagerDutyを使ったオンコール体制の⾒直し 課題
  10. 43.

    Cloud Dataflowを使⽤したログシステム • Apache Avroを利⽤するメリット BigQueryがGCSからのAvroファイルの取り込みをサポート スキーマがファイルに含まれているので、展開時に管理する必要がない Cloud Dataflow Cloud

    Storage Cloud PubSub BigQuery Cloud Storage App Cloud DataflowでPubSubからのデータを⼀定の間隔(数⼗秒)ごとに区切られたAvroをGCSへ保存 ログが必要なときに、GCSからAvroファイルをインポート app- .avro
  11. 45.

    Prometheus + Grafana QSPNFUIFVTHSQD (SBGBOB QSPNFUIFVT NPOHPEC QSPNFUIFVTIUUQ QSPNFUIFVTLT QSPNFUIFVTSFEJT

    QSPNFUIFVTOPEF HDF QSPNFUIFVTOPEF LT QSPNFUIFVTOPEF NJTD 4FSWJDF .POJUPS QSPNFUIFVTTFSWFST 1SPNFUIFVT 0QFSBUPS FYQPSUFST BMFSUNBOBHFS 4MBDL RVFSZ FYFD NBOBHF pOE UBSHFUT QVMM NFUSJDT QVTI BMFSUT OPUJGZ