Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis :Amazon EC2 contre Elasticache

tl;dr :Elasticache vous oblige à utiliser une seule instance de redis, ce qui n'est pas optimal.

La version longue :

Je me rends compte que c'est un vieux post (2 ans au moment d'écrire ces lignes) mais je pense qu'il est important de noter un point que je ne vois pas ici.

Sur elasticache, votre déploiement redis est géré par Amazon. Cela signifie que vous êtes coincé avec la manière dont ils choisissent d'exécuter votre redis.

Redis utilise un seul thread d'exécution pour les lectures/écritures. Cela garantit la cohérence sans verrouillage. C'est un atout majeur en termes de performances de ne pas gérer les serrures et loquets. La conséquence malheureuse, cependant, est que si votre EC2 a plus d'un vCPU, ils ne seront pas utilisés. C'est le cas pour toutes les instances d'elasticache avec plus d'un vCPU.

La taille d'instance d'elasticache par défaut est cache.r3.large , qui a deux cœurs.

En fait, il existe un certain nombre de tailles d'instance avec plusieurs vCPU. Beaucoup d'opportunités pour que ce problème se manifeste.

Il semble qu'Amazon soit déjà au courant de ce problème, mais ils semblent un peu dédaigneux.

La partie qui rend cela particulièrement pertinent pour cette question est que sur votre EC2 (puisque vous gérez votre propre déploiement), vous pouvez implémenter la multilocation . Cela signifie que vous avez de nombreuses instances du processus redis à l'écoute sur différents ports. En choisissant le port sur lequel lire/écrire/depuis l'application en fonction d'un hachage de la clé de l'enregistrement, vous pouvez tirer parti de tous vos vCPU.

En remarque; un déploiement redis elasticache sur une machine multicœur doit toujours être sous-performant par rapport au déploiement memcached elasticache sur la taille de l'instance. Avec la multilocation, redis a tendance à être le gagnant.

Mise à jour :

Amazon fournit désormais des métriques distinctes pour votre CPU d'instance Redis, EngineCPUUtilization. Vous n'avez plus besoin de calculer votre CPU avec la multiplication bâclée, mais la multilocation n'est toujours pas implémentée.