Skip to main content

モダンCI/CD向けの冗長性切り替えの説明

冗長性切り替えがCI/CDパイプラインとモバイルアプリを自動切り替えで障害発生時も健全に保つ方法を知りましょう。

マーティン・ドナディュー

マーティン・ドナディュー

コンテンツマーケター

モダンCI/CD向けの冗長性切り替えの説明

この問題が発生するのは、リリースの途中です。ビルドは緑色で、モバイルチームはリリースを準備していますが、エッジノードがトラフィックを落とすか、バックエンドパスが不正確になり、ロールアウトが安全でないようになります。その時点で、「バックアップ」だけでは、ユーザーにサービスを提供できるシステムではありません。

そのギャップは 冗長性フェールオーバー 実際には、冗長性は、代替パス、コンポーネント、または状態のコピーを提供することです。フェールオーバーは、ブレークしたときに作業を代替のいずれかに移す決定と調整です。

モバイルとCI/CDチームにとって、このことはインフラチェックリストが認めるよりも多くのものです。ライブアップデートプラットフォームは、単に公開ツールではなく、ルーティング、署名、ストレージ、エッジ配信、デバイスチェック、およびロールバック動作の連鎖です。連鎖のいずれかのリンクがきれいにフェールオーバーできない場合、全体のリリースパスはまだ崩壊する可能性があります。

目次

When a Backup Is Not Enough

無事のリリースから始まる、非常に一般的な出来事は、ステージングでアプリケーションバンドルが通る、デプロイシステムが正常に動作し、チームが定例のロールアウトを期待する状況から始まる。すると、地域エッジノードが劣化し、1 つのパスが悪いヘルス信号を返し始め、リリースは一時停止し、全員が同じ質問を繰り返すことになる «この障害に耐えられるか、またはそれを検出できるだけか?»

Backup インフラストラクチャを所有することと、実際の冗長性フェイルオーバー設計を持つこととの間のギャップは、そのものです。ラックに置かれた備品サーバーは、ルーティング層がユーザーをそれにアクセスさせない、認証サービスがそれにアクセスできない、またはデプロイメントプロセスがいつ切り替えるかを知らない場合、役に立たない。マイクロソフトのアーキテクチャガイドラインは、このギャップを明確に示しており、冗長コンポーネントをテストし、有効化することを推奨し、フロントエンドとバックエンドのフェイルオーバーを同期し、自動フェイルオーバーと手動フェイルバックを使用することを推奨している。単純な複製は、エンドツーエンドで回復が機能することを保証するものではないからである。 誰もが実行したことがないバックアップは、単に予算線に伴う希望だけだ。 有効なモデルには 4 つの部分がある。

冗長性

冗長性が存在する場合のパス フェイルオーバー システムがそれに移行する方法 回復オーケストレーション 冗長性は、どのパスが存在するかを回答する。 フェイルオーバーは、システムがそれに移行する方法を回答する。 答えは、残りのチェーンが正常な状態に戻る方法です。 検証 答えは、白板では機能するものの、実際の条件下では機能するかどうかを確認することです。

モバイルチームは、ライブ更新配信で明らかです。サービスが一時的な障害後でもパッケージを署名、保存、ルーティング、検証できる場合、プラットフォームは一部のレイヤーで冗長性を備えていても、実際のユーザーに失敗する可能性があります。障害は通常、1 つのボックスが破損しているのではなく、ボックス間のハンドオフ、または誰かが気づいてスイッチするという仮定です。同様の論理は、インシデント対応でも、最初の数分がアーキテクチャ図よりも重要であることを強調しています。 Capgoのインシデント対応ガイド.

有用な概要 Networking2000からの冗長性に関するアドバイス 冗長性とフェイルオーバーは、同じものと考えてよく言いますが、実際には別のものです。

冗長性

冗長性とは、同じ作業を行うことができる複数のコンポーネントの存在を指します。 Redundancy and Failover Defined as a Pair Redundancy フェイルオーバー __CAPGO_KEEP_0__

実際の料理店の例

忙しいレストランのキッチンを想像してみましょう。複数のシェフが同じメニューを調理できる場合、それは冗長性です。ヘッドシェフが1人が疲弊したときにすぐに次のタスクを他の誰かに割り当てると、それはフェイルオーバーです。

キッチンには人だけが必要です。問題を検知する方法、代替コンポーネントを割り当てるルール、そして前方に配置された客を混乱させないように注文を進める方法が必要です。なぜなら、冗長性だけではフェイルオーバーが実現しないからです。フェイルオーバーだけでは冗長性が実現しないからです。

