web-dev-qa-db-ja.com

Redis、配布されているかどうか?

質問1:Redisがすべてのデータをメモリにロードすることで、読み取り/書き込み速度が向上することを知っています。では、メモリサイズが2Gの場合、データセットの最大サイズは2Gを超えてはいけないということですか。データベースに100G以上のデータがあり、サーバーのメモリを32Gより大きくすることはできないので、Redisはもう適していませんか?

質問2:Redisは分散システムですか? Googleを使用してredisのCAPプロパティを検索すると、Redisは分散システムではないと表示されるため、 [〜#〜] cap [〜#〜] とは関係ありません。しかし Wikipedia から、マスタースレーブアーキテクチャ、1つのマスターに多数のスレーブがあると述べています。わかりにくいです。

25
wuchang

質問1に関して、Redisはいくつかの永続性機能を備えたメモリ内ストアです。すべてのデータセットがメモリに収まる必要があります。したがって、単一のインスタンスは、サーバーの最大メモリによって制限されます。これで、複数のサーバーで実行されている複数のRedisインスタンスにデータをシャーディングすることもできます。予算があれば、Redisボックスのセットに100GB-1TBのデータを保存することは完全に可能です。シャーディングは自動ではないことに注意してください。クライアントまたはアプリケーションで実装する必要があります。また、データに対して実行できる操作にいくつかの制約を課します(たとえば、サーバー側では、異なるRedisインスタンスによってホストされている2つのセットの共通部分を計算することはできません)。

質問2に関しては、単一のRedisインスタンスは分散システムではありません。これは、リモートの集中ストアです。複数のRedisインスタンスを使用することで、分散システムを構築できます。日曜大工のアプローチなので、CPまたはAPシステムにすることができます。

単一のインスタンスは、そのアクティビティをスレーブインスタンスに複製できます(したがって、最終的にはマスターと整合性があります)。アプリケーションは、読み取りと書き込みのために常にマスターに接続することを選択できます。その場合、CPシステムを取得する可能性があります。また、マスターに書き込み、すべてのインスタンス(スレーブを含む)から読み取ることができるため、APシステムを取得できます。 Redis上にそのようなシステムを構築するには、かなりの作業が必要になるため、「可能性があります」と言いました。

シャーディングとマスター/スレーブレプリケーションを組み合わせて、必要な分散システムを構築できます。ただし、Redisはこれを行うための基本的なブリックしか提供していません。特に、復元力とHAを処理する(そしてCAP定理のPに対処する)ことはほとんどありません。 IMO、 Redis sentinel は、役割管理のみを対象としているため、HARedis構成をサポートするには単独では不十分です。これをリソースマネージャで補完し、クライアント/アプリケーションに多くのロジックを組み込む必要があります。

Redis Cluster と呼ばれる進行中のプロジェクトがあります。その目的は、最小限のすぐに使用できる分散システムを提供することですが、それでも多くのものが不足しており、まだ実稼働目的には使用できません。 。

既製の分散ストアが必要な場合、Redisはおそらく良いオプションではありません。 Cassandra、Riak、MongoDB、Couchbase、Aerospike、MySQL Cluster、Oracle NoSQLなどのサービスが向上します。ただし、独自の専用システムを構築する場合は、Redisが優れたコンポーネントです。

53
Didier Spezia

ここに便利なリンクがありますRedisクラスターチュートリアル

https://redis.io/topics/cluster-tutorial

memcacheを使用したFacebookソリューションを確認することも有効です。

https://engineering.fb.com/web/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments/

2
kintsukuroi