Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis:Amazon EC2 vs. Elasticache

tl;dr:Elasticache zwingt Sie dazu, eine einzelne Instanz von Redis zu verwenden, was suboptimal ist.

Die lange Version:

Mir ist klar, dass dies ein alter Beitrag ist (2 Jahre zum Zeitpunkt des Schreibens), aber ich denke, es ist wichtig, einen Punkt zu beachten, den ich hier nicht sehe.

Bei Elasticache wird Ihre Redis-Bereitstellung von Amazon verwaltet. Das bedeutet, dass Sie daran gebunden sind, wie sie Ihre Redis ausführen.

Redis verwendet einen einzelnen Ausführungsthread für Lese-/Schreibvorgänge. Dies gewährleistet Konsistenz ohne Sperren. Es ist ein großer Vorteil in Bezug auf die Leistung, Schlösser und Verriegelungen nicht zu verwalten. Die unglückliche Konsequenz ist jedoch, dass, wenn Ihr EC2 über mehr als 1 vCPU verfügt, diese ungenutzt bleiben. Dies gilt für alle Elasticache-Instanzen mit mehr als einer vCPU.

Die Standardgröße der Elasticache-Instanz ist cache.r3.large , die zwei Kerne hat.

Tatsächlich gibt es eine Reihe von Instanzgrößen mit mehreren vCPUs. Viele Gelegenheiten für dieses Problem, sich zu manifestieren.

Es scheint, dass Amazon sich dieses Problems bereits bewusst ist, aber sie scheinen es etwas abweisend zu sehen.

Der Teil, der dies für diese Frage besonders relevant macht, ist, dass Sie auf Ihrem EC2 (da Sie Ihre eigene Bereitstellung verwalten) in der Lage sind, Mandantenfähigkeit zu implementieren . Dies bedeutet, dass viele Instanzen des Redis-Prozesses an verschiedenen Ports lauschen. Indem Sie basierend auf einem Hash des Datensatzschlüssels auswählen, welcher Port in der Anwendung gelesen/geschrieben werden soll, können Sie alle Ihre vCPUs nutzen.

Als Randnotiz; Eine Redis-Elasticache-Bereitstellung auf einem Multi-Core-Computer sollte im Vergleich zu einer Memcache-Elasticache-Bereitstellung auf der Instanzgröße immer unterdurchschnittlich sein. Bei Mandantenfähigkeit ist Redis in der Regel der Gewinner.

Aktualisieren:

Amazon stellt jetzt separate Metriken für Ihre Redis-Instance-CPU, EngineCPUUtilization, bereit. Sie müssen Ihre CPU nicht mehr mit der schlampigen Multiplikation berechnen, aber Mandantenfähigkeit ist immer noch nicht implementiert.