ITシステムの冗長性とフェイルオーバーの概念を説明する図

区別は重要です。チームは、代替コンポーネントを購入したり作成したりした後で止まることがよくあります。2台のサーバー、2つのリージョン、または2つのデータのコピーがあるかどうかを確認し、それで十分だと考えます。実際の生産環境では、システムが問題を早く検知し、切り替えを行うことなく、元のパスが回復したときに切り替えをクリーンに戻すことができるかどうかが重要です。

チームが問うべき4つの質問

実用的で機能するフェイルオーバー設計は、4つの評価基準によって生き残ります。

  • 検知時間システムが何かが不正であることを早く知ることができるかどうか
  • 切り替え時間バックアップパスへの作業の移行にかかる時間はどれくらいですか。
  • データの整合性バックアップが安全に引き継ぐために必要な状態を持っているかどうかを確認します。
  • 逆還元システムが好ましいパスに戻ることができるか、悪化を招くことなく、確認します。

データベース、ロードバランサ、ライブアップデートパイプラインに同じように適用される質問です。ハンドオフが発生する場所が違うだけです。モバイルリリースシステムでは、チャネル、エッジ、バンドルバージョン間のハンドオフが発生する可能性があります。アプリケーションサーバ間のハンドオフと同じロジックです。健康的な代替が存在し、システムが正しい理由で選択できるようにする必要があります。

共通のアーキテクチャパターンと使用するタイミング

フェイルオーバーを論理的に考える最も簡単な方法は、決定がどこで行われるかを尋ねることです。チームはハードウェアが問題を吸収するようにします。チームはソフトウェア、ロードバランサ、グローバルルーティングレイヤーに決定を押し付けることもあります。各選択肢は異なる種類の障害を処理し、異なる種類の盲点を生み出します。

各パターンがどのように役立つか

ハードウェア冗長性 ハードウェア冗長性は、ローカルで明確な障害、例えばデバイス、カード、ノードの障害の場合に効果的です。理解が簡単なのはなぜか、プラットフォームの成熟度の早い段階で出現するのはなぜですか。ハードウェアだけではオーケストレーションを解決することはできません。上位レイヤーが何が起こったかを知らない場合、トラフィックはまだ間違った場所を指している可能性があります。

ソフトウェア冗長性 __CAPGO_KEEP_0__。アプリケーション層でサービス、プロセス、または容量を複製するのではなく、boxを単に複製するのではなく、重心を上方にシフトします。 これは、ソフトウェアが健康、バージョニング、状態について賢い決定を下すことができるクラウドネイティブシステムにとって、より適切なフィットです。

アクティブアクティブ 複数のパスが同時にサービスを提供しているため、単一の障害が冷スタートを引き起こすことはありません。 システムが同時ハンドリングを許容し、データモデルがアクティブな参加者間で一貫性を保つことができる場合、強力な選択肢です。 アクティブパッシブ 一方のパスがサービスを提供し、もう一方が待機しているため、より保守的な選択肢です。 一方のパスが障害を発生させた場合にのみ、待機しているパスがサービスを提供するため、より簡単に推論できます。 ただし、障害が発生するまでに容量が利用できないため、容量のコストがかかります。

リージョナルフェイルオーバー サイトまたはゾーン全体が不健康になった場合、トラフィックを別の場所に移動するのに役立ちます。 DNSドライブ クライアントにその移動を視覚化するために ロードバランサー ドライブ 決定をリクエストパスに近づけるために使用される戦略です。

各パターンが破綻する傾向がある

すべてのパターンはどこかで破綻します。ハードウェアの冗長性は、上流の依存関係がまだ共有されていることを隠すことができます。アクティブアクティブでは、状態モデルが並列性に対応していない場合に混乱が生じる可能性があります。アクティブパッシブでは、パッシブ側が機能することを信頼することが困難です。地域のフェイルオーバーは、同じ障害ドメインを跨ぐ共有サービスによって破壊される可能性があります。DNS ドライバー制御は、変更を反映するのに時間がかかり、ロード バランサー ドライバー制御は、バランサ自体が正常である場合にのみ有効です。

モバイル アップデート プラットフォームの場合、フェイルオーバー層は同時に複数のレベルで存在する可能性があります。ビルド サーバーは冗長化され、アーティファクト ストレージは複製され、エッジ デリバリはロード バランサー化されますが、リリースが進むべきレベルを決定するのはどのレイヤーかというのが主な質問です。より広範な展開の視点を得たい場合は、 Capgo のマルチ リージョン展開ガイドは実用的なパートナーです。地域の考え方がリリースの信頼性の形状を変えることを示しています。

