メインコンテンツにスキップ

CI/CDとモバイルアプリの冗長性切り替え

CI/CDパイプラインとモバイルアプリの冗長性切り替えが自動的に障害発生時に切り替わるようにすることで、CI/CDパイプラインとモバイルアプリの健全性を確保する方法をご紹介します。

CI/CDとモバイルアプリの冗長性切り替え

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

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

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

目次

バックアップでは十分ではない場合

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

それが、バックアップインフラストラクチャを所有していることと、実際の 冗長性の切り替え 設計の間にあるギャップです。ラックに置かれた備品サーバーが役に立たないのは、ルーティング層がユーザーをそれに指示しない場合、認証サービスがそれにアクセスできない場合、またはデプロイプロセスが切り替え時を知らない場合です。マイクロソフトのアーキテクチャガイドラインは、このギャップを明確に示しており、冗長コンポーネントのテストと検証、フロントエンドとバックエンドの切り替えの同期、自動切り替えと手動復旧の使用を推奨しています。単純な複製は、エンドツーエンドで回復が機能することを保証しません。

誰もが実行していないバックアップは、予算線に伴うただの希望です。

有効なモデルには 4 つの部分があります。 冗長性 冗長性は、どのような複製または代替パスが存在するかを回答します。 切り替え 切り替えは、システムがそれに移動する方法を回答します。 回復オーケストレーション チェーンの残りの部分が正常な状態に戻る方法について説明します。 検証 実際の状況ではなく、白板上のものだけでは機能するかどうかを確認します。

モバイルチームは、ライブアップデートの配信でこのことを明確に認識しています。サービスがパートIALダウン後のパッケージを署名、保存、ルーティング、検証できなければ、プラットフォームは一部の層で冗長性を備えていても、実際のユーザーに失敗する可能性があります。通常、失敗は1つのボックスが壊れたことだけではありません。ボックス間のハンドオフ、または誰かが気付いてスイッチすることを期待する仮定が原因です。同様の論理は、インシデント対応でも、最初の数分がアーキテクチャ図よりも重要であることを示しています。 Capgoのインシデント対応ガイド.

Networking2000から得た冗長性のアドバイス 冗長性とフェイルオーバーをペアで定義する 冗長性とフェイルオーバーはよく似たもののように話されることが多いが、実際には同じものではない。

冗長性

同じ作業を複数のコンポーネントが行えることの存在 冗長性は、同じ作業を行える複数のコンポーネントの存在 フェイルオーバーは、システムが正常に動作しない場合に、冗長性のあるシステムが自動的に切り替わる機能 フェイルオーバー フェイルオーバーは、機能不全のコンポーネントから責任を健康なコンポーネントに移す行為です。

キッチンアナロジーが残る

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

キッチンには、人だけが必要です。問題を検知する方法、代替コンポーネントを割り当てるルール、前方に混乱を与えないように注文を進める方法が必要です。それがなぜ冗長性だけでは無駄な能力、フェイルオーバーだけではパニックだけである理由です。

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

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

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

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

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

データベース、ロードバランサ、ライブアップデートパイプラインに同じように適用される質問です。違いは、引き継ぎが行われる場所だけです。モバイルリリースシステムでは、チャネル、エッジ、バンドルバージョン間の引き継ぎが行われることがあります。論理は同じです。健全な代替が存在し、システムが正しい理由でそれを選択できる必要があります。

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

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

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

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

ソフトウェア冗長性 クラウドネイティブシステムでは、ソフトウェアは、健康、バージョニング、ステートについてより賢い決定を下すことができるため、通常、単にBOXを複製するのではなく、サービス、プロセス、またはアプリケーション層内の容量を複製することになります。

アクティブアクティブ 複数のパスが同時にサービスを提供しているため、単一の障害が冷たいスタートを引き起こすことはありません。システムが同時ハンドリングを許容し、データモデルがアクティブなパートicipant間で一貫性を保つことができる場合、強力な選択肢です。 アクティブパッシブ 一方のパスがサービスを提供し、他のパスは待機しているため、より保守的な選択肢です。認可されたステートの場合、より簡単に推論が可能で、より単純ですが、容量が非表示のままです。

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

各パターンがどこで崩壊するか

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

モバイル アップデート プラットフォームの場合、フェイルオーバー層は同時に複数のレベルで存在する可能性があります。ビルド サーバーは冗長化されています、アーティファクト ストレージは複製されています、エッジ デリバリーはロード バランサー化されていますが、リリースが進むべきレベルを決定するのはどのレイヤーが責任を持つのかというのが主な質問です。より広い展開の視点を求めている場合は、__CAPGO_KEEP_0__ から提供されるマルチ リージョン展開ガイドは実用的なパートナーとなります。なぜなら、それは地域の考え方がリリースの信頼性の形状をどのように変えるかを示しているからです。 multi-region deployment guide from Capgo 正しいパターンは、最も複雑なものではなく、生存しようとしている障害に合致するものです。小規模なチームは、まずアクティブパッシブに加え、明確な検証パスを用意し、下位レイヤーが信頼できることを証明した後、並列性を追加することが一般的です。

