← 概念辨析に戻る

Concept Contrast Fable

まず小規模なバッチで、その後段階的にユーザーへ展開

先に結論:カナリアデプロイとカナリアリリースは、名前はほぼ同じだが、エンジニアリング実践では異なる段階を指す。カナリアデプロイは新バージョンをまず少数のインスタンスにデプロイして実行することに注目し、カナリアリリースは新バージョンをまず一部のユーザートラフィックに開放することに注目する。前者は実行の安定性を検証し、後者はユーザー体験を検証する。両者はしばしば同じリリースパイプラインに直列に組み込まれるが、監視の重点とロールバックのトリガー条件は異なる。

カナリアデプロイとカナリアリリースは、名前はほぼ同じだが、エンジニアリング実践では異なる段階を指す。カナリアデプロイは新バージョンをまず少数のインスタンスにデプロイして実行することに注目し、カナリアリリースは新バージョンをまず一部のユーザートラフィックに開放することに注目する。前者は実行の安定性を検証し、後者はユーザー体験を検証する。両者はしばしば同じリリースパイプラインに直列に組み込まれるが、監視の重点とロールバックのトリガー条件は異なる。

寓話

ワイナリーで最初の一口と客が最初の一壺を味わう

城南に百年続く酒荘があり、醸造師には先祖伝来の決まりがあった。新酒が窖から出たら、まず小さな盃に注いで竈のそばに置き、二炷香の時間が過ぎたら、酸味がないか嗅ぎ、沈殿物がないか見る。これを竈前験と呼ぶ。竈前験で問題がなければ、初めて甕を開けて壺に詰める。

支店を開いてから、庄主はもう一つ規則を加えた。壺に詰めた酒は、まず五壺を支店で一番なじみの常連客の卓へ無料で届け、客に飲ませる。飲み終えたら三つ尋ねる。口当たりは合うか、後勁は強いか、翌日頭痛はしないか。これを卓前試しと呼ぶ。卓前試しがすべて満足して初めて、翌日酒単に新酒の札を掛ける。

ある年、問題が起きた。新酒は竈前の検査に合格した——竈のそばで見ると、色は澄み、酸味はない。食卓前の試飲を飛ばしてそのまま札を掛け、翌日には町中で売り出した。初日の客は皆良いと言った。三日目から酒を返しに来る客が出た——この酒を飲むと翌日頭痛がし、喉も渇く。竈の前で二炷香かけても分からなかったものを、客は飲んで一晩寝て分かった。

庄主は三日間門を閉ざし、竈前験と桌前試を分けて二本の線として書き出した。竈前験が調べるのは酒そのものの安定性——変質しないか、不純物はないか、アルコール度数は正しいか。桌前試が調べるのは客が飲んだ後の体験——口当たり、後勁、翌日の体の反応。二炷香の窓と一晩寝る窓は、まったく異なるものを測っている。

その後規模が大きくなるにつれ、庄主はもう一つの境界を管理する必要があると気づいた:灶前験は何樽の酒をカバーすべきか?一樽だけ検めれば、残り九十九樽が同じ欠陥かもしれない。桌前試は何人の客をカバーすべきか?五壺だけ古馴染みに送れば、彼らの好みは固定していて新しい問題は飲み出せない。庄主は灶前験を一樽から抜き取り五樽に増やし、桌前試を五壺から三十壺に増やし、異なるタイプの客の卓へ送った。カバレッジとサンプリング戦略も分けて管理しなければならない。

外地の酒商が教えを請いに来ると、庄主は接待の宴で一枚の図を描いた。竈前の検查は走れるかどうか——酒を壇に詰めた後、腐らずに保てるか。机前の試查は飲めるかどうか——客が実際に飲んだ後、満足するか。まず走れてこそ飲める。走れても必ず飲めるとは限らない。二つの事柄を一つに減らしてはならない。

酒庄は後にこの図を出荷室に掛けました:新酒の棚入れは2つの関門を見る、竈前の一関、机前の一関。どちらかの関門を飛ばしたら、どちらかが補償する。

カナリアデプロイ

新しいバージョンをまず少数のインスタンスにデプロイし、アプリケーション自体が正常に起動し、動作し、ヘルスチェックに応答できるかを検証する。インフラとランタイムの安定性に注目し、通常はユーザートラフィックの受け入れより先に行う。

カナリアリリース

ユーザートラフィックの一部を新バージョンにルーティングし、ユーザー体験、機能の正確性、ビジネス指標を検証します。ユーザー側の行動とビジネスデータに注目し、デプロイ検証の通過後に行います。

物語の対応

  • 竈前検証:カナリアデプロイ、新バージョンが実行環境で安定しているかを検証する
  • 机上テスト:カナリアリリースで、実ユーザートラフィックの体験と業務指標を検証
  • 机前の試しを飛ばして直接棚に並べる:カナリアデプロイだけを行いカナリアリリースを行わない典型的な事故
  • 二炷香と一晩の睡眠:デプロイ検証の窓は短く、リリース検証の窓は完全なユーザー行動周期をカバーする必要がある
  • 五つの甕と三十の壺を抜き取り検査する:デプロイのサンプリングはインスタンス数をカバーし、リリースのサンプリングはユーザートラフィックの割合をカバーする

リリースプロセスの設計に落とし込む

カナリアデプロイとカナリアリリースは、リリースパイプラインに直列につながれた二つの独立した段階として扱うべきだ。第一段階ではカナリアインスタンスにデプロイし、CPU、メモリ、エラー率、起動時間を監視する——異常時はロールバックし、トラフィックを流さない。第二段階では一定割合のトラフィックをカナリアインスタンスに切り替え、ユーザー側指標——ビジネスエラー率、遅延分布、主要コンバージョン率——を監視する——異常時はトラフィックを戻しつつ、インスタンスは問題調査のために保持する。二つの段階には異なる監視ダッシュボードと異なるトリガー条件のロールバック機構が必要だ。

京ICP备2026014272号