まず、ユーザー インパクトを所有するレイヤーから始めましょう。ユーザーはエッジを離れた後にアップデートを感じる場合、エッジはフェイルオーバーの物語の一部です。

正しいパターンは、最も複雑なものではなく、生存しようとしている障害に合致するものです。小規模なチームは、まずアクティブ パッシブに明確な検証パスを追加し、下位レイヤーが信頼できることを証明した後、並列性を追加します。

重み付けフェイルオーバーと段階的な閾値

A failover の決定には、純粋な yes または no Switch が必要ではない。二値論理は、システムが健康と不健康の状態の間でバウンドする原因の 1 つである。サービスが 1 つの信号が線を超える度に健康と不健康の状態の間でバウンドするのを防ぐためである。

二値思考がフラッピングを引き起こす理由

Juniper の chassis-cluster モデルは、具体的な例を示している。各冗長性グループは、 255value を開始し、監視対象オブジェクトが失敗したときに割り当てられた重みを減算する。Juniper chassis-cluster 冗長性グループのフェイルオーバー).

その設定は、ハードカットオーバーと比べて、生産現場の現実に合っている。 1 つの不完全なリンクは不快ではあるが、サービス可能な状態である。同時に複数の監視対象のオブジェクトが失敗すると、別の物語を語ることができる。組み合わせられた効果が大きすぎる場合、切り替えが必要になる。そうする理由は、部分的なダウンタイムは一般的であり、即時の切り替えが元の障害よりも多くのトラフィックを中断する可能性があるためである。

重み付けされたヘルスチェックが決定をどのように変えるかについての説明

ネットワーク機器の外側でもフェイルオーバーが重み付けされる。サーキットブレーカー、重み付けされたトラフィックプール、ステージドエグレスコントロールはすべて同じ考え方に従います。最初の警告にパニックを起こすのではなく、繰り返し警告を無視することもありません。ポリシーは切り替えのコストがあるため、調整が可能です。早期のフェイルオーバーはセッションを破壊し、状態の再調整を複雑化し、1つのインシデントを2つに変える可能性があります。

モバイルチームにとって、同様の論理は展開制御にも適用されます。ライブアップデートパスは、観客のうち一部がすでに劣化しているのに対して、まだ健全な部分が存在する可能性があります。観察性が細かければ、システムはリスクが定義されたラインを超えるまで、エッジからサービスを提供し続けます。エッジはその決定の一部であり、 Capgo から得られるエッジネットワークモデルは、最後のホップが中央パイプラインと同じくらい重要であることを説明しています。

短いビデオでは、メンタルモデルを保持しやすくすることができます。

重み付けされたフェイルオーバーは、問題の枠組みを変える。コンポーネントが生きているか死んでいるかという質問を止め、パスの信頼度がどれだけ残っているかという質問に切り替えるのです。部分的な障害が通常のシステムでは、持続することよりも急いでスワップすることよりも、より正直な質問です。

フェイルオーバーをCI/CDとライブアップデート配信に適用する

リリースパイプラインは配信システムですが、回復システムでもあります。そう見るようになると、設計上の選択肢がはっきりします。ビルドサーバー、アーティファクトストア、署名サービス、ロールアウトチャネルはすべて、 冗長性フェイルオーバー は明確でなければなりません。

パイプラインをサービスパスとして扱う

1 つのビルドランナーが死んだ場合、冗長性は、もう 1 つのランナーが作業を引き継ぐことができる場合にのみ有用です。アーティファクトのストレージが利用できない場合、パイプラインにはもう 1 つのコピーまたはアーティファクトにアクセスする別のルートが必要です。ロールアウトが悪い状態に達した場合、システムは問題が広がる前に更新を送信するのを止める必要があります。

CI/CD とライブアップデート配信は、単純なパブリッシュスクリプトとは異なります。成熟したパイプラインには、リリースが続行できるか、停止できるか、逆転できるかを知る必要があります。 Capacitor OTA更新トリガー ガイド これは、ビルドプロセスがユーザーフェイスの配布イベントに変化する中間点に位置するため、有用です。

実用的なリリースチェーンには、通常 3 つの保護機構が必要です。

  • ビルド冗長性1 つのランナーまたは 1 つのキューのダウンタイムがリリースをブロックしないようにするためです。
  • アーティファクト冗長性署名されたアーティファクトが単一の障害点にならないようにするためです。
  • チャンネル ガードレール、完全暴露之前、悪いリリースは抑制できる。

それらは別の懸念事項ではない。 それらは、異なるパス上の同じ回復の物語である。

ロールバックは、例外ではなく、配信の一部に含める。