ウェイトド フェイルオーバーとグレードド スローザー

ウェイトド フェイルオーバーとグレードド スローザー

ウェイトド フェイルオーバーとグレードド スローザー

A failover の決定は、純粋な yes または no Switch に制限されません。二値論理は、システムがフラップする 1 つの理由です。サービスは、シグナルが線を越えるたびに、健康状態と不健康状態の間でバウンスします。重み付けされた failover は、同じ状況をより多くのコンテキストで処理します。失敗を、異なる影響レベルのシグナルとして扱います。

二値思考がフラップする理由

Juniper の chassis-cluster モデルは、具体的な例を示しています。各冗長グループは、最初にthresholdを設定し、失敗した監視対象オブジェクトの割り当てられた重みを減算します。failover は、threshold が 0 に達したときにのみ発生します。これにより、オペレータは、個々のインターフェイスまたはコンポーネントの失敗がどれだけ重要であるかを決定できます。 255Juniper chassis-cluster 冗長グループ failoverその設定は、ハードカットオーバーよりも、実際の生産現場に合っている設定です。1 つの不完全なリンクは不快ですが、サービス可能です。同時に複数の監視対象オブジェクトが失敗すると、別の物語を語ります。組み合わせられた効果が大きすぎる場合、切り替えが必要になる可能性があります。その理由は、部分的な劣化は一般的であり、即時の切り替えは元の障害よりも多くのトラフィックを中断する可能性があるためです。).

重み付けされた健康チェックが決定をどのように変えるか

__CAPGO_KEEP_0__

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

For mobile teams, that same logic applies to deployment control. A live update path may still be healthy enough for part of the audience while a smaller slice is already degraded. If observability is fine-grained, the system can keep serving from the edge until the risk crosses a line you defined. The edge is part of that decision, and the edge network model from Capgo helps explain why the last hop matters as much as the central pipeline.

A short video can make the mental model easier to hold.

Weighted failover changes how you frame the problem. You stop asking whether a component is alive or dead, and start asking how much confidence remains in the path. That is a more honest question in systems where partial faults are normal, and where holding steady is often better than forcing a rushed swap.

Applying Failover to CI/CD and Live Update Delivery

A release pipeline is a delivery system, but it’s also a recovery system. Once you see it that way, the design choices get clearer. Build servers, artifact stores, signing services, and rollout channels all become places where redundancy failover 明示する必要があります。

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

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

CI/CD とライブアップデート配信は、単純なパブリッシングスクリプトとは異なる点があります。成熟したパイプラインには、リリースが続行できるか、停止できるか、逆行できるかを判断する必要があります。 Capacitor OTA アップデートトリガーガイド 実用的なリリースチェーンには、通常3 つの保護機構が必要です。

ビルド冗長性

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

それらは別の懸念事項ではない。彼らは異なるパスの異なる時点における同じ回復の物語である。

ロールバックは配信の一部として、例外ではありません。

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

観察性はこれが可能にするものです。デバイスごとのログ、採用信号、障害イベントは、更新パスが健康で続行できるかどうかを教えてくれます。そうでない場合、チームは暗闇に飛び込み、フェイルオーバー決定はただの推測だけです。

ロールバックパスは、リリースパスと同じくらい面白くないものでなければなりません。インシデントの際にそれが新奇である場合、それが十分に設計されていなかったことを意味します。

Capgo は、CapacitorJS または Electron のライブアップデートを実行するチーム向けのオプションであり、署名されたウェブバンドル、チャネルベースの配布、デバイスごとのログ、自動ロールバック保護をサポートしています。そうした機能はフェイルオーバーに重要です。そうした機能は、悪いリリースを検出、分離、逆転させることができるようにします。ストアのレビューサイクルを待つ必要がなくなるからです。

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

エッジアップデートプラットフォームはフェイルオーバーチェーンです

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

エッジが回復パスのなぜいる理由

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

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

その配信レイヤーについてより広範なプライマーについて 実際にエッジネットワークが何をするか ローカリティの失敗がモバイルアップデートシステムでどれだけ重要であるかを理解するのに役立つ ネットワークエッジでデータを処理する、ローカル処理はパフォーマンスと失敗の挙動を両方とも変える

対象ユーザーに基づくチャネルを購入することの意味

対象ユーザーに基づくチャネル、例えばベータ、ステージング、プロダクション、または顧客固有のストリームは、チームが全体の艦隊がそれに依存する前に、回復パスをテストできるようにします。 それが重要な理由です。同じバンドルは、デバイスの組み合わせ、ネットワークの品質、またはロールアウトのタイミングに応じて、異なる動作を示す可能性があります。

