tl;dr:Elasticache vás nutí používat jedinou instanci redis, což není optimální.
Dlouhá verze:
Uvědomuji si, že se jedná o starý příspěvek (2 roky v době psaní tohoto článku), ale myslím si, že je důležité poznamenat bod, který zde nevidím.
Na elasticache vaše nasazení redis řídí Amazon. To znamená, že jste uvízli v tom, jak se rozhodnou spustit váš redis.
Redis používá pro čtení/zápis jediné vlákno. To zajišťuje konzistenci bez uzamčení. Z hlediska výkonu je hlavní výhodou, že nelze spravovat zámky a západky. Nešťastným důsledkem však je, že pokud má váš EC2 více než 1 vCPU, zůstanou nevyužity. To platí pro všechny instance elasticache s více než jedním vCPU.
Výchozí velikost instance elasticache je cache.r3.large
, který má dvě jádra.
Ve skutečnosti existuje řada velikostí instancí s více vCPU. Mnoho příležitostí, aby se tento problém projevil.
Zdá se, že Amazon už o tomto problému ví, ale zdá se, že to trochu odmítá.
Část, kvůli které je to pro tuto otázku obzvláště důležité, je to, že na vašem EC2 (protože si spravujete vlastní nasazení) jste schopni implementovat multi-tenancy . To znamená, že máte mnoho instancí procesu redis naslouchajícího na různých portech. Výběrem portu pro čtení/zápis do/ze v aplikaci na základě hash klíče záznamu můžete využít všechny své vCPU.
Jako okrajová poznámka; nasazení redis elasticache na vícejádrovém stroji by mělo vždy podléhat ve srovnání s nasazením elasticache v memcached na velikosti instance. S vícenájmy bývá vítězem redis.
Aktualizace:
Amazon nyní poskytuje samostatné metriky pro váš CPU instance redis, EngineCPUUtilization. Již nemusíte počítat svůj CPU s chatrným násobením, ale multi-tenancy stále není implementována.