この記事はWeChatの公開アカウント「Lean Coder」から転載したもので、著者はXiaomajiaです。この記事を転載する場合は、Lean Coder の公開アカウントにご連絡ください。 概要1. クラウドネイティブシステムの回復力パターン
2. 弾力性モード: 下流のリクエストメッセージに基づいて動作する 3. 短時間中断時の応答コード 4. ポリークラシック戦略 5. Golang サーキットブレーカーパターン ドイツの哲学者ニーチェはかつてこう言いました。「私を殺さないものは私を強くする。」 01クラウドネイティブシステムの弾力性モデル今回は、最近の仕事の経験も踏まえて、引き続きクラウドネイティブの弾力性モデル(スケールではなく回復力)についてお話しします。これは「現代のクラウドネイティブ設計コンセプト」への回答でもあります。 「分散アーキテクチャでは、サービス B がサービス A からのネットワーク要求に応答しない場合はどうなるでしょうか? サービス C が一時的に利用できなくなり、C を呼び出す他のサービスがブロックされた場合はどうすればよいですか? ネットワークの問題またはサービス自体の理由により、サービス B と C は時間内に応答できず、サービス A によって開始された要求はブロックされます (B と C が応答するまで)。このとき、大量のリクエストが殺到すると、サービス A のスレッドリソースが枯渇し、サービス A の処理性能に大きな影響が出てしまい、ダウンストリームが依存する外部クライアント/バックエンド srv にも影響が出てしまいます。 障害は広がり、連鎖反応を引き起こし、分散構造全体に壊滅的な結果をもたらします。これはサービス障害の「雪崩効果」です。 サービス B と C が利用できない場合、ダウンストリーム クライアント/バックエンド srv は何ができますか? 客観的に見ると、リクエストは失敗し、事前に決定された弾性戦略(再試行/回路切断)が実行されます。 02 エラスティックモード: ダウンストリームリクエストメッセージに基づく動作レジリエンス モードとは、障害が発生してもシステムが正常な動作を維持する能力です。失敗を避けるのではなく、失敗を受け入れてそれに対処しようとすることです。 Polly は、開発者が流暢かつスレッドセーフな方法で回復力戦略を表現できるようにする、包括的な .NET 回復力および一時エラー処理ライブラリです。
一般的に、エラスティック ポリシーはさまざまな要求メッセージ (外部クライアント要求またはバックエンド サービス要求) に適用されます。 その目的は、一時的に利用できないサービス要求を補うことです。 03 短時間中断時の応答コード
正確で標準化された応答コードは、開発者ができるだけ早く障害を特定するのに役立ちます。 失敗戦略を実行するときは、失敗によって発生した操作のみを再試行し、403UnAuthorized を再試行しないなど、より対象を絞ることもできます。 04ポリーの定番戦略
同時にタイマーが起動し、ブレーカーは半開モードになります(少数の要求を発行し、要求が成功すると障害が修復されたとみなされ、ブレーカーは閉状態になり、障害カウンターがリセットされます)。
アプリケーションに複数の HTTP 呼び出しがある場合、上記の従来の記述方法に従うと、コードには多くの重複した無関係なビジネス コードが混在することになります。 バッチ HttpClient の弾力的な戦略をエレガントに実装する方法について考えます。 ここでは 2 つの方法を紹介します。 ① Blog Parkの有名ブロガーEdisonchou: AOPフレームワークを使ってPollyを動的に織り込む ② 匿名の専門家が、リフレクションと構成を使用してPollyHttpClientServiceCollectionExtension拡張クラスを実装しました。これは、構成ファイルでHttpClientNameを指定することをサポートしています。
05Golang サーキットブレーカー
func NewCircuitBreaker(st Settings) *CircuitBreaker 回路ブレーカー オブジェクトをインスタンス化します。パラメータは次のとおりです。
次の例は、Google Web サイトをリクエストするときに、失敗率が 60% に達すると、「オープン」状態に切り替わり、同時に 60 秒のタイマーが開始されることを示しています。 60 秒後、「半オープン」状態になります (1 つのリクエストを開始できるようになります)。成功した場合、回路ブレーカーは「閉」状態になります。失敗した場合は、「オープン」状態に戻り、60 秒のタイマーをリセットします。
要約するこの記事では、クラウド ネイティブ システムの弾力性モデルについて説明します。弾力性モデルとは、事前設定された戦略を通じて障害に直接対処し、一時的に利用できない要求を補正し、障害の伝播を回避することです。これは、マイクロサービスの高可用性と弾力的なフォールト トレランスを実現するために非常に重要です。 |
<<: Springboot2.x AOPはキャッシュロックと分散ロックを実装します
>>: クラウドコンピューティングの運命: 世界が 1 台のコンピューターに統合され、サーバーレス運用がサポートされる
2013 年 2 月 19 日に Baidu の「青大根アルゴリズム」が正式にリリースされて以来、中...
6月から、百度は大規模な低品質サイトの取り締まりを開始しました。ウェブマスターのウェブサイトがどれだ...
Yunlifang.cn(www.yunlifang.cn)は、成都アルファクラウドネットワークテク...
今日、A5で「301を使用して404エラーを外部リンクに変える方法に関する記事」という記事を見ました...
以前、Xiwei Qiangwei 氏が紹介した記事「検索トラフィックこそが王様、トラフィックこそが...
3D ポイント クラウドは、3D 認識技術で広く使用されています。自動運転や医療画像処理など、一部の...
みなさん、こんにちは。皆さんと私の経験を共有してから長い時間が経ちました。最近、私は内部ウェブサイト...
現在、多くの企業が Kubernetes と関連テクノロジーを使用してワークロードをクラウドに移行し...
[[393678]]この記事はWeChatの公開アカウント「New Vision of Progra...
[51CTO.com からのオリジナル記事] クラウドコンピューティングの 3 大サービスモデルのひ...
4月25日、百度のウェブマスターLeeが外部リンクの不正行為を判定する方法を発表した後、ウェブマスタ...
今朝、私に悪いことが起こりました。私が担当していた湖北成利公式サイトの販売サイトがランキング0位にな...
デジタルオーシャンから低価格で高性能な VPS を購入したい場合、まず知っておくべきことは、デジタル...
最近、Baiduは大きなアップデートを行っておらず、ウェブマスターは非常に落ち着いていますが、多くの...
実は、ultravps.eu は Hostcat に何度も登場しています。ドイツの老舗ホスティング会...