それが起こることの実際の意味は何ですか。

  • ベータチャネル 更新パスの安定性を確認するために、より広範な露出を避けるために、更新パスを検証するのに役立ちます。
  • ステージングチャネル 制御された環境でロールバックと再取得の動作が正常に機能することを確認するのに役立ちます。
  • プロダクションチャネル 前方のパスが連鎖が整っていることを示した後、より早いパスがリリースを受け取るべきです。
  • 顧客固有のチャネル 一つのユーザーが異なるパッチのキャデンスを必要とする場合にリスクを分離するのに役立ちます。

重要な教訓は、エッジ配信はパスiveなビルドシステムのミラーではありません。 それが、最も近い健康なノードがサービスを提供できない場合、システムは次のノードを選択する必要があります。 バンドルが検証できない場合、プラットフォームは安全なリリース状態にフォールバックする必要があります。

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

フェイルオーバーをテストする

冗長性の誤解が生じるのは、ハッピーパスが魅力的だからです。チームは冗長性のインフラを確認し、冗長性を確信し、実際の障害時にすべてが崩壊する隠れた依存関係を無視します。ポイントは単純です。冗長部分はテストおよび検証され、フロントエンドとバックエンドのフェイルオーバーは同期されなければなりません。

冗長性の誤解が生じる理由

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

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

これは、モバイル配信とエッジシステムの場合に特に重要です。チェーンは複数のレイヤーを横切っており、ロールバックはダッシュボードで正常に表示される場合でも、デバイスがバックアップエッジロケーションからバンドルを再取得できない場合に、成功しているように見えます。地域フェイルオーバーは、署名サービス、アーティファクトストア、または認証パスが共有された障害ドメインを明らかにするまで、成功しているように見えます。同様のパターンは Capacitor OTA更新のテストで見られます。更新パスはデバイス、エッジレイヤー、そして信頼できるリリースソースに戻る必要があります。

実践で何を練習するか

Aの実際の復旧パスを強制する有用なフェイルオーバーテストは、偽のものではなく。チームは、現実的な条件下で完全なシーケンスを練習し、チェーンが曲がったり、止まったり、破れたりするところを見てみましょう。より広いエッジの視点が役立ちます。なぜなら、ローカル条件が失敗の物語の一部になるまで、「復旧」は何を意味するかが変化するからです。 ネットワークエッジでデータを処理する ローカル条件が失敗の物語の一部になるまで、「復旧」は何を意味するかが変化する

実用的なチェックリストは次のようになります。

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

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

最強のチームは、フォールバックテストを繰り返し運用習慣として扱います。彼らは、リスクを最小限に抑えるために、重要な障害モードを再現し、システムが手動の混乱なしで回復できるように、ハンドオフを強化します。

ライブアップデートを配信するチームのための実践的なチェックリスト

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

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

  • 弱点をマップするDNS、エッジ、オリジン層のシングルポイントオブフェールを特定し、ユーザーへの影響を所有するものを書き留める
  • 代替パスを確認する各重要なコンポーネントが健康なバックアップパスを持っていることを確認し、紙上の複製資産だけではありません
  • チャンネルガードレールを使用するバージョンをリリースする際は、ベータ版、ステージング版、生産版を分離しておくようにしてください。そうすれば、1つの不良リリースが全艦隊に広がることなく済みます。
  • 署名済みのバンドルを要求するバンドルが検証できなければ、代替パスとして有効ではありません。
  • デバイスごとのシグナルを監視するログや採用データを使用して、フェイルオーバーがトリガーされるべき時を判断する検出機制を使用する
  • ロールバックの練習最後の知られている良好なバージョンがクリーンに復元できないことを発見するのを待つのではなく、実際のインシデントが発生するのを待つまえにロールバックの練習を行う
  • 予定されたカオスドリルを実行するパスの1つの部分を意図的にサービスから外し、連鎖が実際に変化するかどうかを観察する
  • フェイルバックも検証するフェイルバックに戻ることはシステムの一部であり、ボーナス機能ではないため、検証する

リリースからデバイスまでの流れを追跡し、エラーが発生する場所を特定できるチームが、回復に成功する。彼らは冗長性を単に複数のコピーとして扱うのではなく、決定、チェック、ハンドオフの連鎖として扱う。 連鎖は、プレッシャー下でも機能するように設計されている。エッジアップデートレイヤーも含めて、リリースパイプラインとユーザーのデバイスの間にあるものです。

リリースがうまくいかない場合、対応はすでに練習済みでなければなりません。チェックリストはインシデントランブックの横に置いておき、生産が止まってくるときに使用するチームのインシデント対応ガイドに接続しておく必要があります。 インシデント対応ガイド 作成者

ライブアップデートはCapacitorアプリに

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

マーティンから人間のサポート

今すぐ始めよう

__CAPGO_KEEP_0__はあなたがプロフェッショナルなモバイルアプリを作るために必要な最良の洞察を与えてくれる

Capgoアプリで2方向のコミュニケーション