# Introduction to Amazon ElastiCache **提供快速的数据缓存,提高应用程序性能** ## Amazon ElastiCache概念 是一款全托管、低延迟的内存缓存服务,兼容 Redis 和 Memcached。它不仅简化了设置、安装、补丁修复、配置、监控、备份和恢复等管理任务,还能显著提高现代应用程序的性能,提供微秒级响应时间,并扩展到每秒数百万次操作,让开发者可以专注于应用程序的实际开发。 ## 在操作之前需要了解: ### 缓存的概念: 缓存可以理解为我需要去书中重复的看一段文字,翻书本身很麻烦,所以将这一段文字复印下来,等下次我在需要去看这段文字的时候我就可以不翻书,而是去看复印件. 在比喻中: - 书:代表了原始数据源,比如数据库或文件系统。 - 翻书:代表了从原始数据源检索信息的过程,这个过程是耗费时间和精力的. - 复印件:代表了缓存,它是原始数据的快速可访问的副本. 因此,我们再引入Amazon ElastiCache的概念便可理解: ### Amazon ElastiCache的作用 在Amazon ElastiCache的背景下,Amazon ElastiCache 是一种托管缓存服务,它提供了两种类型的缓存解决方案:Memcached 和 Redis. 因此可以这样类比: - 书:在Amazon Web Services(AWS)中,这可以代表原始数据源,比如Amazon RDS(关系数据库服务)、Amazon DynamoDB(NoSQL数据库服务)或其他存储服务。 - 翻书:这代表了应用程序直接从这些数据库或存储服务中检索数据的操作,这个过程可能会因为网络延迟、数据库查询复杂度等因素而变得缓慢. - 复印件:在Amazon ElastiCache中,这代表了缓存的数据。ElastiCache作为缓存层,存储了数据库中经常访问的数据的副本. 综上,可见Amazon ElastiCache的特点: ### Amazon ElastiCache的特点 - 快速数据检索:当应用程序需要频繁访问某些数据时,如用户会话信息、热门商品详情等,这些数据可以被存储在ElastiCache中。这样,当数据被请求时,应用程序可以直接从ElastiCache中快速检索,而不需要每次都去“翻书”(访问数据库). - 减少数据库负载:由于频繁的数据请求可以直接在缓存中得到满足,因此可以显著减少对后端数据库的访问次数,降低数据库的负载. - 提高应用程序性能:通过减少数据检索时间,ElastiCache帮助提高了应用程序的整体性能,从而改善了用户体验. - 数据持久性:尤其是使用Redis时,ElastiCache还可以提供数据持久性功能,这意味着即使发生系统故障,缓存的数据也不会丢失 - 可扩展性:ElastiCache可以根据需求自动扩展或缩小资源,以应对不同的流量模式,确保缓存层始终能够高效运行. - 易于管理:作为托管服务,Amazon ElastiCache简化了缓存集群的设置、管理和维护工作,让开发者可以专注于应用程序的开发,而不是缓存基础设施的管理. Amazon ElastiCache就像是一个高效的复印机,它帮助您的应用程序快速获取所需的数据,同时减少了对原始数据源的依赖和负载. ## 详细操作步骤 ### 一,创建Amazon ElastiCache集群 **在此任务中,您将创建一个 Amazon ElastiCache 集群。** 1. 登陆亚马逊云账号后,进入控制台,在搜索框输入Amazon ElastiCache并进入相应的服务: 始使用中的Redis OSS 3. 或者在左边 Resources(资源)下面选择 Redis caches(Redis 缓存)选择 Create Redis cache(创建 Redis 缓存) 4. 创建Redis缓存的界面是这样的: 5. 现在我们开始创建我们的Rediss OSS 缓存: - 对于 Deployment option(部署选项),选择 Design your own cache(设计自己的缓存); - 对于 Creation method(创建方法),选择 Cluster cache(集群缓存): 6. 集群模式默认,在集群信息中,根据自己的需求舒服集群名称(例图中为Zgh_332): 7. 在Cluster settings(集群设置)部分中: - 对于Node type(节点类型),选择cache.t2.micro或cache.t3.micro(选择适合你需求的节点类型,决定了每个节点的计算能力和内存大小。); - 对于Number of replicas(副本数量),输入 0: 8. 在 Connectivity(连接)部分中: - 对于 Subnet groups(子网组),确保选择 Create a new subnet group(创建新的子网组)(创建一个新的子网组,以便将缓存集群部署在特定的网络环境中); - 对于 Name(名称)自定义(例图中为mysubnetgroup)。对于 VPC ID(选择你希望缓存集群所在的虚拟私有云(VPC),确保网络隔离和安全性。如果没有可以选择创建,这里不做过多介绍): 9. 将所有其他设置保留为默认值,滚动到页面底部,并选择 Next(下一步),直到最后Create(创建): 10. 缓存集群的 Status(状态)将显示为 creating(正在创建)。最终,当集群准备就绪后,Status(状态)列将显示为 available(可用): 那么问题来了: **Q1:Amazon ElastiCache中集群缓存是什么意思?** **Q2:Amazon ElastiCache中为什么需要算力?** **Q3:为什么在Amazon ElastiCache中设置Number of replicas(副本数量)为0?** ### Q1:Amazon ElastiCache中集群缓存是什么意思? 想象一下,你在一个大型图书馆里寻找书籍。这个图书馆非常大,有很多书架,每个书架上都摆满了书。为了更高效地管理和查找书籍,图书馆引入了一个系统,将书籍分布在多个区域,每个区域都有自己的书架和图书管理员。 #### 类比解释 - **书架(数据库存储)**:书架代表数据库存储,书籍按照一定的顺序排列,方便查找。 - **图书管理员(数据库服务器)**:图书管理员知道每本书的位置,当你需要找书时,你可以请图书管理员帮忙查找。 - **信息检索系统(ElastiCache集群缓存)**:图书馆有一个信息检索系统,它是一个电脑终端,可以快速检索图书馆的目录。 #### 集群缓存的概念 1. **分布式管理**:图书馆将书籍分布在多个区域,每个区域都有自己的书架和图书管理员。这就像ElastiCache中的集群缓存,将数据分布在多个节点上,每个节点负责一部分数据的存储和管理。 - **类比ElastiCache**:在ElastiCache中,集群缓存将数据分布在多个缓存节点上,每个节点负责一部分数据的存储和管理。这种方式可以提高数据的可用性和访问速度。 2. **负载均衡**:当多个读者同时查找书籍时,图书馆的系统会将查询请求分配给不同的区域,以避免某个区域过于繁忙。这就像ElastiCache中的负载均衡,将查询请求分配给不同的缓存节点,以提高系统的响应速度和稳定性。 - **类比ElastiCache**:在ElastiCache中,负载均衡将查询请求分配给不同的缓存节点,以提高系统的响应速度和稳定性。 3. **高可用性**:如果某个区域的书架出现问题,其他区域的书架仍然可以正常工作,确保读者能够继续查找书籍。这就像ElastiCache中的高可用性,即使某个缓存节点出现故障,其他节点仍然可以正常工作,确保数据的可用性。 - **类比ElastiCache**:在ElastiCache中,即使某个缓存节点出现故障,其他节点仍然可以正常工作,确保数据的可用性。 4. **扩展性**:当图书馆需要增加更多书籍时,可以增加新的区域和书架,以容纳更多的书籍。这就像ElastiCache中的扩展性,可以增加更多的缓存节点,以处理更多的数据和请求。 - **类比ElastiCache**:在ElastiCache中,可以增加更多的缓存节点,以处理更多的数据和请求。 通过这个图书馆的例子,我们可以理解Amazon ElastiCache中的集群缓存是如何通过分布式管理、负载均衡、高可用性和扩展性来提高数据的可用性和访问速度的。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ### Q2:Amazon ElastiCache中为什么需要算力? 我们引入一个图书馆的例子来解释: #### 图书馆的信息检索系统 想象一下,你在一个大型的图书馆里寻找一本书。图书馆里有很多书架,每个书架上都摆满了书。 - **书架(数据库存储)**:书架代表数据库存储,书籍按照一定的顺序排列,方便查找。 - **图书馆员(数据库服务器)**:图书馆员知道每本书的位置,当你需要找书时,你可以请图书馆员帮忙查找。 - **信息检索系统(ElastiCache算力)**:图书馆有一个信息检索系统,它是一个电脑终端,可以快速检索图书馆的目录。 #### 类比一下 1. **快速检索**:当你使用信息检索系统查找书籍时,系统需要处理你的查询(例如,书名、作者、主题等),并快速从大量目录中找到匹配的结果。这需要计算能力来处理搜索算法和数据匹配。 - 类比ElastiCache:当应用程序查询缓存中的数据时,ElastiCache需要算力来快速检索和返回结果。 2. **处理复杂查询**:如果你需要查找特定类型的书籍,比如“所有关于历史并且在过去一年内出版的书籍”,信息检索系统需要执行更复杂的查询操作。 - 类比ElastiCache:在缓存中,可能需要进行复杂的操作,如数据排序、聚合等,这同样需要算力。 3. **维护目录更新**:图书馆的新书不断上架,信息检索系统需要定期更新目录,以确保查询结果的准确性。 - 类比ElastiCache:ElastiCache需要定期更新缓存数据,以反映数据库中的最新状态,这也需要算力。 4. **支持多用户同时查询**:在高峰时段,可能有多个读者同时使用信息检索系统。系统需要足够的算力来处理这些并发请求。 - 类比ElastiCache:在应用程序高负载时,ElastiCache需要处理大量的并发读写请求,这同样需要强大的计算能力。 5. **数据安全和权限管理**:信息检索系统可能需要验证用户的权限,确保某些敏感书籍不被未经授权的读者检索。 - 类比ElastiCache:ElastiCache需要处理安全性和权限管理,这也需要一定的计算资源。 图书馆的信息检索系统需要算力来快速、准确地处理读者的查询,Amazon ElastiCache也需要算力来高效地处理应用程序的数据请求,保证数据的快速访问和系统的稳定运行。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ### Q3:为什么在Amazon ElastiCache中设置Number of replicas(副本数量)为0? 可以使用一个书店的例子来解释为什么在Amazon ElastiCache中可能会选择设置“Number of replicas”(副本数量)为0。 #### 生活例子:书店的书籍副本 假设你经营一家书店,你的书店里有各种书籍。有些书籍非常受欢迎,你可能会在书架上放置多个副本,以便多个顾客可以同时查阅或购买。 - **书籍(数据)**:书店中的书籍就像是缓存中的数据。 - **书籍副本(副本数量)**:书籍的副本数量就像是ElastiCache中的副本数量。 #### 设置副本数量为0的例子 1. **特殊书籍**:假设你有一本非常特殊且不常被查阅的书籍,比如一本非常古老的历史文献,它对大多数顾客来说并不感兴趣,但你仍然需要保留它以备不时之需。 - 类比ElastiCache:在ElastiCache中,如果你有一些数据是不经常被访问的,或者这些数据的丢失不会对业务造成重大影响,你可能会选择不为其设置副本。 2. **库存空间有限**:书店的空间有限,你不能为每本书都放置多个副本。你需要根据书籍的受欢迎程度和库存空间来决定哪些书籍需要副本。 - 类比ElastiCache:在ElastiCache中,资源(如内存)也是有限的。如果你不需要高可用性或者有其他数据更需要副本,你可能会选择为某些数据设置0个副本,以节省资源。 3. **成本考虑**:保留书籍的副本需要额外的成本,包括存储空间和购买副本的费用。如果一本书的需求非常低,可能不值得为其购买额外的副本。 - 类比ElastiCache:在ElastiCache中,副本会增加成本,因为每个副本都需要占用额外的内存资源。如果数据的重要性不高,为了节约成本,可以选择不设置副本。 4. **数据更新频率**:如果那本古老文献的内容很少更新,甚至从不更新,那么保留一个副本就足够了。 - 类比ElastiCache:如果缓存中的某些数据很少或从不更新,那么即使没有副本,也不会对性能产生太大影响。 通过这个例子,我们可以理解,在Amazon ElastiCache中选择设置“Number of replicas”为0,可能是因为数据不常被访问、资源有限、成本考虑或数据更新频率低等原因。这样的设置有助于优化资源使用,降低成本,同时仍然满足业务需求。 **---小插曲结束---** ### 二,授予对 Amazon ElastiCache 集群的访问权限 **要从运行在同一 Amazon VPC 中的 Amazon EC2 实例连接到您的 Amazon ElastiCache 集群,您需要授予对集群的网络入口访问权限。在此任务中,您将授予对集群的网络入口访问权限。** 1. 在页面顶部的统一搜索栏中,搜索并选择 EC2。 2. 在左侧导航窗格中,在 Network & Security(网络与安全)下面选择 Security Groups(安全组)。 3. 选择对应的目标VPC ID, - 选择 Inbound rules(入站规则)选项卡, - 选择 Edit inbound rules(编辑入站规则): 1. 在添这里可以添加规则,如下图所示:目的是为让 VPC 中的 Amazon EC2 实例能够连接到 ElastiCache 节点。 - 选择 Add rule(添加规则)。 - Type(类型):自定义 TCP - 端口范围:6379(这是 Redis 的端口范围。) - Source type(来源类型):Anywhere-IPv4 - 对于顶部的所有流量规则,选择删除。 - 选择 Save rules(保存规则)。 1. 添加规则成功后,如下图所示,在上方会有所提示,至此恭喜成功授予 Amazon ElastiCache 集群的网络入口访问权限. ### 三,获取 ElastiCache 终端节点 **要连接到 ElastiCache 集群,您需要知道 ElastiCache 终端节点是什么。在此任务中,您将获取 ElastiCache 终端节点。** 1. 在页面顶部的统一搜索栏中,搜索并选择 ElastiCache. 2. 在左侧导航窗格中,选择 Redis caches(Redis 缓存). 3. 选择之前创建的集群链接(例下图中:Zgh332). **不要复制com之后的内容!!!** **至此,您已成功获取 ElastiCache 终端节点。** ### 四,启动 Amazon EC2 实例以访问 ElastiCache 集群 1. 在页面顶部的统一搜索栏中,搜索并选择 EC2 2. 选择 Launch instances(启动实例),然后选择 Launch instance(启动实例) 3. 在 Launch an instance(启动实例)页面上的 Name and tags(名称和标签)部分中,进行以下配置: - 名称:myCacheInstance - 在 Application and OS images (Amazon Machine Image)(应用程序和操作系统映像 (Amazon Machine Image))的快速入门子部分中,选择将自动选择最新 Amazon Linux 2 AMI 映像的 Amazon Linux. 1. 在实例类型中:您将配置 t2.micro 实例。 - 在密钥对(登录) 中:选择在没有密钥对的情况下继续(不推荐) 。 - 在网络设置中:选择 Edit(编辑),然后进行以下配置: - VPC - required(VPC – 必需):Lab VPC(实验 VPC) - 防火墙(安全组):选择现有的安全组 - 常见安全组:从下拉菜单中选择您的安全组 1. 在配置存储部分中,保留默认值。 找到并展开 Advanced Details(高级详细信息)部分。 从 IAM 实例配置文件下拉菜单中,选择名称类似于 EC2InstProfile 的角色。 2. 选择启动实例。 3. 在 Next Steps(后续步骤)页面,选择 View all instances(查看所有实例)。 4. **注意:等待 Instance state(实例状态)显示 Running(正在运行)状态。您可以每 30 秒单击一次 refresh(刷新) 按钮来检查状态。** **至此,成功启动 Amazon EC2 实例** ### 五,连接到 EC2 实例 1. 在页面顶部的统一搜索栏中,搜索并选择 EC2。 2. 在左侧导航窗格中,选择 Instances(实例)。 选择 myCacheInstance,然后选择 Connect(连接) 3. 对于 Connection method(连接方法),选择 Session Manager 选项卡。 选择 Connect(连接)。 4. 连接成功图示: ### 六,连接到 ElastiCache 集群 1. 使用redils-cli从EC2实例连接到 ElastiCache 集群. - 安装gcc: ``` sudo yum install -y gcc ``` - 安装redils-cli: ``` cd ~ wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make ``` - 输入src/redis-cli -c -h ENDPOINT -p 6379 - 其中ENDPOINT 替换为 Redis 终端节点的名称 - 为报错说明连接成功 ### 七,测试 ElastiCache 集群 输入以下指令: - 设置含字符串值的密钥a: ``` set a "hello" ``` - 获取a的值: ``` get a ``` - 获得b的值,但是在集群中并没有b的内容,因此系统会返回nil. (**nil是编程中表示空集**) ``` get b ``` - 设置b的值为"Good-bye",但是仅仅持续5秒钟, (**EX 是 expire 的缩写,意思是5秒钟后过期**) ``` set b "Good-bye" EX 5 ``` - 关闭于集群的连接 ``` quit ``` 结果如下图所示: ### 八,删除 Amazon ElastiCache 集群 1. 在页面顶部的统一搜索栏中,搜索并选择 ElastiCache 2. 在左侧导航窗格中 - 选择 Redis caches(Redis 缓存)。 - 选择 mycache。 - 选择 Actions(操作),然后选择 Delete(删除)。 1. 在 Delete mycache(删除 mycache)窗口中,进行以下配置: - Create backup(创建备份):No(否)。 - 在文本字段中键入 mycache。 - 选择 Delete(删除)。 1. 状态更改为正在删除。缓存集群删除后,即会停止产生费用。 ### 补充:创建IAM账户 - 1.登陆亚马逊云账号后,进入控制台,在搜索框输入IAM并进入相应的服务: - 2.选择左侧‘用户’,创建用户 ### 参考文献以及视频: - 1.[Amazon ElastiCache](https://docs.amazonaws.cn/aws/latest/userguide/elasticache.html) - 2.[How ElastiCache works](https://docs.amazonaws.cn/AmazonElastiCache/latest/dg/WhatIs.corecomponents.html) - 3.深入浅出 Amazon ElastiCache——最佳实践及用户场景[https://www.bilibili.com/video/BV19441117TE/?vd_source=63519f93e4f8f7f1e241ad9a3ea478df] - 4.Amazon ElastiCache 飞速搭建缓存服务集群,这才叫快[https://blog.csdn.net/qq_35387940/article/details/125412342?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522a098385353481bba39164a03a4a09193%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=a098385353481bba39164a03a4a09193&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-125412342-null-null.142^v100^control&utm_term=Amazon%20ElastiCache%E7%AE%80%E4%BB%8B&spm=1018.2226.3001.4187] - 5.Amazon ElastiCache 是什么[https://blog.csdn.net/weixin_45428910/article/details/143751434?ops_request_misc=&request_id=&biz_id=102&utm_term=Amazon%20ElastiCache%E7%AE%80%E4%BB%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-143751434.142^v100^control&spm=1018.2226.3001.4187] - 6.帮我超越技术壁垒的“泰斗”服务--Amazon ElastiCache[https://blog.csdn.net/CC1991_/article/details/134001934?ops_request_misc=&request_id=&biz_id=102&utm_term=Amazon%20ElastiCache%E7%AE%80%E4%BB%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-134001934.142^v100^control&spm=1018.2226.3001.4187] - 7.AWS SimuLearn: Boosting Banking Application Performance @Zgh_332