シンプルなクラスターでRedisのパフォーマンスを向上させる

画像



Redis nosqlデータベースに精通しているこのデータベースは、ほぼすべての記事に当てられており、このデータベースが非常に高速に動作するというステートメントに出会います。 RAMにデータを保存するおかげで、速度は本当に驚くべきものです。



しかし、Redisが負荷から引き裂かれる状況を想像してください。 この状況は珍しくありません。 それではどうしますか?







複製



最初に思い浮かぶのは、マスタースレーブバンドルを作成して別のデータベースを追加し、読み取り操作をそのデータベースにリダイレクトすることです。



長所:


ベースを追加して、レプリケーションをすばやく構成できます。 Redisをインストールし、いくつかのコマンドを実行し、データが同期されるのを待って、レプリカを使用します。



読み取り操作の数は、スレーブベースの数に比例して増加します。



短所:


コードを変更する必要があります-読み取り/書き込み操作を必要なデータベースに分散するためのプロキシクラスを作成します。



書き込み操作の数は変更されません。 スレーブベースからは読み取りしかできません。 書き込み操作は、マスターベースでのみ実行できます。 Redisがあまりにも多くの録音コマンドから切断された場合、加速は行われません。



クラスター



2番目の明らかな解決策は、Redisデータベースのクラスターを作成することです。



クラスターの利点:


読み取りおよび書き込み操作の数は、クラスター内のデータベースの数に比例して増加します。



クラスターは、新しいベース用に簡単に構成できます。



クラスター内のRedisデータベースのレプリケーションを追加するのは非常に簡単です。 したがって、読み取り操作の最大数を増やします。



ベースのサイズは大幅に大きくなります。 32 GBのメモリを搭載した8台のサーバーが1台よりもはるかに優れていることに同意します。



必要に応じて、単純にベースのサイズを増やします。 8台のサーバーを32 GBのメモリで64 GBの8台のサーバーに交換すると、データベースの最大サイズがすぐに128 GB増加します(Redisが迅速に動作するため、RAMの量はデータベースのサイズの少なくとも2倍であることを忘れないでください)。 これは、1つのサーバーを大量のRAMを備えた別のサーバーに置き換えるよりもはるかに優れています。



クラスターの短所:


コードを変更する必要があります-クラスターノード間で読み取り/書き込み操作を分散するためのプロキシクラスを作成します。



このようなソリューションが既存のデータベースに実装されている場合、クラスターに含まれるデータベースにデータを移行する必要があります。 これは簡単な作業ではなく、多くの労力と時間を必要とします。 各ポータブルベースには独自のロジックがあるため、それぞれのケースで個別のソリューションを作成する必要があります。 完成したデータベースをクラスターに転送するよりも、最初にデータベースからクラスターを作成して作業で使用するのが最も簡単です。



2年間、負荷の高いプロジェクトのメインデータベースとしてRedisを使用しています。 (モバイルデバイス用のゲーム)。 この間ずっと、Redisの作成者は、Redisのクラスター化されたソリューションをリリースすることを約束しています。 彼らは約束された3年を待っていました、そして、待っていない人は私を含めて彼らの決定を書きます。



独自のクラスターを作成することに成功しました。 私の経験が、プロジェクトでRedisのパフォーマンスを向上させようとしている人々に役立つことを願っています。 すぐにデフォルトで8ノードを使用すると言います。 1つのredis-baseのパフォーマンスが十分でない場合、8つのredis-baseを完全にロードすることはできませんでした。



いくつかのプロジェクトで負荷がかかった2年間のクラスター運用は、その実行可能性を示しています。



興味のある方は、githubからサンプルコードをダウンロードして使用できます-github.com/dfer/myredis



PS



2年前、Redisデータベースのパフォーマンスの問題を解決してredisクラスターを作成する方法を考えていたときに、次の2つの記事が役に立ちました。



oldblog.antirez.com/post/redis-presharding.html



blog.zawodny.com/2011/02/26/redis-sharding-at-craigslist



私のソリューションと上記の記事が、プロジェクトでパフォーマンスの低いRedisに直面している人々に役立つことを願っています。



All Articles