Proprietary
Google Cloud Platform で実現する
プロダクションレディ
マイクロサービス
Feb 28, 2018
Google Cloud INSIDE #3
Proprietary
Yuta Hono | 寳野 雄太
クラウドカスタマーエンジニア
Google Cloud
yutah@google.com | @yutah_3
Confidential & Proprietary
プロダクションレディな
マイクロサービスに
求められるものとは?
Proprietary引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤 直生 監訳、長尾 高弘 訳
● 安定性
● 信頼性
● スケーラビリティ
● 耐障害性と大惨事への対応
● パフォーマンス
● 監視
● ドキュメント
“アーキテクチャと運用の要件として
これらの原則を備えたマイクロサービスを
作れば、本番トラフィックを任せられる
可用性の高いシステムが構築できます。”
Proprietary
これらの実現を
手助けする
サービスを提供
Confidential & Proprietary
- マイクロサービスアーキテクチャ -
マイクロサービスの
APIエンドポイントは、
全社を通じて標準化されてい
なければなりません。
引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤直生 監訳、長尾高弘 訳
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
API 管理
OAuth2
Server
API バックエンド ストレージ
(incl. DB)
マイクロサー
ビスB
監視、
トレーシング
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド ストレージ
(incl. DB)
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
Confidential & Proprietary
API 管理 : Cloud Endpoints
● OAuth2 対応、アクセスコントロール
○ Firebase, Auth0, custom auth…
○ マイクロサービス同士のコントロールも
● ロギング、監視
○ Stackdriver Logging, Dashboard に記録
● gRPC/REST 対応
● API 設計ガイド、バージョン管理ガイドの要
項を簡単に実現
Proprietary
API 設計ガイド
Google 内部の API 設計の
スタンダードを公開
Cloud Endpoint で簡単に
実現
https://cloud.google.com/apis/design/
Proprietary
バージョン管理ガイド
Google 内部の API バージョニング
手法を公開
Cloud Endpoint で実現をサポート
https://goo.gl/mgbJv8
Confidential & Proprietary
Cloud Endpoints - Open API による認証
簡単に API 認証を実装
swagger: "2.0"
securityDefinitions:
custom_id_token:
flow: "implicit"
type: "oauth2"
x-google-issuer:
"[SERVICE_ACCOUNT_EMAIL]"
X-google-jwks_uri:
"[JSON_WEB_KEY_URI]"
x-google-audiences:
"[JWT_AUDIENCES]"
security:
- custom_id_token: []
Confidential & Proprietary
Cloud Endpoints - gRPC から REST対応
Extensible Service Proxy (ESP) が
HTTP/JSON を gRPCに翻訳。
ユーザは変換マッピングを
指定するだけ。
https://cloud.google.com/endpoints/docs/grpc/transcoding
// Returns a specific bookstore shelf.
rpc GetShelf(GetShelfRequest) returns (Shelf)
{
// Client example - returns the first
shelf:
// curl http://DOMAIN_NAME/v1/shelves/1
option (google.api.http) = { get:
"/v1/shelves/{shelf}" };
}
...
// Request message for GetShelf method.
message GetShelfRequest {
// The ID of the shelf resource to
retrieve.
int64 shelf = 1;
}
Confidential & Proprietary
- スケーラビリティとパフォーマンスを備えた
マイクロサービスを構築するための原則 -
キャパシティプランニングが
自動化され、
スケジュールに基づいて実行
されている。
引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤直生 監訳、長尾高弘 訳
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド ストレージ
(incl. DB)
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド ストレージ
(incl. DB)
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
App Engine
Kubernetes
Engine スケーラブル・
マネージドな基盤
Proprietary
Google App Engine | Google Kubernetes Engine
API バックエンドのコンピュートとして
App Engine
Kubernetes
Engine
● Web アプリのための 統合 PaaS
● フルマネージド、サーバーレス
● 効率的なスケーリング
● ステートレス、疎結合になるよう設
計された基盤
● 自律的な回復の仕組み
● マネージドの Kubernetes
● オープン、コンテナ
● Pod / Node オートスケール
● ロードバランサとの統合
● 自律的な回復の仕組み
どちらも Google SRE が管理
Proprietary
“Our operations team
is Google.”
「私たちの運用チームは です。」
Confidential & Proprietary
- 安定性と信頼性を備えたマイクロサービスを 構
築するための原則 -
ステージング、カナリア、本番
のフェーズを備えた
標準的なデプロイ
パイプラインがある
引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤直生 監訳、長尾高弘 訳
Proprietary
Google App Engine | Google Kubernetes Engine
アップデートの仕組み
App Engine
Kubernetes
Engine
● カナリア リリースが容易
● A/B テストも容易
● OSS の CD ツールである
Spinnaker をあわせて利用すること
で更に使いやすく
+
Confidential & Proprietary
- スケーラビリティとパフォーマンスを備えた
マイクロサービスを構築するための原則 -
高いパフォーマンスが得られ
るように、タスクを処理してい
る。
引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤直生 監訳、長尾高弘 訳
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド ストレージ
(incl. DB)
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
App Engine
Kubernetes
Engine
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド ストレージ
(incl. DB)
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
App Engine
Kubernetes
Engine
Cloud
Pub/Sub
Task Queue
非同期処理を行う
メッセージング
Proprietary
Task Queue | Cloud Pub/Sub
非同期で効率よく処理を行う
Task Queue
(App Engine Cloud Tasks)
Cloud
Pub/Sub
● App Engine に組み込み済みの
キュー
● タスクを簡単に非同期にできる
● Standard Environment*
の 60 秒を
越えるタスクで利用
● Publisher / Subscriber 型の メッ
セージサービス
● Gmail 等のサービスの裏側で   1
億メッセージ / 秒を送信
● gRPC / REST 対応
● グローバルリソース
* 自動スケーリング設定を選択した場合
Proprietary
「我々は 万メッセージ 秒 をなんのサービス劣化もな
く、ほとんどエラーを から受け取ることなくパブ
リッシュできました。」
引用: Spotify Labs Blog
https://labs.spotify.com/2016/03/03/spotifys-event-delivery-the-road-to-the-cloud-part-ii/
Confidential & Proprietary
- スケーラビリティとパフォーマンスを備えた
マイクロサービスを構築するための原則 -
マイクロサービスは、
スケーラブルでパフォーマンスの
高い形でデータを処理しなければ
なりません。
引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤直生 監訳、長尾高弘 訳
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド ストレージ
(incl. DB)
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
App Engine
Kubernetes
Engine
Cloud
Pub/Sub
Task Queue
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
App Engine
Kubernetes
Engine
Cloud
Pub/Sub
Task Queue
様々な
データベース群
Proprietary
https://cloud.google.com/storage-options/
Proprietary
Google Cloud Platform の データベースは
ビジネス課題を解決する ために生まれている
マイクロサービスの目的にあった
ストレージ/データベースを
選択することが重要
Confidential & Proprietary
- マイクロサービスの監視の原則 -
マイクロサービスの主要メトリックに簡
単にアクセスできなければ、
開発者は手がかりがなく、
問題をすばやく解決できなくなってしま
うことが多いでしょう。
引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤直生 監訳、長尾高弘 訳
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド
マイクロサー
ビスB
監視、
トレーシング
Cloud
Endpoints
App Engine
Kubernetes
Engine
Cloud
Pub/Sub
Task Queue
Proprietary
マイクロサービス A
Client
マイクロサービス アーキテクチャ例
サービス
OAuth2
Server
API バックエンド
マイクロサー
ビスB
Cloud
Endpoints
App Engine
Kubernetes
Engine
Cloud
Pub/Sub
Task Queue
Stackdriver
運用のための
統合ツール
Proprietary
Stackdriver Logging
ログを効率よく検索 / BigQuery, Pub/Sub, GCS 等へエクスポートし分析
Proprietary
Stackdriver Trace
誰でも使用できる分散トレース システム -パフォーマンスをリアルタイム分析
Proprietary
Stackdriver Error Reporting
例外のモニタリングとアラート - 迅速にエラーを、リアルタイムに把握
Proprietary
Stackdriver Debugger
本番環境で、リアルタイムに、アプリケーションを動かしたままデバッグ
Proprietary
Stackdriver Monitoring
フルスタック モニタリング を 統合した画面で管理、アップタイム監視も可能
Confidential & Proprietary
- 耐障害性と大惨事対応 -
マイクロサービスは障害を
起こし、
障害はたびたび起こります。
引用:O'Reilly Japan, Inc - プロダクションレディマイクロサービス
Susan J. Fowler 著、佐藤直生 監訳、長尾高弘 訳
Proprietary
リリース チェックリスト
● アルファ版、試験版、商用版 のステージでチェックすべきことを定義
● Google Cloud Platform 全体、サービスごとなど詳細までカバー
○ Google Compute Engine
○ Google App Engine
○ BigQuery
○ Cloud SQL
○ Google Cloud Storage
ソフトウェアだけでなく、Google との連絡体制、キャパシティの概念も記載
Proprietary
次のアクション
Google Cloud Platform で マイクロサービスをはじめてみよう!
● Google App Engine チュートリアル
● Google Kubernetes Engine チュートリアル
● Cloud Endpoints チュートリアル
Proprietary
Thank you
Email: yutah@google.com
Twitter: @yutah_3

Google Cloud Platform で実現するプロダクションレディ マイクロサービス