この記事はWeChatの公開アカウント「Programmer Sir」から転載したもので、著者はProgrammer Sirです。この記事を転載する場合は、Programmer Sir の公開アカウントにご連絡ください。 分散システム上でのソフトウェア開発は、単一のマシン上でのソフトウェア開発とはまったく異なります。主な違いは、分散システムでは問題が発生する可能性が高く、障害の形態がスタンドアロン システムとは異なる可能性があることです。この記事では、ネットワークの問題とクロックの問題という 2 つの考えられる問題について説明します。 これら 2 つの問題を紹介する前に、大規模なコンピューティング サービスを構築するための 2 つのオプションを見てみましょう。
もちろん、多くの企業はこの 2 つを組み合わせて使用しています。つまり、各マシンのパフォーマンスは良好で、複数の同様のマシンがクラスターを形成してサービスを提供しています。ハイパフォーマンス コンピューティングとクラウド コンピューティングの違いは次のとおりです。
したがって、分散システムを使用して独自のサービスを作成する場合、このサービスはフォールト トレラントである必要があります。言い換えれば、信頼性の低いコンポーネントから信頼性の高いシステムを構築する必要があるということです。ソフトウェア設計段階では、エラー (障害) を処理し、エラー処理を十分に考慮する必要があります。ソフトウェアにエラーが発生した場合に、ソフトウェアでどのような問題が発生するかを知る必要があります。 システムを構築するときは、サービスが完璧で問題が発生しないと想定するのではなく、より多くの起こり得る問題を考慮する必要があります。分散システムでは、あらゆる疑念、悲観、粘り強さが報われます。 (分散システムでは、疑念、悲観、偏執が報われます。) これら2つの問題については以下で紹介します。 1. ネットワークの問題1.1.ネットワークの問題の概要分散ネットワークは信頼性の低いネットワークです。データセンター間やパブリック ネットワーク間のネットワークのほとんどは、非同期パケット スイッチング ネットワーク (非同期パケット ネットワーク) です。このタイプのネットワークでは、ノードはデータ パケットを別のノードに送信できますが、ネットワークはパケットがいつ到着するか、または到着するかどうかを保証しません。したがって、サーバーにリクエストを送信すると、いくつかの問題が発生する可能性があります。
ネットワーク要求失敗図 したがって、送信者が応答を受信しない場合、パケットがサーバーに正常に到達したかどうかさえわかりません。確認する唯一の方法はサーバーの応答を確認することですが、この応答が届かない可能性があります。応答がない場合、サービスがログに記録しない限り、何が問題だったのかを知ることはほぼ不可能です。 この問題に対処する一般的な方法は、タイムアウトを設定することです。つまり、一定時間が経過すると結果を待つのをやめます。ただし、タイムアウトが設定されている場合でも、リクエストがサービスによって処理されたかどうかはわかりませんので注意してください。 ネットワークの問題に対処するということは、必ずしも何らかのアクションを実行するということではなく、ユーザーにエラー情報を返すだけの場合もあります。しかし、ソフトウェアがさまざまなネットワークの問題にどのように対応するかを把握し、これらの処理操作によってデッドロックなどのシステム問題が発生しないようにする必要があります。 1.2.エラーの検出多くのシステムでは、障害のあるノードを自動的に検出する機能が必要です。たとえば、ロードバランサ、シングルリーダー分散データベースなど。ただし、ネットワークの不確実性のため、ノードがまだ動作しているかどうかを検出することは非常に困難です。ネットワークの問題に関する情報を取得すると役立つ状況がいくつかあります。 ノード マシンは引き続き動作しますが、対応するターゲット ポートをリッスンしているプロセスがない場合 (たとえば、プロセスがクラッシュした場合)、システムは TCP 接続を拒否し、RST または FIN パケットを返します。 ノード プロセスがクラッシュした場合でも、ノードは正常に動作しているため、クラスターはリクエストを別のノードにすぐに渡して処理できる場合があります。たとえば、HBase。 データセンター内のネットワーク スイッチにアクセスできる場合は、ハードウェア レベルで問題があるかどうかを確認できます。しかし、通常はスイッチにアクセスできません。 IP アドレスが到達不能な場合は、ICMP 宛先到達不能パケットが返されることがあります。 さらに、TCP 要求は自身で再試行され、アプリケーション層に対して透過的になります。しかし、アプリケーション層で私たち自身で再試行する方がよいでしょう。タイムアウト期間が経過しても結果が得られない場合は、ノードに問題があることを意味します。 1.3.タイムアウト設定タイムアウトを設定するのは簡単なことではありません。設定時間が長すぎると、サーバーが長時間待機しなければならない場合があります。設定が短すぎると誤判定の恐れがあります。サーバーネットワークが一時的に混雑し、速度が遅くなっている可能性があります。一部のロード バランサは、タイムアウトを使用してノードがアクティブかどうかを判断します。ノードの生存状態が誤って判断された場合、サービスのパフォーマンスに影響が出る可能性があります。 システムの理想的なネットワーク遅延が で、サーバーの処理時間が の場合、タイムアウト時間は に設定するのが最適です。しかし、現実には、ほとんどのシステムのネットワーク遅延は無制限です。つまり、ネットワークは可能な限り高速に配信しようと最善を尽くしますが、無限に遅くなる可能性もあります。サービス自体では正確な最大処理時間を示すことはできません。 1.4.ネットワークの輻輳とキューイング車で目的地に到着するまでの時間が不確実なのは、主に車が道路上で待機する時間が不確実であるためです。同様に、ネットワーク パケット遅延の不確実性は、ネットワーク内のパケットのキューイングによっても発生する可能性があります。キューが発生する原因はいくつか考えられます。
ポート1、2、4はポート3にパケットを送信しようとする さらに、TCP が ACK を受信しない場合、要求を再送信します。このプロセスはアプリケーション層に対して透過的ですが、アプリケーション層ではレイテンシが高くなる可能性があります。 サービスのアイドル時間が長い場合、キューに入れられたタスクはすぐに処理され、クリアされます。しかし、サーバーの処理限界に近づくと、キューは急速に長くなり、深刻なネットワーク遅延が発生します。 同時に、クラウド環境では、同じサーバーを共有するサービスが多数ある可能性があるため、ネットワーク遅延を制御することが困難です。そのため、ネットワークが混雑している場合は、他のサービスが混雑を引き起こし、当社のサービスに影響を与える可能性があります。 1.5.まとめクラウド サービスのシナリオでは、現在のテクノロジではネットワークの遅延と信頼性を保証することができないため、ネットワークの輻輳、キューイング、無制限の遅延を考慮する必要があります。タイムアウト期間には固定の基準値は存在せず、実験を通じて設定する必要があります。 次回の記事では引き続き時計問題について紹介します。 (つづく) 参考文献 [1] クレップマン、マーティン。データ集約型アプリケーションの設計: 信頼性、拡張性、保守性に優れたシステムの背後にある重要なアイデア。 「オライリーメディア社」、2017年。 |
<<: 中国のクラウドサービス市場規模は第3四半期に458.5億元に達した
>>: 天一クラウド4.0は、分散型クラウドの実装を促進するために8つの主要な技術革新をアップグレードします
9月21日午前、キングソフトの「モバイルアンチウイルス」共同ボイコットに新たな進展があった。ボイコッ...
1. ボトムインターレースバック接続初期のSEO担当者の多くがこれを行っていたのは、検索エンジンの初...
若い皆さんへ: 逃げない信頼性の高い VPS が必要ですか?いつでもオン/オフ、シャットダウン、削除...
検索エンジン マーケティングは、オンライン マーケティングでは一般的です。検索エンジン マーケティン...
最適化テクノロジーは、オンライン マーケティング企業によってますます重視されています。多くの新しいサ...
インターネットの発展と多くのプラットフォームの改善に伴い、忠実なSEO愛好家として、すべてのウェブマ...
[51CTO.com クイック翻訳] 各 SaaS アプリケーションの背後にあるデータベースには、従...
ウェブサイトがSEOタイトル、キーワード、説明を頻繁に変更する場合、K-edされるのは正常です。以前...
最近、IDCが発表した「中国のソフトウェア定義ストレージおよびハイパーコンバージド市場追跡調査レポー...
ウェブマスターなら誰でも、ウェブサイト構築の目的はウェブサイトを通じて収入を得ることだと考えています...
組織は、アプリケーションとデータをオンプレミスからクラウドに移行する際に直面する主な課題を理解する必...
gfrack は新年のプロモーションを開始しました: 99 元から、8G メモリ\4 コア\120G...
2006 年に設立されたキルギスタンのホスティング会社 Prohost は、主にドメイン名、仮想ホス...
debian11 から 12 へのアップグレードに関する絶対確実なチュートリアル: CentOS の...
ネットワーク ストレージの歴史は、アコーディオンのふいごのようなものです。つまり、大きな拡張の後に大...