【かなりありりーす】

カナリアリリース とは?

最終更新:
💡 まず少しだけ出してみて、大丈夫なら全員に届ける

新バージョンをまず一部のユーザーだけに公開し、問題がなければ徐々に全体に広げるデプロイ手法。問題が起きたときの影響を一部のユーザーにとどめやすい。

📌 このページのポイント
カナリアリリースの仕組み ユーザー ← 5% ロード バランサー トラフィック分割 95% 5% v1 現行バージョン 安定稼働中 v2 新バージョン カナリア 監視 エラー率 レイテンシ 成功率 問題なし → 徐々に増加 → 100%へ 異常検知 → ロールバック 段階的なトラフィック移行 5% 開始 25% 拡大 50% 半数 100% 完了! 緑のバー:新バージョン(v2)へ流す割合(例:5%→25%→50%→100%)
カナリアリリースは新バージョンに少量のトラフィックを流し、問題がなければ段階的に全体へ展開する手法
ひよこ ひよこ
カナリアリリースって普通のリリースと何が違うの?
ペンギン先生 ペンギン先生
全ユーザーに一斉に新バージョンを届けるのではなく、最初は5%や10%のように一部の利用者だけに届けて、エラー率や応答時間を監視するんだ。問題がなければ比率を少しずつ上げて、最終的に全体へ広げるよ。
ひよこ ひよこ
なんで「カナリア」って名前なの?
ペンギン先生 ペンギン先生
昔の炭鉱では、カナリアを籠に入れて坑道に持ち込んでいたんだ。有毒ガスが漏れると人より先にカナリアが弱るから、危険に早く気づける。一部のユーザーへのリリースも、全体に広がる前に問題を知らせてくれる役目なんだよ。
ひよこ ひよこ
ブルーグリーンデプロイとはどう違うの?
ペンギン先生 ペンギン先生
ブルーグリーンは旧環境と新環境を用意して、利用者を一度に切り替えるのが基本だね。カナリアは「5%→20%→50%→100%」のように段階的に移すから、問題の影響を一部にとどめやすい。そのかわり、切り替え中は2つのバージョンが同時に動くから、DBの形式やAPIの互換性に注意が必要だよ。
ひよこ ひよこ
具体的にどうやってトラフィックを分けるの?
ペンギン先生 ペンギン先生
ロードバランサーやIstioのようなサービスメッシュの重み付けルーティングを使うのが一般的だよ。KubernetesならArgo Rolloutsで「まず10%、1時間待って20%」のような手順をYAMLに書ける。ルーティングの仕組みがない場合は、新旧のPod数の比率で近似するから、Podが少ないと細かい割合にはできないんだ。
ひよこ ひよこ
監視で何を見ればいいの?
ペンギン先生 ペンギン先生
最低限は「エラー率」「応答時間(レイテンシ)」「CPUやメモリの使用量」だね。カナリア版を旧バージョン(ベースライン)と比べて悪化していないか確かめる。SpinnakerのKayentaのような自動カナリア分析ツールは、指定した指標を比べて点数を付け、次に進めるか判定してくれるよ。ただし公式ドキュメントも、カナリアは他のテストの代わりにはならないと注意しているんだ。
もっと詳しく知りたい人へ

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

カナリアリリースは、新しいバージョンのプログラムへ流す利用者の割合をデプロイの仕組み(ロードバランサーなど)で調整する方法だよ。フィーチャーフラグは、同じプログラムの中で機能のオン・オフを設定で切り替える方法。組み合わせることも多く、Martin Fowlerの解説では、Facebookが新機能のフラグをすべて有効にしたカナリアを使って、問題を早く見つける例が紹介されているよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「カナリアリリース」って出てきたら「新バージョンをまず少数のユーザーで確かめてから全体に広げるデプロイ方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Canary Release」 = カナリア(小鳥)のリリース
💬 炭鉱で有毒ガスに気づくためにカナリアを連れて入った話に由来するよ。一部のユーザーへのリリースが、全体より先に異常を知らせる「カナリア」の役目を果たすんだ

参考資料

← 用語集にもどる