deployment unit とは? 実際に出荷するもの
deployment unit とは、1つのものとしてデプロイし、スケールし、rollback する、最小の自己完結した artifact です。
アーキテクチャの選択は、結局のところ何を1つのまとまりとして出荷するかに帰着します。monolith は1つの大きな deployment unit を持ち、マイクロサービスのシステムは多数の小さなものを持ちます。deployment unit のサイズと境界が、リリースの頻度、blast radius、そしてパイプラインの形を決めるため、この概念を直接名付ける価値があります。
デプロイの単位
deployment unit とは、一緒にリリースされるものです。container image、serverless function、パッケージ化されたサービス。1つとしてデプロイ・バージョン管理・スケール・rollback されます。その境界が、何を一緒に変えなければならないか、何を独立して変えられるかを決めます。
サイズはトレードオフである
- 大きな unit: パイプラインは単純だが、リリースが粗く blast radius が大きい。
- 小さな unit: きめ細かく独立したリリースだが、パイプラインが増える。
- 境界が、何が一緒にデプロイされるかを決める。
- どれだけ頻繁に、どれだけ安全に出荷できるかを形作る。
blast radius
悪いデプロイは、その unit 全体に影響します。小さな unit は損害を1つのサービスに限定し、大きなものはアプリケーション全体を危険にさらします。unit を意図的にサイズ設定することは、失敗した1つのデプロイがどれだけ壊すことを許されるかについての判断でもあります。
unit ごとに1つのパイプライン
各 deployment unit は通常、独自の build-test-deploy パイプラインを持ちます。したがって unit の数とサイズが、保守するパイプラインの数と、リリースがどれだけ独立できるかを直接決めます。
不変でバージョン管理されている
良い deployment unit は不変でバージョン管理されています。あるバージョンはどこでも同じバイト列なので、環境間で昇格でき、以前のバージョンへ自信を持って rollback できます。これは unit に適用された build-once, deploy-many の原則です。
unit ごとのプロビジョニング
多数の小さな unit は、多数の頻繁なデプロイと、その背後の build ジョブを意味します。ウォームでプロビジョニングの速い runner(Latchkey が提供するもの)は、その高いデプロイ頻度が build のキュー待ち時間でボトルネックにならないようにします。
重要なポイント
- deployment unit とは、1つとしてデプロイし rollback する最小の artifact である。
- そのサイズは、パイプラインの単純さとリリースの粒度・blast radius をトレードオフする。
- 不変でバージョン管理された unit は、環境間の昇格ときれいな rollback を可能にする。