【かなりありりーす】

カナリアリリース とは?

💡 まず少しだけ出してみて、大丈夫なら全員に届ける
📌 このページのポイント
カナリアリリースの仕組み ユーザー ← 5% ロード バランサー トラフィック分割 95% 5% v1 現行バージョン 安定稼働中 v2 新バージョン カナリア 監視 エラー率 レイテンシ 成功率 問題なし → 徐々に増加 → 100%へ 異常検知 → ロールバック 段階的なトラフィック移行 5% 開始 25% 拡大 50% 半数 100% 完了! v1: 95% v2: 100%
カナリアリリースは新バージョンに少量のトラフィックを流し、問題がなければ段階的に全体へ展開する手法
ひよこ ひよこ

カナリアリリースって普通のリリースと何が違うの?

ペンギン先生 ペンギン先生

普通のリリースは全ユーザーに一斉に新バージョンを届けるよね。カナリアリリースは最初に全体の5%とか10%のユーザーにだけ新バージョンを配信して、エラー率やレスポンスタイム監視する。問題がなければ徐々に比率を上げて、最終的に全体に展開するんだ。

ひよこ ひよこ

なんで「カナリア」って名前なの?

ペンギン先生 ペンギン先生

昔、炭鉱の坑夫がカナリアを籠に入れて坑道に持ち込んでいたんだ。カナリアは有毒ガスに敏感だから、カナリアが元気なら安全、弱っていたら危険と判断できた。カナリアリリースも同じで、少数のユーザーへのリリースが「カナリア」の役目を果たすんだよ。

ひよこ ひよこ

ブルーグリーンデプロイとはどう違うの?

ペンギン先生 ペンギン先生

ブルーグリーンは旧環境(ブルー)と新環境(グリーン)を用意して、ルーティングを一括で切り替える方式。カナリアは一括ではなく「5%→20%→50%→100%」と段階的にトラフィックを移す。カナリアの方がリスクは小さいけど、切り替え中は2つのバージョンが同時に動くから、互換性に注意が必要だよ。

ひよこ ひよこ

具体的にどうやってトラフィックを分けるの?

ペンギン先生 ペンギン先生

ロードバランサーサービスメッシュIstioEnvoyなど)でトラフィック重み付けルーティングを使うのが一般的だよ。AWS App MeshやKubernetesのArgo Rolloutsを使えば、「新バージョンにトラフィックの10%を流す」みたいな設定がYAMLで書ける。

ひよこ ひよこ

監視で何を見ればいいの?

ペンギン先生 ペンギン先生

最低限見るべきは「エラー率」「レスポンスタイムレイテンシ)」「リソース使用量」の3つ。カナリア版のこれらが旧バージョンと比べて悪化していないかを自動比較する。Kayentaのような自動カナリア分析ツールを使えば、統計的に「この差は有意か」まで判定してくれるよ。

ひよこ ひよこ

フィーチャーフラグとカナリアリリースは何が違うの?

ペンギン先生 ペンギン先生

カナリアリリースは「デプロイ(インフラ)のレベル」でトラフィックを分ける手法で、フィーチャーフラグは「アプリケーションのコードレベル」で機能のON/OFFを切り替える手法。組み合わせて使うことも多いよ。たとえばカナリアリリースで新バージョンをデプロイしつつ、特定の機能だけフィーチャーフラグで段階的に有効化する、なんてこともできるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「カナリアリリース」って出てきたら「新バージョンをまず少数のユーザーに試して安全を確認してから全体に広げるデプロイ方法だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Canary Release」 = カナリア(小鳥)のリリース
💬 炭鉱でカナリアを連れて有毒ガスを検知したことに由来。新バージョンが「カナリア」役で問題を先に検知するよ
← 用語集にもどる