失敗率が2%から3%へ悪化した新版を、1%にだけ流しました。気づくまでに7万500件かかりました。
その間に余分に失敗したのは12件です。50%に流すと8500件で気づけますが、失敗は44件になります。
流す割合を下げると、気づくまでの総件数は増えます。その間に傷つく件数は逆に減ります。
カナリアリリースは、新版を一部にだけ流して様子を見る出し方です。出典もこの形を定義しています。
その定義は変更を部分的かつ期間を限って配置し、それを評価することというものです。割合と期間の2つを決める必要があります。
現行の失敗率を2%として、失敗率の違う新版を用意しました。差が統計の目安を超えた時点で気づいたものとします。
種を変えて40回まわし、中央値を取りました。気づくまでの総件数と、その間に新版側で余分に失敗した件数を並べます。
新版の失敗率 流す割合 気づくまでの総件数 うち新版に流れた件数 新版側の失敗 2.5% 1% 522000件 5126件 30件 2.5% 5% 91000件 4549件 29件 2.5% 20% 42500件 8315件 41件 2.5% 50% 33500件 16841件 82件 3.0% 1% 70500件 719件 12件 3.0% 5% 29000件 1469件 16件 3.0% 20% 11000件 2223件 24件 3.0% 50% 8500件 4252件 44件 4.0% 1% 31000件 297件 8件 4.0% 5% 7000件 349件 9件 4.0% 20% 3500件 725件 15件 4.0% 50% 2500件 1288件 27件 6.0% 1% 11500件 111件 6件 6.0% 5% 3500件 174件 7件 6.0% 20% 1500件 288件 11件 6.0% 50% 1000件 505件 21件
失敗率3%の行を見てください。1%に流すと7万500件かかりますが、余分な失敗は12件です。
50%に流せば8500件で気づけます。ところが余分な失敗は44件と、3倍以上になります。
総件数と被害の向きが逆です。どちらを優先するかで割合が決まります。
割合を下げると気づくのは遅いが、傷つく件数は減る。
We define canarying as a partial and time-limited deployment of a change in a service and its evaluation.原文Google SRE Workbook「Canarying Releases」 この内容の有効期限2027-02-18
見逃したくない幅を狭くすると、必要な件数が急に増えます。1日の件数が足りないと判定が終わりません。
カナリアリリースで見落としやすいのが、悪化の幅によって必要な件数が大きく変わる点です。同じ表を縦に見ます。
1%に流した場合、失敗率6%への悪化なら1万1500件で気づきます。4%なら3万1000件、3%なら7万500件です。
幅が半分になると、必要な件数はおよそ4倍です。2.5%への悪化になると52万2000件で、桁がもう1つ上がります。
1日1万件しか流れないサービスなら、1%の割合では7日かかっても3%への悪化に気づけません。
その間、次の変更も出せません。出典もいらだたしいことに、これらの要件は互いに相反しうると書いています。
3番目が効くことがあります。失敗率は動きが鈍いので、応答時間や再試行の回数のほうが早く動きます。
悪化の幅が狭いほど、必要な件数は跳ね上がる。
Frustratingly, these requirements can be mutually at odds.原文Google SRE Workbook「Canarying Releases」 この内容の有効期限2027-02-18
先に決めるのは割合ではありません。見逃したくない幅と、判定に使える時間から引きます。
カナリアリリースの割合は、勘で決められがちです。この計測の表があれば逆算できます。
1秒に40件流れるサービスなら、1時間で14万4000件です。3%への悪化でも1%の割合で足ります。
1日1万件なら話が違います。3%への悪化を1日で判定したいなら、割合を50%まで上げる必要があります。
割合の設計は、悪い変更を止めるためだけのものではありません。良い変更を通すためでもあります。
出典はこの仕組みをカナリアは実質的にA/Bテストの手続きであると位置づけています。比べる相手がいて初めて成り立ちます。
件数が足りないまま「差がありそう」で止めると、良い変更まで止まります。判定の組み方はA/Bテストの記事で扱っています。
割合は逆算する。勘で決めると判定が終わらない。
失敗の起き方は各件が独立という置き方です。実際の障害は時間帯や利用者に偏って集まるので、少ない件数で目立つことも、逆に長く隠れることもあります。判定の目安も1つの基準で置いています。ここで見せているのは、割合と気づくまでの件数と被害の3つが同時には良くならないという関係です。
Canarying is effectively an A/B testing process.原文Google SRE Workbook「Canarying Releases」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る