sql >> データベース >  >> NoSQL >> Redis

Redis:AmazonEC2とElasticache

    tl; dr:Elasticacheは、redisの単一インスタンスを使用するように強制しますが、これは最適ではありません。

    長いバージョン:

    これは古い投稿(この記事の執筆時点では2年)だと思いますが、ここに表示されていない点に注意することが重要だと思います。

    Elasticacheでは、redisのデプロイはAmazonによって管理されます。これは、彼らがあなたのredisを実行することを選択したにもかかわらず、あなたが立ち往生していることを意味します。

    Redisは、読み取り/書き込みに単一の実行スレッドを使用します。これにより、ロックなしの一貫性が保証されます。ロックとラッチを管理しないことは、パフォーマンスの面で大きな資産です。ただし、残念な結果として、EC2に複数のvCPUがある場合、それらは未使用になります。これは、複数のvCPUを備えたすべてのelasticacheインスタンスに当てはまります。

    デフォルトのelasticacheインスタンスサイズはcache.r3.largeです。 、2つのコアがあります。

    実際、複数のvCPUを使用するインスタンスサイズは多数あります。この問題が顕在化する機会はたくさんあります。

    アマゾンはすでにこの問題を認識しているようですが、彼らはそれを少し否定しているようです。

    これをこの質問に特に関連させる部分は、EC2で(独自のデプロイを管理しているため)マルチテナンシーを実装できることです。 。これは、異なるポートでリッスンしているredisプロセスのインスタンスが多数あることを意味します。レコードのキーのハッシュに基づいてアプリケーションで読み取り/書き込み/書き込みを行うポートを選択することで、すべてのvCPUを活用できます。

    補足として;マルチコアマシンでのrediselasticacheデプロイメントは、インスタンスサイズでのmemcachedelasticacheデプロイメントと比較して常にパフォーマンスが低下している必要があります。マルチテナンシーでは、redisが勝者になる傾向があります。

    更新:

    Amazonは、redisインスタンスCPU、EngineCPUUtilizationに個別のメトリックを提供するようになりました。粗雑な乗算を使用してCPUを計算する必要はなくなりましたが、マルチテナンシーはまだ実装されていません。



    1. Mongoは埋め込みドキュメントを配列に変換します

    2. Redis PubSubサブスクライブメカニズムはどのように機能しますか?

    3. タイムアウトせずにmongoid/railsを使用してmongodbにクエリを実行するにはどうすればよいですか?

    4. 500MBのRedisdump.rdbファイルが約5.0GBのメモリを必要とするのはなぜですか?