Performance at Scale with Amazon ElastiCache

Overview

  • ElastiCache deploys one or more cache clusters for your application
  • ElastiCache automates resources provisioning, failure detection and recovery, and software patching
  • Supports Redis and Memcached engines

Alternatives to ElastiCache

  • Amazon CloudFront - cache images, web pages, static data at the edge
  • Amazon RDS Read Replicas - distributing data to remote apps
  • On-host caching - this approach lacks of efficiency - cannot reuse existing cache entries and maintain consistency in validation of the cache keys across all hosts

Memcached vs Redis

  • Due to replication and persistence features of Redis, Redis is managed as relational database
  • Memcached is designed as pure caching solution with no persistence - is managed as pool of nodes that can grow and shrink, similar to Amazon EC2 Auto Scaling Group

Important questions to consider impacting the choice of the caching engine:

Memcached:

  • Object caching as a primary goal? Offload database?
  • Simplest caching model?
  • Large cached nodes, multi-threaded performance with utilization of multiple cores
  • Scale cache horizontally?
  • Atomically increment / decrement counters?

Redis

  • More advanced types, e.g. lists, hashes, bit arrays, HyperLogLogs and sets?
  • Sorting and ranking datasets in memory?
  • Pub/Sub capabilities in your application?
  • Persistence of the key store?
  • Run in multiple AZs with failover?
  • Geospatial support?
  • Encryption and compliance standards? PCI DSS, HIPAA, FedRAMP?

ElastiCache for Memcached

  • Considerably cheaper to add an in-memory cache then to scale up to a larger database cluster
  • Easier to distribute an in-memory cache horizontally in comparison to relational database
  • Choose the same AZs for ElastiCache as your application servers
    • Specify Preferred Zones option during cache cluster creation
    • Spread Nodes Across Zones tells ElastiCache to distribute nodes to AZs evenly
  • Expect slightly higher latency for cross-zone AZ requests

Cache Node Size

  • M5 or R5 families support the latest generation CPUs and networking capabilities
  • Delivers up to 25Gbps of aggregate networking bandwidth with enhanced networking and over 600 GiB of memory
  • M5.large single node can be a good starting point
  • Track resource utilization through CloudWatch metrics
  • Estimate the memory requirements by calculating the size consumed per cache item x number of items you want to cache

Security Groups and VPC

  • ElastiCache supports security groups
  • Advised to launch in a private subnet with no public connectivity
  • Memcache doesn’t have any serious authentication or encryption capabilities
  • Create a security group for ElastiCache cluster and allow traffic from “application tier” security group
  • Test connectivity from an application instance to your cache cluster in VPC, using netcat:
nc -z w5 [cache endpoint] 11211
# will return 0 if connection was successful (the exist code of last command)
echo $?

Caching Design Patterns