良い答えが見つからないところを見つけようとしています。
データセンターにあるREDISキャッシュ(または一部の外部インメモリキャッシュ)と同じデータセンターにあるアプリケーションサーバーを言った場合、データを読み取るためのネットワーク接続の速度(レイテンシ、スループット)はこれらの2つのマシン間で?
たとえば、ネットワークの「速度」は、REDIS上のキャッシュからデータを探しているRAM)の速度よりも少なくとも1桁速いでしょうか?
私の究極の質問は、これをREDISのすべてのメモリに置いて、実際にユーティリティを提供しているのでしょうか。 REDISが代わりにこれをすべてSSDにキャッシュしていた場合とは対照的ですか?メモリは高価です。ネットワークが実際にデータセンター内のボトルネックではない場合、メモリに価値があります。そうでなければ、それはしません。
私の一般的な質問は、データセンターの膨大な未知数と一般化の不可能性、および分散にもかかわらず、コンピューターシステムのメモリレイテンシと、DCメモリのレイテンシが短縮されてもパフォーマンスが大幅に改善されないことはわかりますか?多くの変数があることがわかりますが、どれだけ近いですか?これらの変数が重要であるほど近いですか?たとえば、テープドライブはネットワークよりも遅いため、テープはキャッシュには理想的ではありません。
「誰もが知っておくべきレイテンシチャート」には、次のようないくつかのバージョンがあります。
問題は、実際には、待ち時間だけではありません。それは要因の組み合わせです。
それでは、データセンター内のネットワークレイテンシはどのくらいですか?レイテンシは、「常に」1ミリ秒未満であると言えます。 RAMよりも高速ですか?いいえ。RAMに近いですか。私はそうは思いません。
しかし、問題は残っています、それは関連しています。それはあなたが知る必要のあるデータムですか?あなたの質問は私には意味があります。すべてにコストがかかるため、より多くのRAMを取得して、すべてのデータがRAM=にとどまることができるようにする必要があります。
あなたの「仮定」は、ネットワークの待ち時間がSSDの速度よりも高い(遅い)場合、すべてのデータをRAMネットワーク上。
そして、それはそう表示されます。ただし、同時実行性も考慮する必要があります。データに対する1,000のリクエストを一度に受け取った場合、ディスクは1,000の同時リクエストを実行できますか?もちろん、そうではありません。1,000件のリクエストに対応するにはどれくらい時間がかかりますか? RAMと比較して?
重い負荷などの単一の要因に要約することは困難です。しかし、はい、単一の操作を行っている場合、ネットワークのレイテンシは、SSDとRAMの違いにおそらく気付かないほどのものです。
12Gbpsディスクが市場に登場するまでは、ディスクがボトルネックだったため、10Gbpsネットワークリンクが単一のストリームによって過負荷になることはありませんでした。
ただし、ディスクが他の多くのことを実行していること、プロセスがマシン上の唯一のプロセスではないこと、ネットワークが異なることを実行することなどを覚えておいてください。
また、すべてのディスクアクティビティがネットワークトラフィックを意味するわけではありません。アプリケーションからデータベースサーバーへのデータベースクエリは、ごくわずかなネットワークトラフィックです。データベースサーバーからの応答は、非常に小さい(単一の数値)場合も、非常に大きい(複数のフィールドを持つ数千の行)場合もあります。操作を実行するには、サーバー(データベースサーバーかどうかに関係なく)が複数のディスクシーク、読み取り、書き込みを行う必要がある場合がありますが、ネットワーク経由で送信されるのは非常に小さなビットだけです。間違いなく、1対1のネットワークディスクRAMではありません。
これまでのところ、質問の詳細(特に、Redisの部分)は避けました。
Redisは、オープンソース(BSDライセンス)のインメモリデータ構造ストアであり、データベース、キャッシュ、メッセージブローカーとして使用されます。 - https://redis.io/
OK、つまり、すべてがメモリにあるということです。この高速SSDドライブは、ここでは役に立ちません。 Redisはデータをディスクに永続化できるため、再起動後にRAM=にロードできます。これは、データを「失わない」か、再起動後にコールドキャッシュを再入力する必要があるだけです。したがって、この場合、何があってもRAMを使用する必要があります。十分なRAMデータセットを含めるために必要です。不十分なRAMおよびあなたのOSはswap
を使うと思います-おそらく良い考えではありません。
コンピュータシステムには多くのキャッシュ層があります。 1つをアプリケーション層に挿入すると、APIとデータベースのクエリをキャッシュするのに役立ちます。そして、おそらくユーザーセッションのような一時的なデータ。
Redisのようなデータストアは、データベースを使用する場合と同様に、ネットワーク(高速)またはUNIXソケット(さらに高速)を介してこのようなサービスを提供します。
アプリケーションの実際のパフォーマンスを測定する必要がありますが、例を挙げましょう。一般的なユーザーリクエストが、それぞれ50ミリ秒かかる5つのAPIクエリを実行するとします。 250ミリ秒はユーザーが検出できる待ち時間です。結果のキャッシュとは対照的です。キャッシュが町全体の異なるアベイラビリティーゾーンにある(最適ではない)場合でも、ヒットはおそらく最大で10ミリ秒です。これは5倍のスピードアップになります。
実際には、データベースとストレージシステムにも独自のキャッシュがあります。ただし、通常、プリフェッチされた結果を取得する方が、データベースエンジンとストレージシステムのレイヤーを再度通過するよりも高速です。また、キャッシングレイヤーは、その背後にあるデータベースの負荷を大幅に軽減できます。
本番環境でのこのようなキャッシュの例については、 アーキテクチャに関するスタックオーバーフローインフラストラクチャのブログ をご覧ください。何十億ものRedisヒットを生成する何十万ものHTTPリクエストは非常に重要です。
メモリは高価です。
100 nsのアクセス時間でのDRAMは、ソリッドステートのパーマネントストレージより約100倍高速です。このパフォーマンスでは、比較的安価です。多くのアプリケーションでは、もう少しRAMを使用すると、貴重な速度と応答時間が得られます。