ロールバックは、エラーの応答としてのアプリケーション層のfailbackである。システムは、問題が理解されたり修正されたりするまで、ユーザーを悪いパスから離れ、安定したパスに戻す。ロールバックが手動の火災演習としてのみ存在する場合、通常は遅すぎる。

観察性はこれが可能にする。デバイスごとのログ、採用信号、エラーイベントは、更新パスが健康で続行できるかどうかを教えてくれる。そういったフィードバックがなければ、チームは暗闇に飛び、failoverの決定はただの推測だけになる。

ロールバックパスは、リリースパスと同じくらい面白くないようにするべきだ。インシデントの際にロールバックが新奇なものである場合、それは十分に設計されていなかった。

CapgoはCapacitorJSまたはElectronライブアップデートを配信するチーム向けのオプションであり、署名されたウェブバンドル、チャンネルベースの配布、デバイスごとのログ、自動ロールバック保護をサポートしている。 これらの機能は、failoverのために重要であり、プラットフォームに悪いリリースを検出、分離、逆転させる方法を与える。

ポイントは、1つのツールが全てを解決するということではない。ポイントは、配信パイプラインが、1方向の放送ではなく、堅牢なシステムのように振舞うようにすることである。

エッジアップデートプラットフォームは、failoverチェーンとして機能する。

世界中でアップデートのパスが途切れるのは、ダッシュボードがそう言っているのとずっと前です。 バンドルはビルドから署名、次にストレージ、次にエッジネットワーク(地域をまたいだ場合もあります)を経て、最後にオフライン、遅い、または部分的に接続されたデバイスに到達します。 その連鎖のいずれかのステップが失敗すると、更新は失敗していません。 それが止まっています。

エッジがリカバリパスのなかにある理由

遅延、一貫性、署名されたバンドル、デバイスごとのログは、配信の重い負担です。 認証できない署名されたバンドルは、デバイスがそれを信頼しないようにするため、死んだパスです。 リクエストがどの地域に到達したかによってコンテンツが異なるエッジノードが、エッジノードが健康である場合でもフェイルオーバーイベントをトリガーすることができます。これは、配信問題を信頼性問題に変えるのです。

エッジはクラシックインフラのロジックを同じように実行します。 分散されたエッジネットワークは配信の冗長性レイヤーになり、フェイルオーバー対象はリクエストに答えることができる次のヘルスノードになります。 ルーティングテーブルやデータベースレプリカと一緒に仕事をしたことがあれば、このパターンは馴染みのあるものになります。 モバイル配信では、更新ロジックの背後で失敗を隠すので、途切れたステップは見逃しやすくなります。

より広範なプレミアにあたって 実践でエッジネットワークが何をするか ローカリティの失敗の重要性がモバイルアップデートシステムでどれだけ大切であるかを説明するのに役立ちます。 同じ考え方はまた、 ネットワークエッジでデータを処理することパフォーマンスと失敗の動作を両方とも変えることです。

__CAPGO_KEEP_0__

__CAPGO_KEEP_1__

__CAPGO_KEEP_2__

  • __CAPGO_KEEP_3__ __CAPGO_KEEP_4__
  • __CAPGO_KEEP_5__ __CAPGO_KEEP_6__
  • __CAPGO_KEEP_7__ __CAPGO_KEEP_8__
  • __CAPGO_KEEP_9__ __CAPGO_KEEP_10__

__CAPGO_KEEP_11__

インフラとモバイル配信の橋渡しです。フェイルオーバー先は常に別のサーバーではありません。次の信頼できるバンドルが次の信頼できるエッジにあります。

テストフェイルオーバーを必要とする前に

冗長性の誤解が生き残るのは、幸せなパスが魅力的だからです。チームは、重複したインフラを確認し、冗長性を仮定し、実際の障害下で崩壊する隠れた依存関係を無視します。ポイントは単純です。冗長部分はテストおよび検証が必要であり、フロントエンドとバックエンドのフェイルオーバーは同期する必要があります。

冗長性の誤解が生き残る理由

誤解は通常、共有の依存関係と弱い物理的分離から始まります。2つのシステムは、同じ隠されたパス、同じ署名サービス、または同じアーティファクトストアに依存している場合、実際には別々ではありません。

そのため、バックアップが存在するだけをチェックするテストは、実際のフェイルオーバーパスが失敗している場合でも通過できます。

