### **抛砖引玉**
讲一下作者背景,曾经参加过国内世界技能大赛[云计算](https://so.csdn.net/so/search?q=%E4%BA%91%E8%AE%A1%E7%AE%97&spm=1001.2101.3001.7020?trk=cndc-detail)的选拔,那么在竞赛中包含两类,一类是架构类竞赛,另一类就是 TroubleShooting 竞赛,对应的分别为亚马逊云科技 GameDay 和亚马逊云科技 Jam,想必也有朋友玩过此类竞赛,那么最经典的一个 Gameday,我认为是 Gameday 2015 那个比赛,感兴趣的朋友可以在这里看看:[**Amazon-Gameday-2015-Runbook**](https://github.com/fedorovdima/aws-gameday/blob/master/runbook.md?trk=cndc-detail)
![image.png](https://dev-media.amazoncloud.cn/8fa7345605df4f9ca944031367f7024c_image.png "image.png")
上图为一个简易架构示例图
那么在这场比赛中,是有好几个版本的,如果说延伸到后面的版本,那么 Elasticache 是一个拿分的好物(在不考虑 Cloudfront 的情况下),因为从客户端发送来的数据,会被缓存到 Elasticache 中,在这里当然是用的 Elasticache for memcached,当客户端再次发送同样的数据请求过来的时候,首先会往 memcache 的查询数据,如果有就即刻返回。
那么在这个实践的过程中,我们抛开架构上的设计,我们使用 Elasticache for Memcached 首先是要去创建。
OK,那么问题来了
在生产实践中,我们需要考虑到成本的问题,创建多大呢?我们如何去预估这个缓存数据库的一个规模大小,这是第一个问题(虽然在竞赛中,都是扣一样的)
创建缓存数据库需要花时间,如果设置错误,删除也需要花费时间,在每个阶段会需要时间等待,大约4-5分钟
**总结起来就是:弹性伸缩,成本管控**
### **视频简介**
点击下方链接,观看视频简介
https://www.bilibili.com/video/BV18i4y1v7iq?t=303.4?trk=cndc-detail
亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 国赛选手带你看 Elasticache Serverless
### **Serverless 助力数据拓展无极限**
![image.png](https://dev-media.amazoncloud.cn/b2530a01f93d47959035986ae35d4017_image.png "image.png")
在 2023 亚马逊云科技 re:Invent 大会中,Peter 宣布推出 [Amazon ElastiCache](https://aws.amazon.com/cn/elasticache/?trk=cndc-detail) Serverless,这是一种新的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)选项,允许客户在一分钟内创建缓存并根据应用程序流量模式立即扩展容量。[Amazon ElastiCache](https://aws.amazon.com/cn/elasticache/?trk=cndc-detail) Serverless 与两种流行的开源缓存解决方案 Redis 和 Memcached 兼容。
[Amazon ElastiCache](https://aws.amazon.com/cn/elasticache/?trk=cndc-detail) Serverless 具有以下优势:
- 无需管理基础设施:ElastiCache Serverless 自动管理容量和扩展,因此您只需为您使用的内存和计算付费。
- 快速启动:您只需几分钟即可创建和启动 ElastiCache Serverless 缓存。
- 按需扩展:ElastiCache Serverless 会根据您的应用程序需求自动扩展或缩减缓存的容量。
- 高可用性:ElastiCache Serverless 自动将数据复制到多个 Availability Zone,以确保高可用性。
通过这样简单介绍,我相信大家已经明了我的意思了,Amazon Elasticache Serverless 可以满足咱们在之前所遇到的问题,一个是硬件弹性扩缩容,一个是创建/删除时间长的问题。那么我们实际来看看 Amazon Elasticache Serverless 的实际表现如何。
### **实践环节**
在本次实践测试中,使用 Elasticache for Memcached 的 Serverless 版本
#### 控制台创建
![image.png](https://dev-media.amazoncloud.cn/effeb91e60184073919e94bb94d2ce99_image.png "image.png")
##### 创建时间
默认就会已经选择了 Serverless 版本,大家可以通过下面2个截图看到咱们一整个创建时间是在1分钟左右的,和官方宣称的1分钟内其实是有一点差异的。那么针对于这种现象呢,个人认为也许是底层资源的调用的影响,才导致这样一个差异化的出现,也许在后续的一个版本升级后,可以实现任何时间都可以在1分钟内创建出缓存数据库。
![image.png](https://dev-media.amazoncloud.cn/2edd6999cdde434790ddce0dc701689c_image.png "image.png")
#### 连接及使用
在我们测试某个服务端口是否开放的时候,我们用 telnet 来进行连接,那么在常规使用中,我们在网上看到连接 redis 和 memcached 的方法也是使用 telnet,例如
```js
telnet Cache_host:port
```
那么,我们可用用这个命令连接上咱们**一般**创建的 redis/memcache,请注意,为什么我在这里说的是“**一般**”在默认和自定义的情况下,亚马逊云科技的 Elasticache 的 Redis/memcached 都会有一个选项,叫做“传输中加密”,该选项是“始终启用”,且无法关闭
![image.png](https://dev-media.amazoncloud.cn/871dc5d010e34c5b974e7ab900df2c8f_image.png "image.png")
##### 加密连接
```js
openssl s_client -connect Cache_host:Port
```
![image.png](https://dev-media.amazoncloud.cn/19e99b42c482432694d5fd89cac48449_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/525e57fc63a6445bb04587344990e0a1_image.png "image.png")
#### 弹性测试
##### 弹性拓展
当然,Elasticache Serverless,重就重在 Serverless,在创建之初,咱们就已经提到过,我们可以自行定义可用内存和每秒 ElastiCache 处理单位,当然默认情况下是不设限的。
![image.png](https://dev-media.amazoncloud.cn/04c20220937044a683998a51e5dfd226_image.png "image.png")
##### 并发测试
**测试视频**
点击下方链接,观看测试视频
https://www.bilibili.com/video/BV1wi4y1e7WQ?t=664.0?trk=cndc-detail
并发测试-亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 国赛选手带你看 Elasticache Serverless
**测试配置**
![image.png](https://dev-media.amazoncloud.cn/f32b35c6ca5e4594abe8943cee72b459_image.png "image.png")
**测试脚本**
1. 首先是要安装 redis
2. 然后在脚本中定义 redis 终端节点
3. 脚本每秒钟会并发10000写入
```js
pip3 install redis
```
```js
import redis
import concurrent.futures
import random
import string
import time
# 定义你的redis终端节点
redis_host = ''
redis_port = 6379
redis_ssl = True
num_writes_per_second = 10000
key_prefix = "data"
def generate_random_string(length=10):
"""Generate a random string of the specified length."""
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for _ in range(length))
def write_to_redis(client, key_prefix, num_writes):
"""Write data to Redis with random keys and values."""
for _ in range(num_writes):
key = f"{key_prefix}_{generate_random_string()}"
value = generate_random_string()
client.set(key, value)
# Create a Redis client
client = redis.Redis(host=redis_host, port=redis_port, ssl=redis_ssl)
# Function to write to Redis continuously
def continuous_writes():
with concurrent.futures.ThreadPoolExecutor() as executor:
while True:
# Submit write tasks to the thread pool
futures = [executor.submit(write_to_redis, client, key_prefix, num_writes_per_second) for _ in range(num_writes_per_second)]
# Wait for all tasks to complete
concurrent.futures.wait(futures)
# Introduce a delay to control the rate of writes
time.sleep(1)
# Start the continuous writes
continuous_writes()
```
**客户端情况**
Serverless 版本写入基本保持在124%的 CPU 利用率
![image.png](https://dev-media.amazoncloud.cn/a1130582809b46a2aae6eb4b299dc213_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/25e17aced9124468bd6fb49e9d5caa76_image.png "image.png")
传统预配置机型 t4g.micro
客户端 CPU 利用率
![image.png](https://dev-media.amazoncloud.cn/8d4592b5809b413cbccebe84953830ad_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/647613e6895444c1972e9fa5148adcd6_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/6bbb730d73bf407b884ef61a1b5b75b6_image.png "image.png")
#### 测试小节
从实际并发测试来看,Serverless 版本的 Elasticache 在超高并发下的写入是完全可以接住,并且内存量随着写入数据的增长是没有感知的。反观传统创建出的 T4g.micro 数据库实例,也许在一开始是能够写入数据,但是再往后写入数据,T4g.micro 机型的 redis 似乎就宕机了一样,从监控上的数据来看没有任何写入的迹象。
### **总结**
[Amazon ElastiCache](https://aws.amazon.com/cn/elasticache/?trk=cndc-detail) Serverless 是一个完全托管的、[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)的 Memcached 和 Redis 缓存服务。
- 无需管理基础设施:ElastiCache Serverless 会自动为您创建和管理 Memcached 或 Redis 缓存实例。
- 按需付费:您只需为使用的资源付费,无需预付费或担心容量规划。
- 弹性伸缩:ElastiCache Serverless 会根据您的需求自动缩放您的缓存实例,以确保满足您的性能要求。
通过 Amazon Elasticache Serverless,我们不再需要在缓存数据库的规划上做过多考虑,同时也不需要花费过多的时间进行等待。总的来看 ElastiCache Serverless 是 Memcached 和 Redis 缓存的一种可靠、高效、经济的解决方案