- redisレプリケーションとredisシャーディングの違いを知っている人はいますか?
- 彼らは何のために使うのですか?Redisはデータをメモリに保存しますが、これはレプリケーション/シャーディングにどのように影響しますか?
- 両方を一緒に使用することは可能ですか?
3 に答える
シャーディングはほぼレプリケーションのアンチテーゼですが、それらは直交する概念であり、連携してうまく機能します。
分割とも呼ばれるシャーディングは、キーごとにデータを分割します。ミラーリングとも呼ばれるレプリケーションは、すべてのデータをコピーすることです。
シャーディングは、パフォーマンスを向上させ、任意の 1 つのリソースのヒットとメモリ負荷を削減するのに役立ちます。レプリケーションは、読み取りの可用性を高めるのに役立ちます。複数のレプリカから読み取る場合、すべてのリソースのヒット率も低下しますが、すべてのリソースのメモリ要件は変わりません。スレーブに書き込むことはできますが、レプリケーションはマスター -> スレーブのみであることに注意してください。したがって、この方法で書き込みをスケーリングすることはできません。
[1:Apple]、[2:Banana]、[3:Cherry]、[4:Durian] というタプルがあり、2 台のマシン A と B があるとします。シャーディングを使用すると、鍵 2,4 をマシンA; マシン B にキー 1、3 を格納します。レプリケーションでは、キー 1、2、3、4 をマシン A に格納し、キー 1、2、3、4 をマシン B に格納します。
シャーディングは通常、キーに対して一貫したハッシュを実行することによって実装されます。上記の例は、次のハッシュ関数 h(x){return x%2==0?A:B} で実装されました。
概念を組み合わせるために、各シャードを複製する場合があります。上記の場合、マシン A のすべてのデータ (2、4) をマシン C に複製し、マシン B のすべてのデータ (1、3) をマシン D に複製することができます。
特定のクロスキー関数は機能しなくなりますが、任意のキー値ストア (Redis はその一例にすぎません) がシャーディングをサポートします。Redis はすぐに使用できるレプリケーションをサポートしています。
簡単に言えば、2 つの概念の基本的な違いは、シャーディングは書き込みのスケーリングに使用され、レプリケーションは読み取りのスケーリングに使用されるということです。Alex が既に述べたように、レプリケーションも HA を実現するためのソリューションの 1 つです。
はい、クラスター内のノード間でシャードを複製する方法を検討する場合、通常は両方とも一緒に使用されます。
3 番目の質問に関しては、RAM フラッシュ オプションの代わりに、Redis Append Only File (AOF) を使用することをお勧めします。(書き込み速度の点で) わずかなコストで、書き込みの信頼性が大幅に向上します。これは mysql のバイナリ ログによく似ています。1 fsync/秒の使用が推奨されるオプションです。