モバイル配信とエッジシステムでは、チェーンがレイヤーを超えて伸びているため、さらに重要です。ロールバックはダッシュボードで健康に見えますが、デバイスがバックアップエッジロケーションからバンドルを再取得できない場合、地域フェイルオーバーは成功に見えますが、署名サービス、アーティファクトストア、または認証パスが共有の障害ドメインを明らかにするまで、成功に見えます。同じパターンは Capacitor OTA更新の実践でのリハーサルで見られます。

更新パスはデバイス、エッジ層、そして信頼できるリリースソースに通る必要があります。

A useful failover test forces the actual recovery path, not a fake one. The team should rehearse the complete sequence under realistic conditions, then watch where the chain bends, stalls, or breaks. A broader edge perspective helps here, because ネットワークエッジでデータを処理する ローカル条件が障害のストーリーに含まれるようになると、「復旧」は意味を変える。

A practical checklist looks like this:

  • 混沌のドリル, 一意のコンポーネントを意図的に削除または劣化して、システムがきれいにシフトするかどうかを確認する。
  • 地域間でシンセティックトランザクション, 一つのサイトが利用できない場合でもリクエストが完了できることを確認する。
  • 計画的な地域間のフェイルオーバー, ルーティング、認証、ストレージ、更新の配信がすべて一緒に動作することを確認する。
  • 段階的なロールアウトの逆行, 実際のネットワーク条件下で悪いライブアップデートが停止でき、置き換えられることを確認する。
  • Mobile rollback validation、署名のバンドルがバックアップエッジロケーションから再取得できることを確認する。

実際のフォールバックパスに触れるテストがない場合、モニタリングダッシュボードが機能することを証明するだけである。

最強のチームは、バックアップチェーンが機能するかどうかを調査するために待つのではなく、重要な障害モードを練習し、システムが手動の混乱なしで回復できるまで、ハンドオフを強化することを繰り返す作業習慣と考える。

A Practical Checklist for Teams Shipping Live Updates

ライブアップデートはデータベースやロードバランサが失敗する場所で失敗する可能性がある。ただし、モバイルでは爆発半径が異なる。悪いパッケージ、破損したエッジノード、または古いフォールバックチャンネルは、ユーザーが古いビルドに固定されながらアプリが正常に表示されるようにする。

ライブアップデートを配信している場合、この週から始める。リリースのパスをマップする。

  • 弱点をマップするDNS、エッジ、オリジン層の単一の障害点を特定し、ユーザーへの影響を負うものを書き留める。
  • 代替パスを確認する各重要なコンポーネントが健全なバックアップパスを持っていることを確認する。紙上の複製資産だけでは不十分である。
  • チャンネルガードレールを使用するベータ版、ステージング版、プロダクション版を分離しておくようにしてください。そうしないと、1つの不良リリースが艦隊全体のイベントになる可能性があります。
  • 署名付きのバンドルを必要としますデバイスごとの信号を監視する
  • ログと採用データを使用して、フェールオーバーがトリガーされるべき時を教えてくれる検出機制を使用するロールバックの練習
  • 最後の良好なバージョンがクリーンに復元できないことを発見するのを待つのではなく、実際のインシデントを待つ必要はありません。予定された混乱演習を実行する
  • 意図的に一部のパスをサービスから外すと、実際にチェーンがシフトするかどうかを観察するフェールバックも検証する
  • 戻るのはシステムの一部であり、ボーナス機能ではないため、戻ることも検証する必要があります。リリースからソースまでを追跡し、デバイスに到達するまでの場所を特定できるチームが回復に成功する。彼らは冗長性を単に追加のコピーとして扱うのではなく、チェーンの決定、チェック、ハンドオフが圧力下で機能することを保証するチェーンとして扱います。エッジ更新レイヤーも含めて、リリースパイプラインとユーザーのデバイスの間にあるものです。

冗長性をチェーンの決定、チェック、ハンドオフとして扱うチームが回復に成功する。エッジ更新レイヤーも含めて、リリースパイプラインとユーザーのデバイスの間にあるものです。

もしリリースがうまくいかない場合、対応のためのスクリプトはすでに用意されているべきです。チェックリストはインシデントの実行書と並べるべきであり、生産が止まってしまう場合に使用するインシデント対応ガイドとつながるべきです。 インシデント対応ガイド 生産が止まってしまう場合に使用するインシデント対応ガイド

Capacitor アプリ用のライブアップデート

ウェブ層のバグがライブのときは、Capgo を通して修正を配信するのではなく、アプリストアの承認待ちの日数を待つのではなく、ユーザーはバックグラウンドでアップデートを受け取り、ネイティブの変更は通常のレビュー経路で残る。

スタートする

ブログの最新記事

Capgo は、プロフェッショナルなモバイルアプリを作るために必要な最良の洞察を提供します。