分散システムの問題: クロックの問題

分散システムの問題: クロックの問題

[[440449]]

この記事はWeChatの公開アカウント「Programmer Sir」から転載したもので、著者はProgrammer Sirです。この記事を転載する場合は、Programmer Sir の公開アカウントにご連絡ください。

前の記事ではネットワークの問題について説明しました。この記事では、さらに別の難しい問題である時計問題を紹介します。

2. 時計の問題

クロックはアプリケーションにとって非常に重要であり、多くの指標をクロックで測定できます。たとえば、1 秒あたりのリクエスト数、平均リクエスト時間など。これらのデータは時間間隔 (期間) で表されます。別のカテゴリには、記事の公開時間、キャッシュの有効期限などが含まれます。これらは時点によって表されます。

分散システムでは、すべてのリクエストがネットワーク遅延の影響を受け、ネットワーク遅延の長さがわからないため、複数のマシンが関与し、各マシンがイベントの発生時刻を記録する場合、ネットワーク遅延が不確実であるため、イベントの発生順序を判断できない可能性があります。イベントが時間的に非常に近い場合、クロックの問題が発生する可能性もあります。

また、各マシンにはハードウェアによって決定される独自のクロックがあるため、多少の違いが生じる可能性があります。クロックの非同期の問題は、ネットワーク タイム プロトコルを通じて軽減できます。また、GPS などのサービスを通じて正確なネットワーク時間を取得することもできます。

2.1.単調時計と時刻時計

現代のコンピュータには、壁時計時間 (通常の時計に対応する時計) と単調時計の少なくとも 2 種類の時計が含まれています。本質的にはどちらも時間を示しますが、目的は異なります。

壁時計の時間

壁掛け時計は、カレンダーに従って現在の日付と時刻を返します。これは、私たちの日常の理解における時計の概念と一致しています。たとえば、Java の System.currentTimeMillis() は、1970 年 1 月 1 日からのミリ秒数を表します。

壁時計は通常、クロック同期に NTP を使用しますが、ローカル クロックが NTP サーバーよりもはるかに速い場合は、誤った時点にジャンプする可能性があります。さらに、壁時計はうるう秒を無視するため、経過時間の計算には適していません。

単調な時計

モノトニック クロックは、タイムアウトやサーバー応答時間などの時間間隔 (期間、時間間隔) を計算するのに適しています。たとえば、Java の System.nanoTime() は単調なクロックを返します。単調クロックでは、時間の数値が常に大きくなります。

NTP は、ローカルの水晶がタイム サーバーよりも速いか遅いことを検出すると、ローカルの水晶の振動周波数を調整します。デフォルトでは、NTP は最大周波数の変更を許可します。ただし、NTP はモノトニック クロックの値を直接調整しません。モノトニッククロックは非常に高い精度を誇り、通常はマイクロ秒単位の時間間隔を測定できます。

単調クロックの値は無意味であり、異なるノード上の単調クロックの値を比較することは、意味と基底が異なる可能性があるため無意味であることに注意してください。単調性は通常、タスクの期間を測定するために使用されます。

2.2.クロック同期と精度

モノトニック クロックは同期する必要はありませんが、ウォール クロックは NTP サーバーに基づいて調整する必要があります。ただし、クォーツ時計自体の振動ドリフトや NTP 同期中のネットワーク遅延などにより、壁時計と NTP が一致しない可能性もあります。データによれば、ネットワーク経由で時刻同期を実行すると、誤差は少なくとも 35 ミリ秒になり、最悪の場合には誤差が 1 秒を超えることもあります。さらに、一部のユーザーは、意図的にローカル クロックを間違った日付に調整する場合があります (たとえば、ゲームの時間チェックを回避するためなど)。そのため、壁掛け時計は非常に不正確になる可能性があります。

問題がクロックの同期に依存する場合は、同期が行われていない場合にアプリケーションにどのような問題が発生するかを考慮する必要があります。

たとえば、よくある問題は、ノード間でのイベントの順序付けです。クロック同期に大きく依存すると、問題が発生する可能性があります。たとえば、次の例をご覧ください。

クロックを使用すると問題が発生する可能性があるもう 1 つの例として、データベースにパーティションごとにマスターが 1 つしかなく、マスターのみが書き込みを受け入れることができる場合が挙げられます。では、他のノードはどのようにして現在のマスターノードがまだマスターノードであることを確認できるのでしょうか? 1 つのアイデアは、マスター ノードが他のノードからリースを取得することです。リースがタイムアウトしていない場合、現在のノードは要求を処理できますが、そうでない場合は処理できません。疑似コードは次のとおりです。

  1. )の間{
  2. リクエスト = getIncomingRequest();
  3.  
  4. // リースには常に少なくとも10 秒残っていることを確認します
  5. リース有効期限が 10000 より短い場合、System.currentTimeMillis() は 10000 に設定されます。
  6. リース = リース.renew();
  7. }
  8.  
  9. リースが有効かどうか
  10. プロセス(リクエスト);
  11. }
  12. }

