AbemaTVにおけるMicroservices Architecture

203 views

Published on

Microservices Meetup vol.4
2016/11/22

Published in: Engineering
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
203
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

AbemaTVにおけるMicroservices Architecture

  1. 1. AbemaTVにおける Microservices Architecture
  2. 2. About Me ● プロフィール ○ 西尾 亮太 ○ 株式会社AbemaTV 開発局 ○ サーバーサイドエンジニア ● プロジェクト経歴 ○ Amebaスマートフォンプラットフォーム ○ リアルタイム通信基盤 ○ AbemaTV
  3. 3. AbemaTVについて
  4. 4. 無料でみれる 24時間365日完全編成 インターネットテレビ
  5. 5. マルチデバイス ● PCブラウザ ● Androidスマートフォン/タブレット ● iPhone/iPad ● Chromecast ● Amazon FireTV ● AppleTV(予定) ● AndroidTV(予定)
  6. 6. リニア放送
  7. 7. Video On Demand
  8. 8. インターネットコンテンツとしての特性 ● 視聴数リアルタイム表示 ● コメント ● SNSシェア ● 投票
  9. 9. 本開局から半年の軌跡
  10. 10. 現状のアーキテクチャとコンセプト
  11. 11. 「Microservices Architecture」の物理的な難しさ 低遅延 サービス ディスカバリ ロード バランシング スケーリング リリース テスト トレーシング メトリクス ロギング 監視
  12. 12. マイクロサービスのメリットは享受したいが デメリットの解決に時間を割きたくない
  13. 13. Google Cloud Platform Kubernetes Service GCP + Kubernetes + gRPC Service Service gRPC gRPC
  14. 14. Microservices ✖ Google Cloud Platform ● Cloud DNS/Cloud Load Balancing/Cloud CDN ● Cloud Storage/Cloud Bigtable/Cloud Datastore/ Cloud SQL ● Container Engine ○ Googleのインフラストラクチャー上で Dockerを運用 - Powered by Kubernetes ● Container Registry ○ プライベートに利用できる Dockerイメージの高速ストレージ ● Cloud Functions(ALPHA) ○ イベント駆動マイクロサービス構築のためのサーバーレスプラットフォーム ● Cloud Pub/Sub ○ 高信頼、多対多、非同期のメッセージングを利用して、サービス間を接続 ● 運用管理ツール ○ Strackdriver Overview(BETA) ○ Monitoring ○ Logging ○ Error Reporting ○ Trace
  15. 15. Microservices ✖ Kubernetes ● コンテナ化されたアプリケーション ○ 自動デプロイ ○ スケーリング ○ 管理 ● オープンソースシステム ○ オンプレミス・クラウドプロバイダーに依存しない ● 構成要素 ○ Cluster - 物理または仮想マシンの集合 ○ Node - 物理または仮想マシン ○ Pod - コンテナやボリュームで構成されたグループ ○ Replication Controller - Podのレプリカ数の定義と制御 ○ Service - Podの集合を定義しそれらへのアクセス手段を提供
  16. 16. Microservices ✖ gRPC ● RPC ○ Unary RPC ○ Server streaming RPC ○ Client streaming RPC ○ Bidirectional streaming RPC ● Authentication ● Metadata ○ Tracingでの活用 ○ アプリケーション固有の付随情報の表現 ● Protocol Buffers 3 + HTTP2 (Default) ● 関連プロジェクト ○ grpc-gateway - RESTful JSON APIをgRPC定義から生成しプロキシサーバーとして稼働
  17. 17. アーキテクチャを見る前に
  18. 18. インターネット配信に必要なコンポーネント Front-End Server Back-End Server Cache Database Live Encoder Transcoder Packager
  19. 19. 例)サービスの役割 ● Gateway ○ クライアントデバイスに対して APIを提供する ● User ○ ユーザーを識別し、デバイス情報を管理する ● Media ○ 番組表に紐づくメディア情報を管理する ● Comment ○ コメント機能を提供する ● Share ○ SNSへシェアする機能を提供する
  20. 20. Gateway User Comment Share Cloud Pub/Sub 有人監視 システム コメント投稿 トークンチェック OK! コメント投稿 コメント投稿イベント Pull コメント投稿イベント 監視完了イベント 投稿完了 動画シェア 投稿完了 Pull 監視完了イベント 例) コメントの投稿
  21. 21. 結局物理的難しさはどう解消されたの?
  22. 22. スケーリング ● Google Container Engine + Kubernetes ● Node(マシン)のスケーリング ○ gcloud container clusters resize CLUSTER_NAME --size SIZE ● Pod(コンテナとボリュームのグループ)のスケーリング ○ kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
  23. 23. リリース ● Google Container Registry + Kubernetes + CircleCI + カナリアリリース ● Development ○ [CircleCI] ビルド ○ [CircleCI] Google Container RegistryへDocker Imageをプッシュ ○ [CircleCI] KubernetesのReplication ControllerのImageバージョンを書き換え ○ [CircleCI] 旧バージョンPodを一斉削除 ● Production ○ [CircleCI] ビルド ○ [CircleCI] Google Container RegistryへDocker Imageをプッシュ ○ [CircleCI] KubernetesのReplication ControllerのImageバージョンを書き換え ○ 1Pod reload ○ 旧バージョンPodを順次削除
  24. 24. メトリクス ● Stackdriver + Kubernetes + Prometheus(https://prometheus.io/) ● Stackdriver ○ デフォルトである程度の GCP上のリソースに対するメトリクスが自動的に収集されている ● Kubernetes + Prometheus ○ 各PodでPrometheusのmetricsの収集Endpointを追加 ○ ServiceにAnnotation付与することでPodの増減に自動的に対応して収集される
  25. 25. ロギング ● Google Cloud Logging + Cloud Pub/Sub + Kubernetes ● GKE上で稼働するPodの標準出力はGoogle Cloud Loggingに自動収集される ● その他内製の分析システム用のログやBig Queryへの蓄積 ○ Cloud Pub/SubにメッセージをPublish ○ Kubernetes上で稼働するWorkerがBig Query等へBulk Insert
  26. 26. ロードバランシング / サービスディスカバリ ● Kubernetes - Service + Replication Controller ○ Replication ControllerがPodの死活監視 ○ Serviceが生存しているPodへリクエストを振り分け
  27. 27. 低遅延 ● gRPC + Cloud Pub/Sub ● gRPC(Protocol Buffers / HTTP2) ○ 空間効率に優れる ○ エンコード・デコード処理が高速 ○ HTTP2いけてる ● Cloud Pub/Sub ○ 非同期処理のキューとして機能 ○ QoS1 ○ 滞留させる期間を設定可能
  28. 28. 1年間開発・運用してみて・・・
  29. 29. アーキテクチャの例外と復旧
  30. 30. 破綻したアーキテクチャ 管理ツール Gateway User Media Users Programs Program Index
  31. 31. 本来の方針 管理ツール Gateway User Media Users Programs Program Index
  32. 32. なぜこうなったのか チームの違い toB toC 管理ツール Gateway User Media
  33. 33. なぜこうなったのか 12月 1月 2月 管理ツール User Media Gateway 納期の違い
  34. 34. 対症療法 - 制御/管理ロールを分散させない 管理ツール Gateway User Media Users Programs Program Index Read Read/Write
  35. 35. 対症療法 - 例外を積み重ねない 管理ツール Gateway User Media Users Programs Program Index Comment
  36. 36. 完全・完璧 負債の管理・結果整合性
  37. 37. インターネットテレビ局を支える 高品質システムを目指して

×