Slide 1

Slide 1 text

Infrastructure as Codeで構築したリソースの可視化と再利用 マイクロサービスダッシュボードの紹介

Slide 2

Slide 2 text

2 自己紹介 2017年7月に旧ソウゾウに入社 2018年1月にメルペイに異動。テックリードとしてマイクロサービスの開発を担当 2019年7月にArchitectチームに異動 現在は主にマイクロサービスのためのダッシュボードの開発を担当 Merpay, Inc. Architect Team Yuta Uekusa

Slide 3

Slide 3 text

3 Agenda メルペイのマイクロサービスアーキテクチャについて 01 マイクロサービスダッシュボードの紹介 02 今後の取り組み 03

Slide 4

Slide 4 text

メルペイのマイクロサービスアーキテクチャに ついて 4

Slide 5

Slide 5 text

5 マイクロサービスアーキテクチャ Client API Gateway Service B Service A Service C Authority Cloud Spanner Pub/Sub Cloud Spanner Cloud Storage

Slide 6

Slide 6 text

6 マイクロサービスアーキテクチャ API Gateway Service B Service A Service C Authority Cloud Spann er Pub/ Sub Cloud Spann er Clo ud Stor age API Gateway Service B Service A Service C Authority Cloud Spann er Pub/ Sub Cloud Spann er Clo ud Stor age Development Production

Slide 7

Slide 7 text

7 マイクロサービスアーキテクチャ Client Cloud Spanner Pub/Sub Cloud Spanner Namespace Cloud Storage Service C Namespace Namespace Namespace Namespace Service B Service A API Gateway Authority

Slide 8

Slide 8 text

8 マイクロサービスアーキテクチャ: インフラ構築 Namespace: Service A Project: Service A boot strap Service A

Slide 9

Slide 9 text

9 マイクロサービスアーキテクチャ: インフラ構築 microservices-terraform リポジトリ

Slide 10

Slide 10 text

10 マイクロサービスアーキテクチャ: 通信プロトコル Client Cloud Spanner Pub/Sub Cloud Spanner Namespace Cloud Storage Service C Namespace Namespace Namespace Namespace Service B Service A API Gateway Authority gRPC gRPC gRPC

Slide 11

Slide 11 text

マイクロサービスダッシュボードの紹介 11

Slide 12

Slide 12 text

12 マイクロサービスダッシュボードとは? マイクロサービスに関する様々なデータを収集 01 集めたデータを可視化するウェブポータルサイト 02 集めたデータをAPIとして提供 03

Slide 13

Slide 13 text

13 モチベーション マイクロサービスの状態や品質を把握したい 01 ドキュメントが自動的に生成される状態にしたい 02

Slide 14

Slide 14 text

14 機能紹介 ・トップ画面 ・サービス詳細画面 ・サービス詳細画面: インフラ ・サービス詳細画面: アプリケーション ・サービス詳細画面: API ・サービス詳細画面: SLO

Slide 15

Slide 15 text

15 機能紹介: トップ画面

Slide 16

Slide 16 text

16 機能紹介: トップ画面

Slide 17

Slide 17 text

17 機能紹介: サービス詳細画面

Slide 18

Slide 18 text

18 機能紹介: サービス詳細画面 serviceID: merpay-service-a description: This is service-a corporation: MERPAY teamName: merpay-architect-jp contact: slack: generalChannelId: C0123456 alertChannelId: C12345678 … service spec file

Slide 19

Slide 19 text

19 機能紹介: サービス詳細画面(サービスの依存関係, 費用のグラフ)

Slide 20

Slide 20 text

20 機能紹介: サービス詳細画面(インフラタブ)

Slide 21

Slide 21 text

21 機能紹介: サービス詳細画面(アプリケーションタブ)

Slide 22

Slide 22 text

22 機能紹介: サービス詳細画面(アプリケーションタブ)

Slide 23

Slide 23 text

23 機能紹介: サービス詳細画面(APIタブ)

Slide 24

Slide 24 text

24 機能紹介: サービス詳細画面(APIタブ)

Slide 25

Slide 25 text

25 機能紹介: サービス詳細画面(SLOタブ)

Slide 26

Slide 26 text

26 機能紹介: SLOダッシュボード

Slide 27

Slide 27 text

27 マイクロサービスダッシュボードの仕組み 技術スタック Backend Frontend ● Go ● Cloud Spanner, Pub/Sub, Scheduler, Tasks ● gRPC, GraphQL (99designs/gqlgen, vektah/dataloaden) ● TypeScript ● React, Material-UI ● GraphQL (apollo-client)

Slide 28

Slide 28 text

28 マイクロサービスダッシュボードの仕組み Single Page Application API Gateway Microservice Dashboard Go serves assets gRPC server GraphQL server Cloud Spanner Browse Get / Assets GraphQL Query Data etc

Slide 29

Slide 29 text