現在のリースがまだ有効で、残り 13 秒であるが、lease.isValid() に 15 秒かかる場合、process(request) の実行が開始されたときにリースの有効期限が切れており、別のノードがプライマリ ノードになっている可能性があります。この結果、現在のノードはプライマリ ノードではなくなりますが、書き込み要求を処理する操作は引き続き実行されます。これは問題を引き起こします。

この状況は、プロセスの一時停止によって発生する可能性があります。プロセスは、ガベージ コレクション (GC) など、さまざまな理由で一時停止されることがあります。

要約する

分散システムでは、ネットワークの問題やクロックの問題などが発生する可能性があります。さらに、分散システムの主な特徴は部分的な障害です。したがって、分散環境において、部分的な障害を許容できるソフトウェア システムを構築することが私たちの目標です。

これを実現するには、まずエラーを検出できなければなりませんが、これは簡単ではないため、ほとんどの分散アルゴリズムはタイムアウトを利用してサービスが正常かどうかを判断します。しかし、タイムアウトでは、それがネットワークの問題なのか、ノード障害なのかを区別できません。ノード障害が一時的なネットワーク上の理由による障害であると誤って識別された場合、ノードは「誤って非難」され、サービスの不安定性を引き起こす可能性があります。

エラーが検出された後、システムがそのエラーをどのように許容できるかも難しい問題です。分散環境では、各ノードはネットワークを介して通信しますが、ネットワーク自体は信頼できません。したがって、単一のノードでは正しい決定を下せない可能性があり、決定を下すには複数のノードが一緒に投票する必要があります。

参考文献

[1] クレップマン、マーティン。データ集約型アプリケーションの設計: 信頼性、拡張性、保守性に優れたシステムの背後にある重要なアイデア。 「オライリーメディア社」、2017年。

<<:  クラウド ストレージ: 企業はどのようにデータ ストレージの拡張を計画すればよいでしょうか?

>>:  VMware は、企業のデジタル変革を促進する 3 つのシナリオに対応するクラウド ネットワーキング ソリューションでゼロ トラスト接続を構築します。

推薦する

AWS、張文毅氏をグローバル副社長兼中華圏担当エグゼクティブディレクターに任命

2019 年 7 月 11 日、北京、Amazon の子会社である Amazon Web Servi...

外部リンクの王様として知られる機密情報ネットワークから外部リンクを取得する際に従うべき5つの原則があります。

ほとんどのウェブサイトが良いランキングを獲得するには、主に内部リンクと外部リンクに依存します。内部リ...

2011 年のトップ 10 SEO イベントのレビュー

2011年も終わりに近づき、多くのウェブサイトは年末の総括や年末レビューの作成に忙しい時期です。SE...

ウェブマスターは障壁を巧みに越えて優れた仮想ホストを選択する

ウェブサイトの構築には多くの障壁があります。プログラムの選択、ウェブサイトのデザイン、ページレイアウ...

VMware: アプリケーションとインフラストラクチャの近代化を加速するデジタル プラットフォームの構築

2020年、突然の世界的なコロナウイルスの流行により、企業の本来のビジネスモデルが混乱し、あらゆる分...

Google 広告アカウントの最適化: 低予算で高い成果を実現

競争がますます激しくなるにつれて、毎月数十万ドルの広告費を投じる多額の投資を行う企業が多くなっていま...

インターネット企業はどのようにフェスティバル運営を行っているのでしょうか?ストロベリーミュージックフェスティバルでインターネット企業を評価する

テキスト/楊苗山寨会議創設者昨日のストロベリー音楽祭で忙しい一日を過ごした後、ミャオおじさんはいくつ...

この記事では、「エッジコンピューティング」とモノのインターネットの密接な関係について説明します。

モノのインターネットの究極の目標は、あらゆるものを接続することです。しかし、現在のブロードバンドレベ...

Ceph分散ストレージについて学びましょう

序文最近、Kubernetes を学習しながら、ポッドデータの永続化を実現したいと考えています。調査...

SNSマーケティングについて:QQ空間からSNSの商業価値を考える

2006年から現在に至るまで、SNSの普及により、SNSマーケティングはもはや流行の概念ではなくなり...

Zhihu: 有料の知識か広告か?

最近、Duode は深セン証券取引所の成長企業市場に目論見書を提出しました。興味深いことに、この知識...

SEOサービスプロバイダーが生き残り続けるための簡単な分析

かつて、SEO は非常に人気のあるサービス産業でした。当時、Zac、Wang Tong、Zhang ...

知識の支払い、死

5大テレビ局の大晦日コンサートや、大いに期待されていたものの残念ながら失敗に終わったB局のガラなど、...

仮想化プラットフォームの移行と変換における 4 つの典型的な問題

本日は、VMware プラットフォームや PowerVM プラットフォームなどの仮想プラットフォーム...

直帰率の定義と分析の詳細な説明

直帰率は、ウェブサイト分析の基本的な指標です。ページ情報がユーザーにとって効果的であるかどうかを評価...