データセンター内のレイテンシはどのくらいですか?私はこれに、数桁の差があると仮定して尋ねます


17

私はちょうど良い答えを見つけることができない何かを理解しようとしています。

データセンターにあるREDISキャッシュ(または外部メモリ内キャッシュ)と同じデータセンターにあるアプリケーションサーバーがある場合、データを読み取るためのネットワーク接続の速度(レイテンシ、スループット)はどうなりますかこれらの2つのマシンの間で?

たとえば、ネットワークの「速度」は、REDISのキャッシュからデータをシークするRAMの速度よりも少なくとも1桁高速ですか?

私の究極の質問は、これらすべてをREDISのメモリに保存して、実際に何らかのユーティリティを提供することですか?REDISがこれをすべてSSDにキャッシュしている場合とは対照的ですか?メモリは高価です。ネットワークが実際にデータセンター内のボトルネックでない場合、メモリには価値があります。そうでなければ、そうではありません。

私の一般的な質問は、データセンターの膨大な未知数と一般化と分散の違いにもかかわらず、コンピューターシステムのメモリーレイテンシーと、DC待ち時間を短縮しても、パフォーマンスが大幅に向上することはありませんか?多くの変数があることがわかりますが、どれくらい近いですか?これらの変数が問題になるほど近いですか?たとえば、双曲線的なスタンスを取ると、テープドライブはネットワークよりも非常に遅くなるため、テープはキャッシュには適していません。


1
また、トランザクションごとのラウンドトリップの数にも依存します。これは多くの場合、一連のクエリでシリアル化される実際の問題です。より複雑なクエリインターフェイス、サーバー側の手順、またはdenormalizwdキャッシュを使用すると、影響を軽減できます。
eckes

回答:


19

「誰もが知っておくべきレイテンシーチャート」には、次のようないくつかのバージョンがあります。

問題は、実際には、待ち時間だけではありません。要因の組み合わせです。

それでは、データセンター内のネットワーク遅延は何ですか?レイテンシーは、1ms未満の「常に」と言えます。RAMよりも高速ですか?いいえ。RAMに近いですか?そうは思いません。

しかし、問題は残っています。それは関連性があります。それはあなたが知る必要があるデータムですか?あなたの質問は私にとって理にかなっています。すべてにコストがかかるので、すべてのデータがRAMにとどまるようにRAMを増やす必要がありますか、ディスクから時々読み込むことができます。

あなたの「仮定」は、ネットワークの遅延がSSDの速度よりも高い(遅い)場合、すべてのデータをRAMに入れてもネットワークの速度が低下するため、得られないことです。

そして、それはそう見えるでしょう。ただし、同時実行性も考慮する必要があります。データに対する1,000のリクエストを一度に受信した場合、ディスクは1,000の同時リクエストを実行できますか?もちろん、そうではないので、1,000件のリクエストを処理するのにどれくらい時間がかかりますか?RAMと比較して?

重い負荷などの単一の要因に要約するのは困難です。しかし、はい、単一の操作を実行している場合、ネットワークの遅延は、おそらくSSDとRAMの違いに気付かないほどです。

12Gbpsディスクが市場に登場するまで、ディスクがボトルネックであったため、1つのストリームで10Gbpsネットワークリンクが過負荷になることはありませんでした。

しかし、ディスクは他の多くのことを行っていること、プロセスがマシン上の唯一のプロセスではないこと、ネットワークが異なることを実行していることなどを忘れないでください。

また、すべてのディスクアクティビティがネットワークトラフィックを意味するわけではありません。アプリケーションからデータベースサーバーへのデータベースクエリは、ごくわずかなネットワークトラフィックです。データベースサーバーからの応答は、非常に小さい(単一の数値)場合もあれば、非常に大きい(複数のフィールドを持つ数千行)場合もあります。操作を実行するには、サーバー(データベースサーバーであるかどうかに関係なく)が複数のディスクシーク、読み取り、書き込みを行う必要がありますが、ネットワーク経由で非常に小さなビットを送り返すだけです。1対1のネットワークディスクRAMではありません。


これまでのところ、私はあなたの質問のいくつかの詳細、特にRedisの部分を避けました。

Redisは、データベース、キャッシュ、およびメッセージブローカーとして使用されるオープンソース(BSDライセンス)のメモリ内データ構造ストアです。- https://redis.io/

OK、つまりすべてがメモリ内にあるということです。申し訳ありませんが、この高速SSDドライブはここでは役に立ちません。Redisはデータをディスクに保持できるため、再起動後にRAMにロードできます。これは、データを「失わない」か、再起動後にコールドキャッシュを再作成する必要があるだけです。そのため、この場合は、RAMを使用する必要があります。データセットを格納するのに十分なRAMが必要です。十分なRAMがなく、OSが使用すると思いますswap-おそらく良い考えではありません。


