More Related Content Similar to DAT341_Working with Amazon ElastiCache for Redis (20) More from Amazon Web Services (20) DAT341_Working with Amazon ElastiCache for Redis1. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS re:INVENT
Working with Amazon ElastiCache
for Redis
M i c h a e l L a b i b , S p e c i a l i s t S A , A W S
N o v e m b e r 2 8 , 2 0 1 7
2. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
What to expect from this session
1) Amazon ElastiCache overview
2) Amazon ElastiCache Usage Patterns
3) Best practices
4) Caching strategies
5) Hands-on workshop
• Lab 1: Performance testing
• Lab 2: Working with Amazon ElastiCache for Redis
Prerequisites
• Have your own laptop
• Have an AWS account set up
• Have installed the latest AWS Command Line
Interface (AWS CLI) tool
3. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Amazon ElastiCache overview
4. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
In-memory key-value store supporting
• Redis 3.2.10
• Memcached 1.4.34
High-performance
Fully managed; zero admin
Highly available and reliable
Hardened by Amazon
Amazon
ElastiCache
5. Request rate
High Low
Latency
Low High
Structure
Low
High
Data volume
Low High
Amazon
RDS
Amazon S3
Amazon
Glacier
Amazon
CloudSearch and
Amazon Elasticsearch
Service
Amazon
DynamoDB
Amazon
ElastiCache
and Amazon
DynamoDB
Accelerator
(DAX)
HDFS
6. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Powerful
~200 commands + Lua scripting
In-memory data structure server
Utility data structures
Strings, lists, hashes, sets, sorted sets,
bitmaps & HyperLogLogs
Simple
Atomic operations
supports transactions
Ridiculously fast!
<1ms latency for most commands
Highly available
replication
Persistence
Open source
Redis overview
7. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
But wait, there’s more!
Run Lua scripts Geospatial queries Pub/sub
8. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Slot 0-5461
Cluster Mode Disabled
Keyspace
Slot 10923-16383
I Primary 0–5 Replicas
Cluster Mode Enabled
Primary Endpoint
1–15 Primaries/Shards
Slot 0
Slot 5462-10922
Slot 16383
Keyspace
0–5 Replicas
Configuration Endpoint
Slot 1 …
Vertically Scaled
Horizontally Scaled
Max Storage 407 GiB
Max Storage 6+ TiB
Redis topologies
9. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Feature Enabled Disabled
Failover 15–30 sec
(Non-DNS)
~1.5 min
(DNS-based)
Failover risk • Writes affected—partial dataset (less risk with
more partitions)
• Reads available
• Writes affected on entire dataset
• Reads available
Performance Scales with cluster size
(90 nodes—15 primaries + 0–5 replicas per shard)
6 nodes (1 primary + 0–5 replicas)
Max connections • Primaries (65,000 x 15 = 975,000)
• Replicas (65,000 x 75 = 4,875,000)
• Primary: 65,000
• Replicas: (65,000 x 5 = 325,000)
Storage 6+ TiB 407 GB
Cost
Example: Assume
workload needs 175 GB
Smaller nodes but more $$
9 x cache.r3.xlarge ($0.455hr) = $4.095 hr 255.6 GB
Larger nodes less $
1 X cache.r3.8xlarge = $3.640, 237 GB
Redis cluster-mode enabled vs. disabled
10. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Closer look at cluster-mode enabled
11. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
S5
S1
S2
S4 S3
Client
16384 hash slots per cluster
Slot for a key is CRC16(key) mod 16384
Slots are distributed across the cluster into shards
Developers must use a Redis cluster aware client
Clients are redirected to the correct shard
Smart clients store a map
Shard S1 = slots 0–3276
Shard S2 = slots 3277–6553
Shard S3 = slots 6554–9829
Shard S4 = slots 9830–13106
Shard S5 = slots 13107–16383
Redis cluster: automatic client-side sharding
12. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454 slots 5455–10909
Redis Cluster
Redis cluster—architecture
slots 10910–16363
Availability Zone B Availability Zone C
slots 5455–10909
slots 5455–10909slots 0–5454 slots 0–5454
slots 10910–16363
slots 10910–16363
Redis cluster—multi-AZ
A cluster consists of 1 to 15 shards
Example: 3-shard cluster,
2 read replicas
13. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454
Redis Cluster
Redis cluster—architecture
slots 10910–16363
Availability Zone B Availability Zone C
slots 5455–10909
slots 5455–10909slots 0–5454 slots 0–5454
slots 10910–16363
Shard
ReplicaReplicaPrimary
Each shard has a primary node
and up to five replica nodes
slots 5455–10909
slots 10910–16363
14. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454 slots 5455–10909
Redis Cluster
Redis cluster—architecture
slots 10910–16363
Availability Zone B Availability Zone C
slots 5455–10909
slots 5455–10909
Shard
ReplicaReplica Primary
Each shard has a primary node
and up to five replica nodes
slots 0–5454 slots 0–5454
slots 10910–16363
slots 10910–16363
15. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454
Redis Cluster
Redis cluster—architecture
slots 10910–16363
Availability Zone B Availability Zone C
slots 10910–16363
slots 10910–16363
Shard
Replica PrimaryReplica
Each shard has a primary node
and up to five replica nodes
slots 5455–10909 slots 0–5454
slots 5455–10909
slots 0–5454 slots 5455–10909
16. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454 slots 5455–10909
Redis Cluster
slots 10910–16363
Availability Zone B Availability Zone C
slots 5455–10909 slots 5455–10909slots 0–5454 slots 0–5454
slots 10910–16363 slots 10910–16363
Scenario 1: Single primary failure
17. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454 slots 5455–10909
Redis Cluster
Scenario 1: Single primary failure
slots 10910–16363
Availability Zone B Availability Zone C
slots 5455–10909 slots 5455–10909slots 0–5454 slots 0–5454
slots 10910–16363
Mitigation:
1. Automatic failure detection and replica promotion (~15–30 s)
2. Repair failed node
slots 10910–16363
18. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454 slots 5455–10909
Redis Cluster
Scenario 2: Majority of primaries fail
slots 10910–16363
Availability Zone B Availability Zone C
slots 5455–10909 slots 5455–10909slots 0–5454 slots 0–5454
slots 10910–16363slots 10910–16363
19. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Availability Zone A
slots 0–5454 slots 5455–10909
Redis Cluster
slots 10910–16363
Availability Zone B Availability Zone C
slots 5455–10909 slots 5455–10909slots 0–5454 slots 0–5454
Mitigation: Redis enhancements on ElastiCache
• Automatic failure detection and replica promotion
• Repair failed nodes
slots 10910–16363slots 10910–16363
Scenario 2: Majority of primaries fail
20. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
aws elasticache create-snapshot --replication-group-id redisclusterID --snapshot-name snameStep 1
aws elasticache copy-snapshot --source-snapshot-name sname --target-snapshot-name sname
--target-bucket s3ucketname
Step 2
Step 3 aws elasticache create-replication-group --replication-group-id NewRedisClusterID … --snapshot-arns
arn:aws:s3:::bucketname/redisbackup-0001.rdb, etc.
Step 4 Once the new cluster is up, update your app with new Amazon ElastiCache endpoint, then terminate old cluster
3 Shards 5 Shards
Downtime
New writes
not in
snapshot
rdb
Pro tip: DR strategy—enable
CRR on Amazon S3 bucket
triggering AWS Lambda function
to hydrate destination cluster
Resizing via backup and restore
21. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Zero-downtime Online Re-sharding
22. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
0-5461
Shard 1 Shard 2 Shard 3
5462--10922 10923-16383
aws elasticache modify-replication-group-shard-configuration --replication-group-id rep-group-id
--apply-immediately --node-group-count 5
Simple API
Scale In || Out
Online Re-Sharding—zero downtime
23. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
0-5461
reads/writes
Shard 1 Shard 2 Shard 3
Shard 4 Shard 5
5462--10922 10923-163830-2909,
5095-5461
5462-5783,
6876-9830
10923-14199
2910-5094,
9831--10922
No application interruption
Uniform slot distribution across shards
5784-6875,
14200-16383
Online Re-Sharding—zero downtime: Scale Out
24. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
0-5461
reads/writes
Shard 1 Shard 2 Shard 3
Shard 4 Shard 5
5462--10922 10923-16383
Uniform slot distribution across shards
No Application Interruption
Online Re-Sharding—zero downtime: Scale In
25. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS Lambda
3 Shards
…
var params = {
ApplyImmediately: true,
NodeGroupCount: 5,
ReplicationGroupId: ‘rep-group-id’,
… }
elasticache.modifyReplicationGroupShardConfiguration(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
}); …
5 Shards
MEMORY
HIGH!
Amazon
CloudWatch
Cluster Resized
AWS SNS
Online Re-Sharding—CW alarm triggered
26. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
reads/
writes
reads
AZ1
AZ2
reads
search
reads
search
clients
c a c h e c l u s t e r
r e l a t i o n a l
d a t a
Healthy
27. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
reads/
writes
reads
AZ1
AZ2
reads
search
reads
search
clients
c a c h e c l u s t e r
r e l a t i o n a l
d a t a
Heavy
pressure
28. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
reads/
writes
reads
AZ1
AZ2
reads
search
reads
search
c a c h e c l u s t e r
clients
r e l a t i o n a l
d a t a
Healthy—
auto scaled
out
29. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Common Usage Patterns
30. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Session
management
Database caching APIs
(HTTP responses)
IOT
Streaming data
analytics
(Filtering/aggregation)
Pub/sub
Social media
(Sentiment analysis)
Standalone
database
(Metadata store)
Leaderboards
Usage Patterns
31. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Caching
Clients
Amazon
ElastiCache
Redis
Amazon
DynamoDB
Elastic Load
Balancing
Amazon
EC2
Amazon
RDS
write-through
reads/
writes
DDB streams
mysql.lambda_async
reads/
writes
Amazon
S3
reads/writes
Object data
Unstructured data
Relational data
32. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Caching NoSQL
Amazon
EC2 reads/
writes
reads
MongoDB
Cluster
Cassandra
Cluster
Smaller NoSQL DB clusters needed = lower costs
Faster data retrieval = better performance
Elasticsearch
Cluster
Clients
33. Amazon
EC2
reads/
writes
Amazon
ElastiCache
Redis
reads
MongoDB
Cluster
DBObject doc = collection.findOne();
Cache serialized DBObject in Redis (good)
Cache rows in Redis hash (faster/more efficient)
Cassandra
Cluster
Amazon
ElastiCache
Redis
Amazon
EC2
reads/
writes
reads
ResultSet rs = session.execute(stmt);
Cache serialized ResultSet in Redis (good)
Cache rows in Redis hash (faster/more efficient)
Smaller NoSQL DB clusters needed = lower costs
Faster data retrieval = better performance
Caching NoSQL databases with Amazon ElastiCache
34. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Amazon
Kinesis
Analytics
Amazon
Kinesis
Streams
Amazon
Kinesis
Streams
Amazon
ElastiCache
(Redis)
cleansed
stream
Streaming data enrichment/processing
Datasources
raw
stream
Subscribers
AWS Lambda function 1
Continual data
filtering/enrichment
Real-time
pub/sub
AWS Lambda function 2
35. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Big data architectures using Redis
Amazon Kinesis
DataSources
AWS Lambda
Apache Storm
on EMR
Spark Streaming
on Amazon EMR
Amazon
Kinesis app
Amazon
EC2
AWS IoT
Amazon
ElastiCache
Collect
Store
Process
Amazon
S3
Apache Kafka
AWS
Lambda
Custom
app
Spark on
Amazon
EMR
Analyze
36. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Rules Engine
Amazon
ElastiCache
Redis
AWS
Lambda
Direct integration
LambdaSNS SQS
S3 KinesisDDB
AWS
IoT devices
AWS
IoT
Sensor store
IoT powered by ElastiCache
37. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Mobile apps powered by ElastiCache
Amazon API
Gateway
AWS
Lambda
Amazon
ElastiCache
Redis
GEOADD
GEORADIUS
Search points of interest
Update points of interest
https://aws.amazon.com/blogs/database/amazon-elasticache-utilizing-redis-geospatial-capabilities/
Amazon
DynamoDB
DDB streams
Amazon
EC2
38. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Ad tech powered by ElastiCache
Clients
Advertisers
https://aws.amazon.com/caching/database-caching/
Ad network
Ad slot
Consumer
Ad slot
publishers
Ad placement
(websites/apps)
Amazon
ElastiCache
Redis
<40 ms
Clickstream
(shopping
events)
User visits
page
Publisher
places ad slot
for auction
Ad network
calls for bidsBidders respond
with bids
Winners bid
ad displayed
39. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Chat apps powered by ElastiCache
https://aws.amazon.com/blogs/database/amazon-elasticache-utilizing-redis-geospatial-capabilities/
Clients
Chat apps
Application Load
Balancer
WebSockets
Amazon
ElastiCache
Redis
PubSub
Serverpersistent
connections
Elastic
Beanstalk
SUBSCRIBE chat_channel:114
PUBLISH chat_channel:114 "Hello all"
>> ["message", "chat_channel:114", "Hello all"]
UNSUBSCRIBE chat_channel:114
40. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
• Very popular for gaming apps that need
uniqueness and ordering
• Easy with Redis sorted sets
ZADD "leaderboard" 1201 "Gollum”
ZADD "leaderboard" 963 "Sauron"
ZADD "leaderboard" 1092 "Bilbo"
ZADD "leaderboard" 1383 "Frodo”
ZREVRANGE "leaderboard" 0 -1
1) "Frodo"
2) "Gollum"
3) "Bilbo"
4) "Sauron”
ZREVRANK "leaderboard" "Sauron"
(integer) 3
Gaming—real-time leaderboards
41. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Ex: throttling requests to an API
uses Redis counters
ELB
Externally
facing API
Reference: http://redis.io/commands/INCR
FUNCTION LIMIT_API_CALL(APIaccesskey)
limit = HGET(APIaccesskey, “limit”)
time = CURRENT_UNIX_TIME()
keyname = APIaccesskey + ":” + time
count = GET(keyname)
IF current != NULL && count > limit THEN
ERROR ”API request limit exceeded"
ELSE
MULTI
INCR(keyname)
EXPIRE(keyname,10)
EXEC
PERFORM_API_CALL()
END
Rate limiting
42. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Amazon ElastiCache: Database caching
strategies using Redis
43. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
What data should I cache?
44. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
• R e f e r e n c e d a t a : p r o d u c t c a t e g o r i e s ( u s e r l o n g e r T T L s )
• R e f e r e n c e d a t a : p r o d u c t i m a g e s ( u s e r l o n g e r T T L s )
• R e f e r e n c e d a t a : p r o d u c t d e t a i l s ( u s e r l o n g e r T T L s )
• D y n a m i c : d a t a b a s e r e s u l t s e t s : ( u s e r s h o r t e r T T L s )
• D y n a m i c : A P I r e s p o n s e s ( u s e r s h o r t e r T T L s )
• A n y t h i n g t h a t i s c a c h e a b l e !
What data to cache
45. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
How do I cache my data?
46. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cache-aside—lazy loading
Cache-aside—lazy loading
Amazon
ElastiCache
Applications
Amazon
RDS
1
2
3
1) Check cache, if HIT return
2) If Cache MISS
3) Update cache
47. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cache-aside—write-through
Cache-aside—write-through
Amazon
ElastiCache
Applications
Amazon
RDS
1
2
1) Update primary DB
2) Update cache
48. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cache strategies
DB result set
Pro
When data retrieval logic is abstracted from the code consuming the ResultSet, caching the ROW can
be extremely effective and can be implemented against any RDBMS
Con
Data retrieval still requires extracting values from the ROW and does not further simplify data access, it
only reduces data-retrieval latency
SELECT * FROM x WHERE y
ID First_Name Last_Name City
123 Michael Labib Chicago
ResultSet object (ROW) Key: query, value: CRS as byte array
49. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cache strategies
JSON
SELECT * FROM x WHERE y
ID First_Name Last_Name City
123 Michael Labib Chicago
Key: 123, Value: ‘{ “firstname”: “Michael”,
“lastname”: “Labib”,
“city”: “Chicago” } ‘
String firstName = rs.getString(First_Name)
Pro
Very easy to implement. Cache any desired database fields and values into a Redis string. For example,
store your retrieved data into a JSON object stored in a Redis string.
Con
Cannot get individual JSON properties
50. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cache strategies
Application objects
SELECT * FROM x WHERE y
ID First_Name Last_Name City
123 Michael Labib Chicago
Key: CUSTOMER_ID:123,
Value: Customer object as byte array
String firstName = rs.getString(First_Name);
customer.setFirstName(firstName);
String lastName = rs.getString(Last_Name);
customer.setLastName(lastName);
Pro
Use application objects in their native structure and data state when serialized
51. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cache strategies
Using Redis data structures
SELECT * FROM x WHERE y
ID First_Name Last_Name City
123 Michael Labib Chicago
Key: CUSTOMER_ID:123, Value: rsHash
String firstName = rs.getString(First_Name);
rsHash.put(“firstName", firstName);
String lastName = rs.getString(Last_Name);
rsHash.put(“lastName", lastName);
jedis.hmset(“CUSTOMER_ID:123", rsHash);
Pro
In addition to reducing data retrieval latency, cache data into specific data structure that simplifies the
data access pattern
52. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
• Understand the frequency of change of underlying data
• Set appropriate TTLs on keys that match that frequency
• Choose appropriate eviction policies that are aligned with application requirements
• Isolate your cluster by purpose (for example, cache cluster, queue, standalone database, and so on)
• Maintain cache freshness with write-throughs
• Performance test and size your cluster appropriately
• Monitor Cache HIT/MISS ratio and alarm on poor performance
• Use failover API to test application resiliency
Caching tips
53. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Amazon ElastiCache: Best practices
54. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Cluster sizing best practices
• Storage—clusters should have adequate memory
• Recommended: memory needed + 25% reserved memory (for Redis) + some room for growth
(optional 10%)
• Optimize using eviction policies and TTLs
• Scale up or out before reaching max-memory using CloudWatch alarms
• Use memory optimized nodes for cost effectiveness (R4 support)
• Performance—performance should not be compromised
• Benchmark operations using Redis Benchmark tool
• For more READIOPS—add replicas
• For more WRITEIOPS—add shards (scale out)
• For more network IO—use network optimized instances and scale out
• Use pipelining for bulk reads/writes
• Consider Big(O) time complexity for data structure commands
• Cluster isolation (apps sharing key space)—choose a strategy that works for your workload
• Identify what kind of isolation is needed based on the workload and environment
• Isolation: No Isolation $ | Isolation by Purpose $$ | Full Isolation $$$
55. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Redis benchmark tool
Open source utility to benchmark performance
example: src/redis-benchmark -h r3-xlarge-perf.foio87.0001.use1.cache.amazonaws.com -p 6379 -n -150000 -d 100
Syntax:
redis-benchmark -h <host> -p <port> -c 50 -n 1000 -d 500 –q
-c <clients>—Specifies the number of parallel connections (default 50).
-n <requests>—Specifies the number of requests (default 1000000).
-d <size>—Specifies the data size of GET and SET values in bytes.
-t <test1,test2>—Comma-separated list of tests to perform.
-q—Quiet operation, displays only the result.
56. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Redis max-memory policies
Select a max-memory policy based on your workload needs
• noeviction: return errors when the memory limit has been reached and the client is trying to execute
commands that might result in more memory to be used
• allkeys-lru: evict keys trying to remove the less recently used (LRU) keys first
• volatile-lru: evict keys trying to remove the less recently used (LRU) keys first, but only among keys
that have an expire set
• allkeys-random: evict random keys to make space for the new data added
• volatile-random: evict random keys to make space for the new data added, but only evict keys with an
expire set
• volatile-ttl: evict only keys with an expire set, and try to evict keys with a shorter time to live (TTL) first
57. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Key ElastiCache CloudWatch metrics
• CPUUtilization
• Memcached—up to 90% ok
• Redis—divide by cores (ex: 90% / 4 = 22.5%)
• SwapUsage low
• CacheMisses/CacheHits Ratio low/stable
• Evictions near zero
• Exception: Russian-doll caching
• CurrConnections stable
• Setup alarms with CloudWatch metrics
58. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
ElastiCache modifiable parameters
• Maxclients: 65000 (unchangeable)
• Use connection pooling
• timeout—closes a connection after it has been idle for a given interval
• tcp-keepalive—detects dead peers given an interval
• Databases: 16 (default) for non-clustered mode
• Logical partition
• Reserved-memory: 25% (default)
• Recommended
50% of maxmemory to use before 2.8.22
25% after 2.8.22—ElastiCache
• Maxmemory-policy:
• The eviction policy for keys when maximum memory usage is reached
• Possible values: volatile-lru, allkeys-lru, volatile-random, allkeys-random, volatile-ttl,
noeviction
59. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hands-on workshop overview
L a b 1 : P e r f o r m a n c e t e s t i n g : h t t p : / / c h i l p . i t / f 0 d d 0 8 9
60. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
What we’re building
Availability Zone #1
REINVENT-RDS-SG
Test
Instance
VPC: REINVENT 10.0.0.0/16
Public1:
10.0.0.0/24
Private1: 10.0.2.0/24
REINVENT-EC-SG
REINVENT-APP-SG
APACHE HTTP SERVER
REDIS 3.2 CLIENT
JMETER 3.2
JUNIT 4 TEST APP
JAVA 1.8.0
Test
Instance
SSH,
HTTP
Performance testing lab—infrastructure
topology
61. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Workshop: JMeter and JUnit tests overview
RDSLoad:testRDSLoad() (This executes only one time)
1. Drops database CustomerDB if it exists, referencing SQL stored in DropCustomerDB
2. Creates database CustomerDB, referencing SQL stored in CreateCustomerDB
3. Creates table customer, referencing SQL stored in CreateCustomerTbl
4. Loads 1000 customer records stored in CUSTOMER.sql
RedisLoad:testRedisLoad() (This executes only one time)
1. Flushes all the data in the Redis Cluster to prepare it
2. Queries the customer database table for the total count of customer records, referencing SQL stored in
CountCustomerTbl
3. Iterates over the total count and queries for each row, referencing SQL stored in SelectCustomerTbl
4. Stores each SQL ResultSet row into a Redis HashMap with the key name being the SQL statement for
that individual customer query
Data loading
62. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Workshop: JMeter and JUnit tests overview
Stress testing: 20k requests/second
RDSBenchmark:testRDS()
1. Randomly selects a customer row to retrieve from customer IDs 1–1000
2. Retrieves the SELECT SQL STATEMENT and appends the random customer ID integer referencing SQL stored in
SelectCustomerTbl
3. Executes SQL statement and iterates/displays the fetched row
RedisBenchmark:testRedis()
1. Randomly selects a customer hashmap to retrieve from customer IDs 1–1000
2. Retrieves the SELECT SQL STATEMENT and appends the random customer ID integer referencing SQL stored in
SelectCustomerTbl
3. Executes Redis HASHMAP HGETALL command to retrieve/display the fetched hash
63. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Workshop: JMeter and JUnit tests overview
//Generating a random num 1-1000 representing customer ids
randomKey = Integer.toString(rand.nextInt(1000));
//Retrieving Customer Select SQL Statement & appending customer id
sql = query + randomKey;
stmt = connection.createStatement();
//executing query
rs = stmt.executeQuery(sql);
//iterating and displaying results
while( rs.next() ) { …
//Generating a random num 1-1000 representing customer ids
randomKey = Integer.toString(rand.nextInt(1000));
//Retrieving Customer Select SQL Statement & appending customer id
key = query + randomKey;
//executing command
map = jedis.hgetAll(key);
//iterating and displaying results
for (String name : map.keySet() ) { …
64. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Hands-on workshop overview
L a b 2 : W o r k i n g w i t h A m a z o n E l a s t i C a c h e f o r R e d i s
h t t p : / / c h i l p . i t / 5 4 6 e c 4 d
65. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Thank you!