イベント

Kubernetesを使った最新の開発アプローチを紹介――、「Google Cloud Anthos Day」開催

Google Cloudのセッションを徹底レポート

モダナイズは「改善し続ける」が重要

 Google Cloudの塚越啓介氏(アプリケーションプラットフォームスペシャリスト)と頼兼孝幸氏(アプリケーションプラットフォームスペシャリスト)によるセッション「Kubernetes と推し進める、モダンなソフトウェア開発ライフサイクル」では、Kubernetesを利用したアプリケーションのモダナイズについて、ライフサイクルに重点を置いて解説した。

 まず塚越氏が、モダナイズの考え方について語った。

 塚越氏は「なぜモダナイズするか」について、「システムが複雑になり変更しづらい」「リリーススパンが長くなる」「リリースまでの時間の見積もりがずれる」「スケールできずボトルネックが発生」というよくある状況を挙げ、「解決したいのは“Time to market”であり、それにはサイクルをいかにはやく回すかが重要」と語った。

 これを解決する手法の一つとしてマイクロサービス化があるが、塚越氏は「一気にマイクロサービス化するのはおすすめしない。『改善し続ける』を一番意識してほしい」と言う。そして、変えるべき点として、開発プロセス、すべての自動化、システムや組織のデカップリング、運用の改善の4つを挙げた。

 開発プロセスの改善について塚越氏は「一番大事なのは計測すること」と説明。それも開発だけでなく承認プロセスなどまですべてを計測してボトルネックを探す必要があり、そのための手段としてバリューストリームマッピングを紹介した。

Google Cloud 塚越啓介氏(アプリケーションプラットフォームスペシャリスト)
「『改善し続ける』が重要」
開発プロセス、すべての自動化、システムや組織のデカップリング、運用の改善の4つ
開発プロセス:「一番大事なのは計測すること」

 自動化については、手法としてはCI/CDを挙げつつ、「一番大事なのは、暗黙知から形式知にしていくこと」と語り、ソフトウェアのライフサイクルを最適化していくことの重要性を語った。

 組織とアーキテクチャのデカップリングは、アプリケーションをマイクロサービスに分割していくことだ。塚越氏は、「システム構成は組織構造を反映したものになる」というコンウェイの法則を逆手にとり、アーキテクチャにあわせて組織構造もデカップリングしていく「逆コンウェイ戦略」を勧めた。

 そしてマイクロサービスに分解していく手法として、レガシーシステムの前段にファサードを作り、一部ずつ新しいマイクロサービスに切り出していく「Strangle Pattern」と、システム間通信において新規アプリケーションとレガシーシステムの間にレイヤーを挟む「Anti-corruption layers Pattern」の2つを紹介した。

 運用の改善としては、可用性とビジネスのバランスが重要だと語られた。「なにも考えずに可用性100%を目指すべきではない。可用性の数字を上げるときに指数関数的にコストが発生する。ビジネス側でどれだけのSLAを要求しているのかに合わせる」と塚越氏。「そこで、エラーバジェットの考え方が大事、とお伝えしたい。運用コストが下がったリソースでシステムの改善を繰り返すのがよい」として、最初に挙げた「改善し続ける」ことを強調した。

自動化:暗黙知から形式知へ
組織とアーキテクチャのデカップリング:Strangle Pattern
組織とアーキテクチャのデカップリング:Anti-corruption layers Pattern
運用の改善:エラーバジェットでシステムの改善を繰り返す

GCPサービスによる開発ライフサイクルとSRE

 続いて頼兼氏が、マイクロサービスに分割したあとの開発ライフサイクルとGCPの活用について、設計、開発、ビルドとテスト、デプロイ、モニタリングの5ステップで解説した。氏は「こうしたプロセスがSRE(Site Reliability Engineering)と呼ばれる」と説明した。

Google Cloud 頼兼孝幸氏(アプリケーションプラットフォームスペシャリスト)
開発サイクルの5ステップ
SREによる改善

 まず設計については、GoogleによるKubernetesマネージドサービスであるGKEと、Kubernetesを管理するまでもない用途で使えるCloud Runの2つのプラットフォームを頼兼氏は紹介した。

 続いて開発については、コンテナで実行環境の差異をなくすことを紹介。さらに、データベースなどコンテナから呼び出すマネージドサービスについては、エミュレーターのgcloud beta emulatorsによって開発環境で再現する方法を紹介した。

 ビルドとテストについては、Cloud Buildを紹介。さらに、デプロイについてもGitOpsとCloud Buildを使う方法を紹介した。

 モニタリングとしては、マイクロサービス間の重要な指標を可視化するサービスとして、Stackdriver LoggingとStackdriver Kubernetes Engine Monitoringを紹介した。さらに、ユーザーへの影響のモニタリングとして、SLOのモニタリングを取り上げた。

設計:GKEとCloud Run
開発:エミュレーターで開発環境の挙動を再現
ビルドとテスト:Cloud BuildによるCI
デプロイ:GitOpsとCloud BuildによるCD
モニタリング:Stackdriver Logging
モニタリング:Stackdriver Kubernetes Engine Monitoring