29 データ収集の仕組み Cloud Scheduler: 定期的にデータを取得 01 Cloud Pub/Sub: イベントメッセージからデータを取得 02 Cloud Tasks: マニュアルオペレーション 03 データ収集のトリガー

Slide 30

Slide 30 text

30 データ収集の仕組み トリガー発動後 API Gateway Microservice Dashboard gRPC server Cloud Spanner HTTP Cloud Scheduler Cloud Tasks Pub/Sub HTTP HTTP gRPC データ収集 etc

Slide 31

Slide 31 text

31 データ収集の仕組み トリガー発動後 API Gateway Microservice Dashboard gRPC server Cloud Spanner HTTP Cloud Scheduler Cloud Tasks Pub/Sub HTTP HTTP gRPC タイムアウト 処理中... etc

Slide 32

Slide 32 text

32 データ収集の仕組み 愚直に集めている 管理するデータの構造を定義して機械的に処理可能にする データを集める

Slide 33

Slide 33 text

33 データ収集の仕組み: データを集める マイクロサービスの一覧 API Gateway Microservice Dashboard gRPC server Cloud Spanner Pub/Sub etc microservices-terraform リポジトリ CIで各microserviceの service-specをpublish service-specを保存

Slide 34

Slide 34 text

34 データ収集の仕組み: データを集める マイクロサービスの依存関係のグラフ Datadog: /api/v1/service_dependencies Network: network policyの設定(terraformをパース) ServiceEnv: Podの環境変数の宛先

Slide 35

Slide 35 text

35 データ収集の仕組み: データを集める 毎月の費用グラフ Microservice Dashboard Cloud Spanner etc 費用データを格納 費用データを保存 BigQuery 費用データを取得 Platform

Slide 36

Slide 36 text

36 データ収集の仕組み: データを集める GCPリソース Microservice Dashboard Cloud Spanner etc GCPリソースのデータを保存 Cloud Asset API で取得 Cloud APIs microservices-terraform git clone & parse terraform

Slide 37

Slide 37 text

37 データ収集の仕組み: データを集める Kubernetesリソース API Gateway Microservice Dashboard GraphQL server Cloud Spanner etc Browse Kubernetes API GraphQL Query Kubernetes API Development Production kubernetes/client-go

Slide 38

Slide 38 text

38 データ収集の仕組み: データを集める gRPC API定義 API Gateway Microservice Dashboard gRPC server Cloud Spanner Pub/Sub etc platform-proto リポジトリ CIでFileDescriptorSetを生成してpublish FileDescriptorSetを保存

Slide 39

Slide 39 text

39 データ収集の仕組み: データを集める SLO Microservice Dashboard Cloud Spanner etc デイリーでSLOの履歴を保存 datadog API で取得

Slide 40

Slide 40 text

40 データ収集の仕組み: データを集める Schema Service Spec Service Dependency Service Cost Google Project Kubernetes Namespace Service API Service SLO

Slide 41

Slide 41 text

41 データの再利用 GraphQL APIを提供 API Gateway Microservice Dashboard GraphQL server Cloud Spanner Browse GraphQL Query etc GraphQL Query System

Slide 42

Slide 42 text

42 データの再利用 マイクロサービスに関するデータのHUB Microservice Dashboard

Slide 43

Slide 43 text

今後の取り組み 43

Slide 44

Slide 44 text

44 今後の取り組み データの更新イベント Microservice Dashboard Cloud Spanner etc 2.データの更新をpublish Pub/Sub 1.何かデータを保存

Slide 45

Slide 45 text

45 今後の取り組み データの更新イベントをきっかけに行動を起こす Microservice Dashboard Cloud Spanner etc 2.データの更新をpublish Pub/Sub 1.何かデータを保存 System 3.データの更新をsubscribe 4.アクション

Slide 46

Slide 46 text

46 抱えている課題 各マイクロサービスに対応してほしいことがあるとき Service A Service C Service B … 🙇 🙇 🙇 🙇

Slide 47

Slide 47 text

47 抱えている課題 マイクロサービス毎にTODOの管理 Service A: TODO Service C: TODO Service B: TODO … Microservice Dashboard Service A Owner Platform 進捗確認 やること確認

Slide 48

Slide 48 text

48 今後の取り組み TODO管理用のAPIの提供 Service A: TODO Service C: TODO Service B: TODO … Microservice Dashboard GraphQL API TODO System TODO更新

Slide 49

Slide 49 text

49 今後の取り組み イベントをきっかけとしたTODOの更新 Service A: TODO Service C: TODO Service B: TODO … Microservice Dashboard GraphQL API TODO System TODO更新 Pub/Sub データ更新イベント

Slide 50

Slide 50 text

50 今後の取り組み イベントをきっかけとした一貫したデータの変換 something Microservice Dashboard GraphQL API System 変換&更新 Pub/Sub データ更新イベント

Slide 51

Slide 51 text

51