SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

GitOpsで実現する継続的デリバリー

一歩先の継続的デリバリー「プログレッシブデリバリー」とは? 概要と実現のためのソリューションの紹介

GitOpsで実現する継続的デリバリー 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Dynamic Dataで閾値を決定するソリューション

SpinnakerとKayenta

 Spinnakerは、マルチプラットフォームに対応したCDソリューションです。Kubernetesに限らず、さまざまなプラットフォーム上で動作するアプリケーションのプログレッシブデリバリーに利用することができます。

 Spinnakerだけでカナリアを始めとしたさまざまなデリバリー戦略を実行することができますが、自動カナリア分析にはKayentaというコンポーネントを使います。Spinnaker用に開発されたものですが、単体でも動作します。カナリアだけでなく現行バージョンのメトリクスも収集し、それらを比較することで分析を行います。

「Spinnaker - The canary judge—how does it work?」より引用

Spinnaker - The canary judge—how does it work?」より引用

 データポイント毎に、各メトリックはPass、High、Lowのいずれかに分類されます。システムオーナーは、どこに分類されると失敗とみなすかを設定し、それに従って自動で分析が行われます。例えば、HTTPエラーレートが以前より低い場合(Low)は問題ありませんが、高い(High)場合は問題です。

 メトリクス毎に許容する変化だけを設定し、細かい閾値のことは考えなくて良い点が魅力です。

Harness Continuous Verification

 Harness Continuous Verification(CV)は、Harness社が提供するSaaSの1つで、こちらもマルチプラットフォームに対応しています。

 機械学習を用いて閾値を自動で決定することで、変化を続けるアプリケーションへの継続的な分析を可能にすることを目指しています。

 HarnessではSpinnakerと同様に、カナリアと現行バージョンのメトリクスを比較するCanary Analysisに加え、以前のデプロイと比較するPrevious Analysisという機能も提供しています。

 これは詰まるところ、カナリアをデプロイすることなく新バージョンを分析することができるということです。カナリアのデプロイには、カナリアと現行バージョンをどのように隔離するかという問題が常につきまといます。

 カナリアと現行バージョンは、データベースやフロントエンド、ネットワークなど、さまざまなものを共有しています。カナリアデプロイメントとはしばしば、それらの依存関係に起因して予期せぬ結果を招きます。

 Harness CVは過去デプロイ時のメトリクスを保存しているため、カナリアの代わりにこのデータを利用することで、そういった複雑さから逃れることができます。

 動的に閾値が設定されるのは柔軟ではありますが、恐ろしくもあります。一定ラインを絶対に死守したいメトリクスがある場合のために、Fast-failという形で静的に閾値を設定する方法も提供されています。

まとめ

 プログレッシブデリバリーは、理解することよりも継続的に実践することの方が遥かに難しいことが分かっていただけたかと思います。

 プロセスのうちいくつかは統一できますが、大部分がシステムの要件によって異なることが主な理由です。

 今回触れませんでしたが、まだまだ考えるべきことがたくさんあります。例えばリクエストがコンスタントに来ないサービスの場合はどうでしょうか。適切にカナリア分析するために、擬似的なリクエストを生成したり、トラフィックを複数環境へコピーする機能(トラフィックティーイング)を提供しているソリューションもあります。

 しかしそれだけで解決するケースは極めて稀です。また、2つのバージョンのアプリケーションを本当に同時に実行して良いのかどうかは、システムオペレーターにしか分かりません。

 このような現実世界への適用の難しさが、デリバリーソリューションが乱立する要因だと思います。それでも、一つ一つのプロセスに向き合う価値は十分にあると思います。

 今回紹介したソリューションは一部でしかありませんが、それぞれの特徴に絞って紹介しました。チームのデリバリー戦略を決める際に、本記事が何らかの形で参考になれば幸いです。

参考

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
GitOpsで実現する継続的デリバリー連載記事一覧

もっと読む

この記事の著者

中尾 涼(株式会社サイバーエージェント)(ナカオ リョウ)

 2020年に新卒でサイバーエージェントに入社。オープンソースの継続的デリバリシステム、PipeCDの開発に従事。 GitHub: nakabonne

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/14476 2021/07/21 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング