Google Cloud Platform

ゲスト投稿 : マルチクラウド対応の継続的デリバリを Spinnaker で実現した Waze

渋滞情報のクラウド サービスを手がける私たち Waze は、サービスを利用するユーザーの貴重な財産である時間にとても気を配っています。私たちのクラウド サービスは、ユーザーから寄せられたデータを基に最適なルートを見つけやすくし、ユーザーの時間節約に貢献しています。

当然ながら、クラウド サービスは利用できなければ話になりません。Waze では、複数のクラウド プロバイダーを使って本番システムの回復力を高めています。Google Cloud Platform(GCP)と AWS の全体にわたってアクティブ / アクティブなアーキテクチャを採用することで、DNS DDOS 攻撃、地域レベルの障害、すなわちクラウド プロバイダー全体でのグローバルな障害が起きたとしても、サービスの維持という点で有利なポジションを確保しています。

それでも、ルーティングや ETA 計算のバグがいつの間にか本番環境に紛れ込んだりすると、できる限り早くそのコードをロールバックしたり、フィックスしたりする能力が必要となります。

重要なのはスピードです。とはいえ、マルチクラウド環境の場合、これは言うほど簡単なことではありません。

たとえば、私たちのリアルタイム ルーティング サービスは、2 つのクラウド プロバイダーと複数の地域に分散した 80 以上のオートスケーリング グループ / 管理対象インスタンス グループに展開されています。

このような状況のもとでは、継続的デリバリが役に立ちます。私たちは、高速かつ信頼できる形でソフトウェアの変更をリリースするために、オープンソースの継続的デリバリ プラットフォームである Spinnaker を使用しています。ちなみに、昨年はターゲット プラットフォームが何であるかに関係なく、本番デプロイは Spinnaker が 100 % 処理しました。

Spinnaker と継続的デリバリ

大規模なクラウド デプロイは複雑になることがあります。幸い、Spinnaker が個々のクラウド プロバイダーの細部を抽象化してくれるので、デベロッパーはクラウド プロバイダーの低水準の細かい問題に煩わされず、ユーザーのために Waze を改良することに注力できます。しかも、カナリア分析、イミュータブル インフラストラクチャ、高速ロールバックなど、継続的デリバリの重要コンセプトも維持できます。

Spinnaker の世界の重要な構成要素の 1 つが Jenkins です。コードが git にコミットされ、Jenkins がパッケージをビルドすると、同じパッケージが当該マイクロサービスのメイン デプロイ パイプラインをスタートさせます。パイプラインは、パッケージを複数のクラウド プロバイダー用のイミュータブル マシン イメージに焼き込み、継続して自動テスト ステージを実行します。

デプロイは、Blue-Green Deployment 戦略を使ってステージングに進み、最終的に各プラットフォームの細部に深入りせずに本番環境に送られます。クラウド プロバイダーごとに正しいイメージ ID を解決する仕事は Spinnaker が自動的に行ってくれるので、個々のクラウドのデプロイ プロセスは構成 / 設定を必要とせず、自動的に正しく進められます。

下図はマルチクラウド パイプラインの例です。

kb-B3Ysuq3LfFi7OhlaoaM4Kp-x-jjMInEvyG0r8wMRz5ZPbsr_7K2onzSxYaBSbpzIf6dRCcLXBdIcZjhnpHWUqjh0HTi0JSwX0yWEjTWZdKdnX-imQa9eUu9D7fxXIhs498SYEh5kr.PNG
* Jenkins のアイコンは Jenkins プロジェクトから借用しました。
h-d0s6vDdcA-hhdt6y9i5kq4HJiYvHJ7n-z8pmphbItwf8Tq1lOLQfzmZ22JCjQMLHG8MhXIMYhpVDDpKn44WXO4RknoVbmH7zE3YW1yw7yaRWOGW1rHWGwDll6SqTaVVmbw9z--y21f.PNG
Spinnaker を使ったマルチクラウドの Blue-Green Deployment

Spinnaker のおかげで、デベロッパーは個々のクラウド プラットフォームに縛られることなく、ビジネス ロジックの実装に集中できます。また、チームはメールや Slack、SMS など複数の通知メカニズムを使ってデプロイのライフサイクルを追跡し、デベロッパーと品質管理チームの引き継ぎを調整できます。カナリア分析、高速ロールバックなどのツールもサポートされているため、デベロッパーはデプロイの状態に関する情報を把握して判断を下すことができます。

Spinnaker は最初からセルフサービス ツールであることを基本に設計されています。そのため、デベロッパーは運用チームの関与を最小限に抑えながら、これらすべてを行うことができます。

私たち Waze は、新機能やバグ フィックスをユーザーにできる限り早くリリースするよう努めています。Spinnaker は単純、簡単で信頼できるマルチクラウド デプロイとロールバックを維持しつつ、私たちのそうした努力を後押ししてくれます。

皆さんの組織でも役に立ちそうだと思われましたら、Spinnaker をチェックしてみてください。そして、Google Cloud Next '17での私たちのプレゼンテーションをぜひご覧ください。


* この投稿は米国時間 2 月 16 日、Systems Operations Engineer である Tom Feiner と Katriel Traum、Waze の Site Reliability Engineer である Nir Tarcic、Spinnaker の Software Engineer である Matt Duftler によって投稿されたもの(投稿はこちら)の抄訳です。

- By Tom Feiner, Systems Operations Engineer, Katriel Traum, Systems Operations Engineer, Nir Tarcic, Site Reliability Engineer, Waze and Matt Duftler, Software Engineer, Spinnaker