SHOEISHA iD

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

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

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

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

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

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

 本連載では、GitOpsを活用した継続的デリバリーやプログレッシブデリバリーについて紹介します。前回の記事では、継続的デリバリーの概要について解説しました。本記事ではその一歩先の概念であるプログレッシブデリバリーについて解説し、具体的なソリューションを紹介します。

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

はじめに

 Google Cloudと協業しDevOpsに関する調査レポートを公開しているDORAの「The Accelerate State of DevOps Report」では、生産性の高いエリートパフォーマーは「コードを1日に何度も本番環境にデプロイする」と述べられています。

 多くのデプロイを行うことでユーザーに変更を素早く届けることができ、市場で勝てる可能性が高くなります。しかし一方で、コードの変更はさまざまな障害を引き起こします。頻繁なデプロイには重大なリスクが伴います。

 プログレッシブデリバリーという用語を提言したJames Governorは次のように述べています。

 The elite performers are shipping a lot more code and with higher quality.

 ――“An Introduction to Progressive Delivery", James Governor at Qcon 2019

 つまり私たちが最終的に求めているのは、何も壊さずに頻繁にデプロイできる仕組みです。その仕組みこそがプログレッシブデリバリーです。

 言葉にすると簡単に聞こえますが、何も壊さないとは一体どういうことでしょうか。現実世界は極めて複雑です。本記事では、具体的にどのように解決するのか、さまざまなソリューションを比較しながら解説していきます。

プログレッシブデリバリーとは

 プログレッシブデリバリーは、新しい機能を段階的に公開していくことで影響範囲や時間を細かく制御するための手法全般を指します。

 この言葉にはさまざまな目的を持つ複数の手法が含まれており、新機能の公開範囲を意図的に制御することを目的としたフィーチャーフラグや、それに基づいたA/Bテストなどの手法も含まれます。しかし本記事では、前節で述べた「何も壊さずに頻繁にデプロイできる仕組み」を実現するための手法についてのみ詳述していきます。

 この仕組みを実現するためにプログレッシブデリバリーでは、既存のモニタリング技術と組み合わせてユーザーへの悪影響をできるだけ小さくすることを目指します。この文脈でのプログレッシブデリバリーを構成する要素はいくつかありますが、主に以下のプロセスを段階的に行います。

  1. トラフィック制御(カナリアデプロイメント)
  2. 分析
  3. 自動化されたロールバック

 まずは、現行バージョンのアプリケーションと新バージョンのアプリケーション(以降カナリアと呼びます)を同時に実行し、僅かなトラフィックのみをカナリアへと流していきます。時間が経つにつれて、徐々にカナリアへ流すトラフィックの割合を増やしていきます。これは一般的にカナリアデプロイメントと呼ばれています。

 影響を最小限に留めるために、カナリアが期待通りに動作していない場合は即座にロールバックしなければなりません。そのためにも、カナリア実行中は常に機能指標やパフォーマンス指標を分析し続ける必要があります。これは一般的にカナリア分析と呼ばれることが多いですが、分析手法によって若干表現が異なるため、本記事では単に「分析」と呼びます。

 この分析作業は従来、手動で確認したり、専用スクリプトを用意する等のアドホックな方法で行われたりしてきました。プログレッシブデリバリーの文脈ではこの部分を自動化することが必須で、そのためのソリューションが次々に登場しています。

 全てのトラフィックがカナリアに通されるまでこの分析は続きます。問題なく分析プロセスが終わると、通常は現行バージョンのアプリケーションをカナリアと同じバージョンへアップグレードします。反対に、途中で問題があった場合は即座にロールバックが実行されるべきです。この「自動化されたロールバック」も、プログレッシブデリバリーの文脈では必須になります。

 これらのうち、1つ目の「トラフィック制御」と、3つ目の「自動化されたロールバック」はソリューション間での差異があまりなく、ほとんどの作業は利用しているプラットフォームが用意しているインターフェースに従って設定していくことで実現できます。

 システムオーナーが最も時間を割くべきなのは「分析」のフェーズです。次からは、2つ目の構成要素である「分析」に焦点を当てて、具体的なソリューションを紹介していきます。

次のページ
分析のポイント(1)最適なメトリクスの選択

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング