web-dev-qa-db-ja.com

マルチコアCPUでのRedisパフォーマンス

交差やユニオンなどの集合演算に関する多くの計算を中間キャッシュストレージに提供するために、redisを探しています。

RedisのWebサイトを調べたところ、redisはマルチコアCPU用に設計されていないことがわかりました。私の質問は、なぜそうなのですか?

また、「はい」の場合、マルチコアCPUでredisを使用してCPUリソースを100%使用する方法を教えてください。

22
Love Hasija

redisのWebサイトを確認したところ、redisがマルチコアCPU用に設計されていないことがわかりました。私の質問は、なぜそうなのですか?

それは設計上の決定です。

Redisはepoll/kqueueでシングルスレッド化され、I/O同時実行性の観点から無期限にスケーリングされます。-@ antirez(Redisの作成者)

イベント駆動型アプローチを選択する理由は、スレッド間の同期がソフトウェア(コードの複雑さ)とハードウェアレベル(コンテキストスイッチング)の両方で犠牲になるためです。さらに、Redisのボトルネックは通常networkであり、CPUではないことを追加します。一方、シングルスレッドアーキテクチャには独自の利点があります(たとえば、原子性の保証)。

したがって、イベントループは、Redisのような efficientscalable システムの良い設計のように見えます。

また、「はい」の場合、マルチコアCPUでredisを使用してCPUリソースを100%使用するにはどうすればよいですか

複数のコアにまたがるRedisのアプローチは、shardingで、主に Twemproxy と一緒に使用されます。

ただし、何らかの理由で引き続きマルチスレッドアプローチを使用したい場合は、 Thredis を参照してください。ただし、作成者が行った影響を理解していることを確認してください(レプリケーションマスターとして使用することはできません)。 、 例えば)。

32
Agis

Redisサーバーはシングルスレッドです。ただし、Redisノード(マスターまたはスレーブ、あるいはその両方)を使用して、CPUリソースの使用率を100%にすることができます。

  1. 読み取り操作は、単一マスターのRedisマスター/スレーブ構成を使用してスケーリングできます。マスターノードに使用されるCPUコアの1つとスレーブに使用されるその他すべてのCPUコア。

  2. 書き込み操作は、Redisマルチマスタークラスター構成を使用してスケーリングできます。複数のCPUコアがマスターノードに使用され、その他すべてがスレーブに使用されます。

Redisson -Redis Java Redisクラスターの完全なサポートを提供するクライアント。AWSElasticacheおよびAzure Redis Cacheで動作します。マスター/スレーブの検出とトポロジーの更新が含まれます。

2