ありがとう。これは確かに便利です。確かに、ここには多くの文脈上の違いがあり、これには関係があります。重い負荷をしばらく無視すると、実際にはネットワーク遅延がボトルネックであるため、SSDとRAMの追加の遅延は重要ではありません。しかし、今、重い負荷を考慮に入れると、RAMに対するSSDのレイテンシーの差が大きくなり始め、RAMが輝きます。これが当時のことですか?
ニーラジュムラルカ

1
重い負荷の単一の要因にそれを煮詰めるのは難しいです。ただし、1つの操作を実行している場合、ネットワークのレイテンシは、SSDとRAMの違いにおそらく気付かないほどです。12Gbpsディスクが市場に登場するまで、ディスクがボトルネックであったため、1つのストリームで10Gbpsネットワークリンクが過負荷になることはありませんでした。しかし、ディスクは他の多くのことを行っていること、プロセスがマシン上の唯一のプロセスなどではないことを忘れないでください。
ETL

1
また、待ち時間だけでなく他の多くの要因を考慮する必要があります。特に、ほとんどの実際のサービスは異なるマシンでサーバープログラムの複数のインスタンスを実行する必要があるため、「RAM内のすべて」は通常、実用的なオプションではありません。
クリリス

ただし、10gネットワークリンクはローエンドです。サーバーはバックボーンに200ギガビットで接続されています(はい、2x100gリンク)。
トムトム

3

コンピューターシステムには多くのキャッシュ層があります。アプリケーション層に1つを挿入すると、APIとデータベースクエリをキャッシュするのに役立ちます。そして、おそらくユーザーセッションのような一時的なデータ。

Redisのようなデータストアは、データベースを使用するのと同じように、ネットワーク(高速)またはUNIXソケット(さらに高速)でこのようなサービスを提供します。

アプリケーションの実際のパフォーマンスを測定する必要がありますが、例を作りましょう。一般的なユーザーリクエストが、それぞれ50ミリ秒かかる5つのAPIクエリを実行するとします。250ミリ秒は、ユーザーが検出可能な遅延です。結果のキャッシュとは対照的。キャッシュが町の異なるアベイラビリティーゾーンにある場合でも(最適ではありません)、ヒットはおそらく最大で10ミリ秒です。これは5倍のスピードアップになります。

実際には、データベースとストレージシステムにも独自のキャッシュがあります。ただし、通常は、データベースエンジンとストレージシステムレイヤーを再度通過するよりも、プリフェッチされた結果を取得する方が高速です。また、キャッシングレイヤーは、背後のデータベースの負荷を大幅に軽減できます。

実稼働環境でのこのようなキャッシュの例については、Architectureに関するStack Overflowインフラストラクチャブログをご覧ください。何十億ものRedisヒットを生成する数十万のHTTPリクエストは非常に重要です。

メモリは高価です。

アクセス時間が100 nsのDRAMは、ソリッドステートの永続ストレージよりも約100倍高速です。このパフォーマンスでは比較的安価です。多くのアプリケーションでは、RAMを少し増やすと、貴重な速度と応答時​​間が得られます。


これら5つのAPIクエリのそれぞれがそれぞれ50ミリ秒かかることをどのように計算したかを明確にしてください。データベースをヒットしてクエリを実行し、結果セットを計算するアプリケーションを装って、クエリ文字列自体をキーとしてキャッシュし、その結果のキャッシュされたコピーを持っている町全体のキャッシュをヒットするだけですセットする?
ニーラジュムラルカ

1
私はそれらの数字を作りましたが、はい。クエリを実行して結果を再度計算すると、事前に計算された結果を取得するよりも遅くなる可能性があります。Redisのような実装は、単純さと速度のためにメモリ内にある傾向があります。IPネットワークまたはUNIXソケットトランスポートの通過も非常に高速です。とは言っても、このキャッシングはすべての設計に必要なわけではありません。
ジョンマハワルド

わかった。私は多かれ少なかれ理解していると思います。常にではありませんが、多くの場合、データセンターから同じ米国の州(またはカナダの州など)にある近くのキャッシュに移動することさえあるようです(おそらく地域は良い意味です)実際にキャッシュヒットが発生する場合、独自のローカルデータベースからアルゴリズム的に値を再計算しようとするプロセスよりも大きな利点があります。しかし、その後、リモートに存在する可能性のあるキャッシュは、メモリ内にあるため多くの価値を提供しません。SSDベースの場合もあります。
Neeraj Murarka

1
リモートデータセンターは最悪の場合です。理想的には、キャッシュ層はクライアントから1ミリ秒未満です。おそらく同じアベイラビリティーゾーン、または同じホスト上です。必要に応じて、永続ストレージにキャッシュできます。または、そのソリッドステートストレージをプライマリデータベースに使用し、すべてのクエリを高速化し、キャッシュ層を必要としないこともできます。複数の可能なデザインがあります。
ジョンマホワルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.