Amazon ElastiCache 常见问题

一般性问题

Amazon ElastiCache 是一项 Web 服务,可简化云中符合 Memcached 或 Redis OSS 协议的缓存的部署和运行。ElastiCache 支持您从快速的托管型内存系统检索信息,而不是依赖于速度较慢、基于磁盘的系统,从而提高了应用程序的性能。本服务可简化并减少内存环境的管理、监控和运营任务,让您的工程资源专注于应用程序开发。借助 ElastiCache,您不仅能够改善用户操作和查询的加载与响应时间,还可降低扩展 Web 应用程序所需的费用。

ElastiCache 可以自动化执行运营分布式内存键值环境所需的常见管理任务。借助 ElastiCache,只需在 AWS 管理控制台内执行几个步骤,即可在几分钟内为您的应用程序架构添加缓存或内存层。ElastiCache 旨在自动保持高可用性,并提供 99.99% 可用性的服务水平协议(SLA)。ElastiCache 可兼容 Memcached 和 Redis OSS 协议,因此,您在当前 Memcached 或 Redis OSS 环境中使用的代码、应用程序和常用工具都能与本服务无缝协作。您无需预先投资,而且只需为所使用的资源付费。

ElastiCache 提供的内存缓存可以大幅改善许多高读取应用程序工作负载(如社交网络、游戏、媒体分享和问答门户)或计算密集型负载(如推荐引擎)的延迟性和吞吐量。内存缓存可将重要数据存储在内存中以实现低延迟访问,从而提高应用程序性能。缓存信息可能包括 I/O 密集型数据库查询的结果或计算密集型计算的结果。

ElastiCache 可以管理设置分布式内存环境所涉及的各项工作,从预置您请求的资源到安装软件等。使用 Amazon ElastiCache Serverless 时,无需配置和管理任何基础设施。在设计您自己的 ElastiCache 集群时,该服务会自动执行常见管理任务,例如软件修补以及故障检测和恢复。ElastiCache 提供与您的资源相关的详细监控指标,使您能够快速诊断问题并对问题做出反应。例如,您可以设置阈值,在其中一个缓存收到的请求过载时接收警报。

ElastiCache 为需要亚毫秒级响应时间的要求最高的应用程序的提供完全托管型 Redis OSS 和 Memcached。

如果还没有注册 ElastiCache,则可以选择 ElastiCache 页面上的“开始使用”,然后完成注册过程。您必须拥有 AWS 账户才能访问此服务;如果还没有该账户,则在您开始 ElastiCache 注册过程时,系统将提示您创建一个账户。注册 ElastiCache 后,请参阅 ElastiCache 文档(其中包含我们的 Amazon ElastiCache 入门指南)。

熟悉 ElastiCache 后,即可使用控制台或 ElastiCache API 在几分钟内创建缓存集群。

创建缓存非常简单,可以使用控制台、ElastiCache API 或命令行工具进行创建。使用 ElastiCache Serverless 时,您可以使用默认推荐设置创建缓存,一分钟内即可开始使用。

无服务器

ElastiCache Serverless 是一个无服务器选项,让您可以在一分钟内开始使用缓存,而无需进行基础设施预置或容量规划。ElastiCache Serverless 可持续监控缓存的计算、内存和网络利用率,无需进行耗时的容量规划过程,因此可以立即扩展以满足需求,而不会造成停机或性能下降。ElastiCache Serverless 自动跨多个可用区(AZ)复制数据,并针对每个缓存为客户提供 99.99% 可用性的服务水平协议(SLA)。使用 ElastiCache Serverless,您只需为您存储的数据和应用程序使用的计算资源付费。要开始使用,您只需几个步骤即可创建 ElastiCache 无服务器缓存,方法是在控制台、ElastiCache 开发工具包(SDK)或 AWS 命令行界面(AWS CLI)中指定缓存名称。

您可以通过将 Redis OSS 或 Memcached 端点更改为应用程序中的新 ElastiCache Serverless 缓存端点来移动现有 ElastiCache 工作负载。您可以通过指定备份文件的 Amazon Simple Storage Service(Amazon S3)位置将现有 ElastiCache 数据迁移到 ElastiCache Serverless。请访问我们的 ElastiCache Serverless 文档,了解有关迁移工作负载的更多信息。

ElastiCache Serverless 支持 Redis OSS 7.0 版本和 Memcached 1.6.21 及以上版本。

ElastiCache Serverless 会持续监控缓存的内存、计算和网络利用率,以即时扩展。ElastiCache Serverless 允许缓存纵向扩展并并行启动横向扩展,从而及时满足应用程序需求,从而在不造成应用程序停机或性能下降的情况下进行扩展。请访问我们的 ElastiCache Serverless 文档,了解有关扩展的更多信息。

ElastiCache 无服务器可自动跨多个可用区(AZ)冗余存储数据冗余,并为所有工作负载提供 99.99% 可用性的服务水平协议(SLA)

使用 ElastiCache Serverless,您只需为您存储的数据和应用程序使用的计算付费。访问 ElastiCache 定价页面了解更多信息。

预留节点

当您承诺使用一年或三年期限时,预留节点或预留实例(RI)可为您提供可观的按需使用折扣。借助预留节点,您可以一次性支付预付款来购买一年或三年期的预留服务,以在特定区域运行缓存。您还可在当前每小时使用费率的基础上享受大幅折扣。预留节点有三种类型(全额预付、不预付和部分预付),您可以通过这些选项平衡您的预付款与您的有效小时价格。

预留节点提供的折扣适用于 ElastiCache Serverless 按需使用。ElastiCache Serverless 与预留节点不兼容。

您最多可以购买 300 个预留节点。如果要运行的节点超过 300 个,请填写 ElastiCache 节点申请表

在当前节点运行所在的区域(同时也是要使用预留的区域)购买相同级别的预留节点。成功购买预留节点后,ElastiCache 将自动对您现有的节点应用新的小时使用费率。

收到您的请求并处理付款授权后,系统将会激活与预留节点相关联的定价变更。您可以在“AWS 账户活动”页面或使用 DescribeReservedCacheNodes API 跟踪预留的状态。如果在下一账单周期前未成功授权一次性付款,折扣价格则不会生效。

预留期限到期后,您的预留节点将恢复为相应节点级别和区域的按需节点小时费率。

对于按需节点和预留节点而言,用于创建、修改和删除节点的 ElastiCache API 是相同的,因此,您可以无缝使用这两种节点。计算账单时,我们的系统将自动应用您的预留费率,即所有符合条件的节点都将按较低的预留缓存节点小时费率收费。

每个预留节点都与特定的区域相关联,且在预留期限内应保持关联区域不变,因而无法更改区域。不过,每个预留在关联区域的任何可用区都可用。

不能,您无法取消节点预留,而且一次性付款(如果适用)也不可退款。无论您使用多少容量,在预留节点有效期内都必须继续支付小时费率。

当您按照全额预付款选项购买预留节点时,您需要用一次预付付款方式为预留节点的整个期限付款。您可以通过选择不预付选项,不支付任何预付费用。不预付预留节点的总价值将分摊到实例期限内的每个小时,您将为该期限内的每个小时付费,无论使用情况如何。部分预付款选项是全额预付款和不预付选择的混合。进行小额预付款后,您将按较低的小时费率为实例期限内的每个小时付费,无论使用情况如何。

是的,ElastiCache 预留节点可在实例系列(或节点系列)和 AWS 区域内提供大小灵活性功能。这意味着现有的折扣后的预留节点费率将自动应用于同一节点系列中的各种大小的使用量。

安全性

ElastiCache 允许您使用 AWS Key Management Service(AWS KMS)配置静态数据加密、使用传输层安全性协议(TLS)配置传输中数据加密、使用 AWS Identity and Access Management(IAM)进行身份验证以及使用 Amazon Elastic Compute Cloud(Amazon EC2)安全组进行网络访问控制。

不使用 Amazon Virtual Private Cloud(Amazon VPC)时,ElastiCache 允许您通过网络安全组控制对缓存的访问。安全组的作用类似于防火墙,用于控制对缓存的网络访问。默认情况下,不允许对缓存进行网络访问。如果希望应用程序可以访问您的缓存,必须显式启用来自特定 Amazon EC2 安全组中主机的访问。

您还可以使用 IAM 身份验证控制对 ElastiCache 资源的访问。有关更多信息,请参阅“使用 IAM 进行身份验证”文档

合规性

ElastiCache 支持 SOC 1、SOC 2、SOC 3、ISO、MTCS、C5、PCI DSS、HIPAA 和 FedRAMP 等合规性计划。请参阅按合规性计划提供的范围内 AWS 服务,查看受支持的合规性计划的最新列表。

符合,AWS PCI 合规性计划已将 ElastiCache 作为一项符合 PCI 要求的服务纳入该计划。要了解更多信息,请参阅以下资源:

要查看将 ElastiCache 纳入范围内的合规性计划的最新列表,请参阅按合规性计划提供的范围内 AWS 服务

符合,ElastiCache 是一项符合 HIPAA 要求的服务,并且包含在 AWS 商业伙伴协议(BAA)中。也就是说,您可以借助 ElastiCache 来处理、维护和存储受保护的健康信息(PHI)以及为医疗保健应用程序提供支持。

否,使用合规性功能不会产生任何额外费用。

如果您与 AWS 签署了商业伙伴协议(BAA),则可以使用 ElastiCache 构建根据 HIPAA 存储和处理 HI 的应用程序。如果您未签订 BAA,或对将 AWS 用于应用程序有其他疑问,请联系我们了解详细信息。 

AWS FedRAMP 合规性计划已将 ElastiCache 作为一项由 FedRAMP 授权的服务纳入。美国政府客户及其合作伙伴现在可以使用最新版本的 ElastiCache 在 AWS GovCloud(美国东部)和 AWS GovCloud(美国西部)区域处理和存储其 FedRAMP 系统、数据以及任务关键型、高影响力的工作负载,在美国东部(俄亥俄州)、美国东部(弗吉尼亚州北部)、美国西部(北加利福尼亚)和美国西部(俄勒冈州)区域处理和存储中等影响力的工作负载。

要了解更多信息,请参阅以下资源:

要查看将 ElastiCache 纳入范围内的合规性计划的最新列表,请参阅按合规性计划提供的范围内 AWS 服务

Redis OSS 常见问题

功能

ElastiCache 是一项 Web 服务,可简化云中符合 Redis OSS 协议的缓存的部署和运行。该服务可以支持 Redis OSS 节点的管理、监控和运行;而节点的创建、删除和修改可通过 ElastiCache 控制台、AWS CLI 或 Web 服务 API 执行。ElastiCache 支持高可用性配置,包括启用 Redis OSS 集群模式和禁用集群模式,并支持从主服务器到副本的自动失效转移。

是的,ElastiCache 设计为与 Redis OSS 在协议上兼容。因此,您在现有的独立 Redis OSS 数据存储内使用的代码、应用程序、驱动程序和工具仍然能与 ElastiCache 协作,将现有 Redis OSS 部署迁移到 ElastiCache 时,不需要更改代码,除非另有要求。

请参阅我们的定价,了解最新的定价信息。

符合。通过 ElastiCache,您可以在另一个 AWS 可用区中创建一个只读副本。使用 ElastiCache Serverless 时,数据会自动以冗余方式存储在多个可用区中,以实现高可用性。在设计您自己的 ElastiCache Serverless 缓存时,如果某个节点出现故障,我们将预置一个新节点。在主节点失败的情况下,ElastiCache 会自动将一个现有的只读副本提升到主角色。有关如何处理节点故障的更多详细信息,请访问了解复制

您可以使用 ElastiCache API 并指定您的首选引擎版本来快速升级到较新的引擎版本。在 ElastiCache 控制台中,您可以选择缓存并选择修改。引擎升级过程旨在保留您的现有数据。有关更多详细信息,请参阅缓存策略和最佳实践

不能。不支持降级至较低的引擎版本。

符合。您可以使用 ElastiCache 中的全球数据存储功能来创建跨区域副本。全球数据存储提供快速、可靠且注重安全的完全托管式跨区域复制。借助该功能,您可以在一个区域中写入 ElastiCache 集群,同时还可以最多从其他两个跨区域副本集群中读取数据,从而实现跨区域的低延迟读取和灾难恢复。

性能

ElastiCache 提供增强型 I/O 线程,通过多路传输、表示层卸载等方式,显著提高了大规模吞吐量和延迟。增强型 I/O 线程通过使用更多内核来处理 I/O 并动态调整工作负载来提高性能。ElastiCache 通过将加密转移到相同的增强型 I/O 线程来提高支持 TLS 的集群的吞吐量。ElastiCache(Redis OSS)7.0 版引入了增强型 I/O 多路复用,它将许多客户端请求合并到一个通道中,并提高了 Redis OSS 主线程的效率。

ElastiCache(Redis OSS)7.1 版及更高版本中,我们扩展了增强型 I/O 线程的功能,使其还能处理表示层逻辑。增强型 I/O 线程不仅可以读取客户端输入,还可以将输入解析为 Redis OSS 二进制命令格式,然后将其转发到主线程执行,从而提高性能。与之前的版本相比,使用 ElastiCache(Redis OSS)7.1 版使吞吐量提高多达 100%,P99 延迟降低多达 50%。在 r7g.4xlarge 或更大的节点上,您可以实现每个节点每秒处理超过 100 万个请求(RPS)。

ElastiCache 提供两组不同的指标来衡量缓存的 CPU 利用率,具体取决于您的缓存部署选择。使用 ElastiCache Serverless 时,您可以使用 ElastiCache 处理单元(ECPU)指标监控 CPU 利用率。您的请求消耗的 ECPU 数量取决于 vCPU 所用时间和传输的数据量。每个读取和写入(例如 Redis OSS GET 和 SET 命令或 Memcached get 和 set 命令)每传输一千字节(KB)数据需要 1 个 ECPU。某些对内存数据结构进行操作的 Redis OSS 命令消耗的 vCPU 时间可能比 GET 或 SET 命令更多。ElastiCache 根据命令所花费的 vCPU 时间与 Redis OSS SET 或 GET 命令所花费的 vCPU 时间的基准进行比较,计算消耗的 ECPU 数量。如果您的命令需要额外的 vCPU 时间并传输比 1 个 ECPU 基准更多的数据,则 ElastiCache 将根据两个维度中的较高者计算所需的 ECPU。

在设计自己的集群时,您可以监控引擎 CPU 利用率和 CPU 利用率。CPUUtilization 指标用于衡量实例(节点)的 CPU 利用率,EngineCPUUtilization 指标用于衡量 Redis OSS 进程级别的利用率。除了 CPUUtilization 指标,您还需要 EngineCPUUtilization 指标,因为主 Redis OSS 进程是单线程的,只使用实例上可用的多个 CPU 内核中的一个 CPU。因此,CPUUtilization 指标不能准确反映 Redis OSS 进程级别的 CPU 利用率。我们建议您同时使用 CPUUtilization 和 EngineCPUUtilization 指标,以详细了解 Redis OSS 集群的 CPU 利用率。

这两组指标现已面向所有 AWS 区域开放,您可以使用 Amazon CloudWatch 或者在控制台中访问它们。此外,我们还建议您访问文档以了解用于性能监控的有用指标。

只读副本

只读副本在 Redis OSS 中起两种作用:

  • 故障处理
  • 读取扩展

当您将缓存用作只读副本时,“主节点”既可用于写入,也可用于读取。副本仅提供读取流量,在主数据库受损时也可用作热备用副本。

使用 ElastiCache Serverless 时,只读副本由服务自动维护。在设计自己的缓存时,在很多情况下,为给定主节点部署一个或多个只读副本可能很有意义。部署只读副本的常见原因包括:

  • 针对读取密集型工作负载进行扩展,突破单个主节点的计算或 I/O 容量的限制:这样,过多的读取流量将被引导至一个或多个读取副本。
  • 在主节点不可用时提供只读副本:如果您的主节点无法处理 I/O 请求(例如,由于备份或计划维护而暂停 I/O),可以将读取流量引导到只读副本中。对于这种使用案例,请注意由于主节点实例不可用,只读副本中的数据可能会“陈旧”。只读副本还可用于预热,以重启发生故障的主数据库。
  • 数据保护场景:如果发生主节点所在可用区不可用或主节点故障这种不太可能出现的情况,您可以将不同可用区中的只读副本提升为新的主节点。 

您可以像连接主缓存节点一样连接到只读副本。如果有多个只读副本,各个副本之间的读取流量分配方式则取决于应用程序。以下是更多详细信息:

  • Redis(已禁用集群模式)OSS 集群,使用单个节点端点进行读取操作。(在 API/CLI 中,它们称为读取端点。)
  • Redis(已禁用集群模式)OSS 集群,使用群集的配置端点进行所有操作。您必须使用支持 Redis OSS 集群的客户端(Redis OSS 3.0)。您仍然可以从单个节点端点进行读取。(在 API 和 CLI 中,它们称为读取端点。)

ElastiCache 允许您为给定的主缓存节点最多创建五(5)个只读副本。

如果发生故障转移,所有关联和可用的只读副本在故障转移完成后将自动恢复复制(获取最新提升的只读副本的更新)。

主缓存节点的更新会自动复制到所有关联的只读副本。不过,鉴于 Redis OSS 的异步复制技术,出于各种原因,只读副本更新可能会落后于其主缓存节点。常见的原因包括:

  • 主缓存节点的 I/O 写入量超过了将更改应用于只读副本的速率。
  • 主缓存节点和只读副本之间有网络分区或延迟。

只读副本受 Redis OSS 复制的优点和缺点影响。如果使用只读副本,您应了解只读副本与其主缓存节点之间可能存在滞后或“不一致”。 ElastiCache 会发出指标以帮助您了解不一致性。

只读副本按标准的缓存节点进行计费,且费率相同。和标准的缓存节点一样,只读副本的每“缓存节点小时”费率取决于只读副本的缓存节点类:有关最新的定价信息,请访问 ElastiCache 定价页面。在主缓存节点和只读副本之间复制数据,产生的数据传输不收取费用。只读副本的账单周期从成功创建只读副本后(即当列出的状态为“有效”时)开始。只读副本将一直按标准的 ElastiCache 缓存节点小时费用计费,直到您发布命令将其删除为止。

ElastiCache 支持启动失效转移,这样您可以尽快恢复缓存操作。失效转移后,ElastiCache 会让缓存节点的 DNS 记录指向只读副本,只读副本转而成为新的主节点。我们建议您遵循最佳实践,在应用程序层实施缓存节点连接重试。从开始到结束(下面的第 1 到第 5 步)通常用时 6 分钟。

这些是自动失效转移事件,按发生的顺序列出:

  1. 复制组消息:为节点组 <node-group-id> 调用的测试失效转移 API
  2. 缓存集群消息:从主节点 <primary-node-id> 失效转移到副本节点 <node-id> 已完成
  3. 复制组消息:从主节点 <primary-node-id> 失效转移到副本节点 <node-id> 已完成
  4. 缓存集群消息:恢复缓存节点 <node-id>
  5. 缓存集群消息:缓存节点 <node-id> 的恢复已完成

不可以,您只可以在相同区域的同一可用区或不同可用区内预置只读副本作为您的主缓存节点。 但是,您可以使用全球数据存储在 AWS 区域间进行快速、可靠且注重安全的完全托管型复制。使用此功能,您可以为 ElastiCache 创建跨区域只读副本集群,以实现跨 AWS 区域的低延迟读取和灾难恢复。

符合。您可以使用控制台或 DescribeCacheClusters API 查看当前主节点的位置。

符合。您可以在 Redis OSS 集群环境中添加和删除一个或多个分片中的只读副本。在此操作期间,该集群仍然保持在线,并为传入 I/O 提供支持。

多可用区

多可用区是一项功能,可让您在设计自己的 ElastiCache 缓存时以可用性更高的配置运行。所有 ElastiCache Serverless 缓存都会在多可用区配置中自动运行。ElastiCache 复制组由一个主节点和最多五个只读副本组成。如果启用了多可用区,则每个主节点至少需要一个副本。在特定类型的计划维护期间,或 ElastiCache 节点故障或可用区故障(不太可能发生)期间,ElastiCache 将自动检测主节点故障、选择一个只读副本并将其提升为新的主节点。ElastiCache 还将传送所提升只读副本的 DNS 更改,因此,如果您的应用程序正在写入主节点的终端节点,则不需要更改终端节点。

在多可用区模式下运行 ElastiCache 的主要好处在于,提高了可用性并降低了管理需要。在多可用区配置中运行 ElastiCache 时,您的缓存有资格获得 99.99% 可用性的 SLA。如果 ElastiCache 主节点发生故障,那么您读取和写入主节点的能力受到的影响也仅限于完成自动失效转移所需要的时间。启用多可用区后,ElastiCache 节点会自动进行失效转移,不需要进行管理。您不再需要监控您的 Redis OSS 节点,也不再需要在主节点故障时手动启动恢复。

如果您正在使用 ElastiCache 并有一个包含一个主节点以及一个或多个只读副本组的复制组,则可以使用多可用区。如果主节点发生故障,ElastiCache 将自动检测该故障,然后从可用的只读副本中选择一个副本并将其提升为新的主节点。ElastiCache 将会传播所提升副本的 DNS 更改,因此您的应用程序可以持续写入端点。此外,ElastiCache 还将启动一个新节点来替代与故障主节点处在同一可用区的已提升只读副本。如果主节点因可用区临时故障而发生故障,那么该可用区恢复之后,新的副本即会启动。

符合。请注意,如果将主节点和副本放在同一可用区中,ElastiCache 复制组就无法灵活响应可用区的故障。此外,如果启用了多可用区,则不允许将副本与主可用区放在同一可用区。

如果发生以下任何情况,ElastiCache 将会失效转移到只读副本:

  • 主可用区中断可用性
  • 主区域的网络连接受损
  • 主区域的计算设备出现故障

如果只读副本不止一个,系统将提升向主节点进行异步复制时延迟较小的只读副本。

是的,ElastiCache 将创建一个事件,用于通知您已执行自动失效转移。您可以使用 DescribeEvents API 来返回与 ElastiCache 节点相关的事件信息,也可以选择 ElastiCache 管理控制台中的“事件”部分。

可用区与同一区域内的其他可用区之间可以实现低延迟网络连接。您在设计应用程序及其他 AWS 资源的架构时应该考虑跨多个可用区设置冗余,以便应用程序在出现可用区故障时能够灵活反应。

有关多可用区的更多信息,请参阅 ElastiCache 文档

备份和还原

“备份与还原”是一项功能,让您能够为 ElastiCache 缓存创建快照。ElastiCache 会存储这些快照,以便用户以后用来还原缓存。

对于因节点故障以及不太可能出现的硬件故障造成的数据丢失,创建快照非常有用。使用备份的另一个常见原因是用于存档。快照存储在 Amazon S3 中。

发起备份后,ElastiCache 会拍摄指定缓存的快照,而快照可以在以后用于恢复或存档。您可以随时启动备份,也可以设置为每日定期备份,其保留期可长达 35 天。当您选择一个快照进行还原时,系统会创建一个新的 ElastiCache 缓存并填充快照中的数据。ElastiCache 快照与 Redis OSS RDB 文件格式兼容。

您可以通过控制台、ElastiCache API 和 AWS CLI 使用“备份与还原”功能。您可以随时停用和重新激活该功能。

“备份与还原”功能基于每个集群创建快照。用户可以通过控制台、AWS CLI 或 ElastiCache API 指定要备份的 ElastiCache 缓存。我们建议用户对缓存的其中一个只读副本启用备份,以最大限度地降低可能对主副本产生的任何影响。使用 ElastiCache Serverless 时,会自动对只读副本进行备份。

可以,您可以将 ElastiCache 快照导出到您的缓存所在区域内的授权 S3 存储桶中。

符合。您必须首先将快照复制到在同一区域内选择的授权 S3 存储桶中,然后向另一个账户授予跨账户存储桶权限。

ElastiCache 为每个 ElastiCache 活动缓存免费提供一个快照的存储空间。额外存储将根据快照占用的空间收取费用,每月 0.085 USD/GB(所有区域的价格相同)。免费提供快照数据传输。

当您删除 ElastiCache 缓存时,您的手动快照将被保留。您还可以选择在删除缓存前创建一个最后的快照。自动缓存快照不会保留。

增强型引擎

ElastiCache 内的引擎与 Redis OSS 完全兼容,但前者具有一系列增强功能,提高了其性能、功能性和稳定性。部分增强功能包括:

  • 可用内存增加:您现在可以放心地为应用程序分配更多内存,而不会导致在同步和拍摄快照时提高交换区使用率。
  • 同步功能得到改进:在过载和恢复网络连接时,具有更强大的同步功能。此外,由于主节点和副本不再使用磁盘进行此操作时,因此同步速度更快。
  • 失效转移更加顺利:失效转移时,副本不再刷新数据来与主节点进行全面重新同步,您的分片现在可以更快速地恢复。
  • TLS 卸载和 IO 多路传输:ElastiCache 设计为在专用线程上处理某些与网络相关的进程,从而更好地利用可用的 CPU 资源。

不需要,增强型引擎与 Redis OSS 完全兼容,因此,您无需对应用程序代码作出任何更改,即可享受其改进的稳定性和强大功能。

使用增强型引擎,不会额外收取任何费用。

加密

静态加密提供了防止未经授权访问数据的机制。启用后,它会对以下方面进行加密:

  • 同步、备份和交换操作期间的磁盘
  • 存储在 Amazon S3 中的备份

ElastiCache 提供默认(服务托管的)静态数据加密,并提供在 AWS KMS 中使用您自己客户自主管理型对称式 AWS KMS 密钥的能力。访问静态加密以了解更多信息。

传输中数据加密功能有助于对客户端与 ElastiCache 之间以及服务器(主节点和只读副本)间的通信进行加密。阅读有关 ElastiCache 传输中加密的更多信息。

在创建 ElastiCache 缓存时,您可以选择传输中加密、静态加密、Redis OSS AUTH 和基于角色的访问控制(RBAC)。如果您启用了传输中加密,您可以选择使用 Redis OSS AUTH 或 RBAC 增强安全性和访问控制。

不需要。ElastiCache 会在后台管理证书过期和续订。后续证书维护不需要用户执行任何操作。

不需要,使用加密功能无需支付额外费用。

Global Datastore

全球数据存储是 ElastiCache 的一项功能,可提供快速、可靠且注重安全的完全托管式跨区域复制。借助 Global Datastore,您可以在一个区域向缓存写入内容,同时最多可在其他两个跨区域副本集群中读取数据,从而实现跨区域的低延迟读取和灾难恢复。

Global Datastore 专为业务全球化的实时应用程序而设计,通常可在不到一秒钟的时间内跨区域复制数据,通过提供更接近最终用户的地理本地读取来提高应用程序的响应速度。在发生可能性较小的区域降级的情况下,可以将其中一个运行良好的跨区域副本缓存升级为具有完全读写能力的主缓存。启动后,升级通常会在一分钟内完成,使您的应用程序保持可用状态。

您最多可以在 Global Datastore 中复制到两个次要区域。在区域降级(发生的可能性很小)的情况下,您可以将次要区域中的缓存用于低延迟本地读取和灾难恢复。

ElastiCache(Redis OSS)5.0.6 及更高版本支持 Global Datastore。

否,当主集群(区域)降级时,ElastiCache 不会自动升级次集群。您可以通过将次集群提升为主集群来手动启动失效转移。次集群的失效转移和升级通常会在一分钟内完成。

Global Datastore 对跨区域流量使用传输中加密,以更好地保护您的数据。此外,您还可以使用静态加密对主缓存和次缓存进行加密,以更好地保护您的数据。每个主缓存和次缓存可以使用单独的客户自主管理型 AWS KMS 密钥进行静态加密。

ElastiCache 没有提供适用于 RPO 和 RTO 的 SLA。RPO 根据区域之间的复制滞后情况而有所不同,并且取决于区域之间的网络延迟和跨区域的网络流量拥塞情况。Global Datastore 的 RPO 通常不到一秒,因此写入主区域的数据在一秒钟之内可用于次要区域。Global Datastore 的 RTO 通常不超过一分钟。一旦启动到次集群的失效转移,ElastiCache 通常会在一分钟之内将次集群升级为具有完全读写能力。

ElastiCache 没有提供适用于 RPO 和 RTO 的 SLA。RPO 根据区域之间的复制滞后情况而有所不同,并且取决于区域之间的网络延迟和跨区域的网络流量拥塞情况。Global Datastore 的 RPO 通常不到一秒,因此写入主区域的数据在一秒钟之内可用于次要区域。Global Datastore 的 RTO 通常不超过一分钟。一旦启动到次集群的失效转移,ElastiCache 通常会在一分钟之内将次集群升级为具有完全读写能力。

数据分层

数据分层提供了一个具有性价比的新选项,除了在内存中存储数据外,还可以在每个集群节点中使用成本较低的固态硬盘(SSD)。它非常适合定期访问 20% 以内总体数据集的工作负载,以及在 SSD 上访问数据时能够容忍额外延迟的应用程序。与仅具有内存的 ElastiCache R6g 节点相比,具有内存和固态硬盘的 ElastiCache R6gd 节点在最大利用率下运行时,总存储容量增加了近 5 倍,可帮助客户实现超过 60% 的成本节约。

数据分层的工作原理是,在可用内存容量完全消耗时,自动且透明地将最近使用最少的项目从内存移动到本地连接的 NVMe SSD。当随后访问移动到 SSD 的项目时,ElastiCache 会在服务请求之前将其异步移回内存。

数据分层旨在将对应用程序性能的影响降至最低。假设有 500 字节的字符串值,与对内存中数据的请求相比,对存储在 SSD 上的数据的请求平均会有 300µs 的延迟。

ElastiCache 的 Redis OSS 6.2 版及更高版本支持数据分层。

ElastiCache 支持使用 R6gd 节点在集群上进行数据分层。

使用数据分层时支持所有 Redis OSS 命令和大多数 ElastiCache 功能。有关使用数据分层的集群不支持的功能的列表,请参阅文档

除了节点的每小时费用以外,使用数据分层没有任何其他费用。具有数据分层的节点可以按需定价和作为预留节点使用。有关定价,请参阅 ElastiCache 定价页面

Memcached 功能

可以使用 ElastiCache for Memcached 来缓存多种对象。这些对象包括持久性数据存储(例如 Amazon Relational Database Service(Amazon RDS)、Amazon DynamoDB 或 Amazon EC2 上的自主管理型数据库)中的内容、动态生成的网页(例如使用 Nginx 生成的网页)以及可能不需要持久性备份存储的临时会话数据。也可以用它来实施高频计数器,以便在高容量 Web 应用程序中部署允入控制。

符合。ElastiCache 是 Amazon RDS 和 DynamoDB 等数据存储的理想前端,可以为具有极高请求速率或极低延迟要求的应用程序提供一个高性能的中间层。

ElastiCache 兼容 Memcached 协议。因此,您可以使用标准的 Memcached 操作,如 get、set、incr 和 decr,使用方式也和您现有的 Memcached 部署完全相同。ElastiCache 支持文本和双字节协议。它还支持大多数标准的统计结果,也可通过 CloudWatch 以图形方式查看。因此,您可以无缝切换为使用 ElastiCache,无需重新编译或重新链接您的应用程序,您使用的库可以继续工作。要配置应用程序所访问的缓存服务器,请更新应用程序的 Memcached 配置文件,将我们为您预置的服务器(节点)端点包含在内。可以使用控制台中的“复制节点端点”选项或 DescribeCacheClusters API,获取端点列表。与任何迁移过程相同,我们建议您先对新的 ElastiCache 部署进行完整的测试,而后再完成当前解决方案的割接工作。

您可以从 Amazon EC2 网络或您自己的数据中心访问 Amazon VPC 中的 ElastiCache 集群。有关更多详细信息,请参阅 Amazon VPC 访问模式。ElastiCache 使用 DNS 条目来允许客户端应用程序定位服务器(节点)。节点的 DNS 名称保持不变,但节点的 IP 地址可能会不时更改。例如,在非 VPC 安装出现故障后,系统会自动更换节点,此时 IP 地址即会更改。有关如何处理节点故障的建议,请参阅此常见问题。

配置和扩展

虽然此问题没有明确的答案,但使用 ElastiCache 时,您无需担心节点数量是否恰当,因为日后您可以快速添加或删除节点。您还可以使用 ElastiCache Serverless 来简化运行高度可用的 Memcached 缓存。在选择初始配置时,您可以考虑以下两个互为关联的因素:

  • 达到目标缓存命中率所需的数据总内存量,以及
  • 保持可接受的应用程序性能且不会在节点故障时造成数据库后端过载所需的节点数量。

所需的内存量取决于您的数据集的大小,以及应用程序的访问模式。要提高容错能力,请在大体了解所需的内存总量后,将该内存量分配到足够数量的节点,以便您的应用程序在一两个节点出现故障时依然可以运行。例如,如果您的内存要求为 13GB,则您可能需要使用两个 cache.m4.large 节点,而不是一个 cache.m4.xlarge 节点。请务必确保在一个或多个节点的故障恢复期间,当缓存命中率暂时降低时,数据库等其他系统不会过载。有关详细信息,请参阅 ElastiCache 用户指南

符合。创建集群或向现有集群添加节点时,可以为新节点选择可用区。可以在每个可用区中指定请求的节点数量,也可以选择“跨区域分布节点”。如果集群位于 Amazon VPC 中,则节点只可以放置在属于所选缓存子网组的可用区中。有关其他详细信息,请参阅 ElastiCache VPC 文档

您最多可以在每个区域运行 300 个节点。如果需要运行更多节点,请填写 ElastiCache 上限提高申请表

该服务可以检测节点故障,并通过下列自动化步骤进行响应:

  • ElastiCache 将通过请求获取新的服务资源来修复节点,然后将节点的现有 DNS 名称重定向到新的服务资源。对于 Amazon VPC 安装,ElastiCache 将会确保在发生故障时,当节点恢复之后,节点的 DNS 名称和 IP 地址均保持不变。对于非 Amazon VPC 安装,ElastiCache 将会确保节点的 DNS 名称保持不变,但节点的基础 IP 地址可能会更改。
  • 如果您已将一个 SNS 主题与您的集群关联,在新节点配置完成并可投入使用时,ElastiCache 将向您发送 SNS 通知,告知您节点已恢复。如此一来,您可以安排您的应用程序强制 Memcached 客户端库尝试重新连接修复后的节点。这可能很重要,因为一些 Memcached 库在遇到服务器(节点)通信错误或超时时,会无限期地停止使用该服务器。

您可以向现有的 Memcached 集群添加更多节点,即在控制台中,使用您的缓存群集所对应的“节点”选项卡上的“添加节点”选项,或者调用 ModifyCacheCluster API。

兼容性

ElastiCache 是 Amazon RDS 和 DynamoDB 等 AWS 服务的理想前端选择,可为高性能应用程序提供极低的延迟性并卸载一些请求容量,而这些服务同时还能提供良好的数据持久性。在与 Amazon EC2 和 Amazon EMR 一起使用时,该服务还可用于提高应用程序性能。

尽管并非全部,Memcached 客户端库适合众多流行的编程语言。如果您在使用 ElastiCache 时遇到任何具体的 Memcached 客户端问题,请在 ElastiCache 社区论坛联系我们。

Auto Discovery

Auto Discovery 是帮助开发人员节省时间和精力,并降低应用程序复杂性的一种功能。向 ElastiCache 集群添加或删除缓存节点时,Auto Discovery 可以通过客户端实现缓存节点的自动发现。以前,为了应对集群成员资格的变动,开发人员必须手动更新缓存节点的端点列表。根据客户端应用程序的构建方式,一般而言,需要进行客户端初始化,其方法是关闭和重启应用程序,而这会导致停机。通过 Auto Discovery,ElastiCache 消除了这种复杂性。利用 Auto Discovery,除了可向后兼容 Memcached 协议以外,ElastiCache 还向客户端提供有关缓存群集成员资格的信息。能够处理更多信息的客户端,无需任何初始化操作便能自我再新配置,从而使用 ElastiCache 集群的最新节点。

ElastiCache 集群可以利用通过指定端点进行寻址的节点来创建。通过 Auto Discovery,ElastiCache 集群还获得了一个特有的配置端点,它是一条在集群生命周期内均有效的 DNS 记录。此 DNS 记录包含属于该集群的节点的 DNS 名称。ElastiCache 将确保配置端点始终指向至少一个此类“目标”节点。然后,一个针对目标节点的查询将为相关集群的所有节点返回端点。此后,您可以像从前一样连接集群节点和使用各种 Memcached 协议命令,如 get、set、incr 和 decr。有关更多详细信息,请参阅文档。要使用 Auto Discovery 功能,您将需要一个支持 Auto Discovery 的客户端。从 ElastiCache 控制台下载适用于 .Net、Java 和 PHP 的 Auto Discovery 客户端。完成初始化后,此客户端将使用配置端点自动确定 ElastiCache 集群的最新成员。通过添加或删除节点修改缓存群集时,或者因发生故障替换某节点后,Auto Discovery 客户端会自动确定发生的变动,而您无需手动初始化客户端。

要开始使用,请先选择 ElastiCache 控制台中的“下载 ElastiCache 集群客户端”链接,以下载 ElastiCache 集群客户端。下载前,您必须已有 ElastiCache 账户;如果您还没有账户,那么您可以在 ElastiCache 详细信息页面进行注册。下载客户端后,您可以通过访问 ElastiCache 控制台来设置并激活 ElastiCache 集群。可在我们的文档中了解更多详情。

可以,您可以随时停用 Auto Discovery。您可以在 ElastiCache 集群初始化期间,通过指定工作模式来停用 Auto Discovery。另外,由于 ElastiCache 仍然支持 Memcached,因此您可以像从前一样使用任何在协议上与 Memcached 兼容的客户端。

要利用 Auto Discovery 功能,必须使用支持 Auto Discovery 的客户端来连接 ElastiCache 集群。ElastiCache 当前支持适用于 .Net、Java 和 PHP 且支持 Auto Discovery 的客户端。可从 ElastiCache 控制台下载这些客户端。您可以在市场上的主流 Memcached 客户端上创建任何其他语言的客户端。

您可以使用任何 Memcached 客户端程序库,并添加 Auto Discovery 支持功能。如果您希望添加或修改您自己的客户端来支持 Auto Discovery,请参阅 Auto Discovery 命令集文档

可以,ElastiCache 仍然遵从 Memcached 协议,因此不要求您更换客户端。但是,为了利用 Auto Discovery 功能,我们增强了 Memcached 客户端的功能。如果您选择不使用 ElastiCache 缓存集群客户端,则可以继续使用您现有的客户端,或修改您的客户端程序库,使其能理解 Auto Discovery 命令集。
 

可以,您可以同时使用支持 Auto Discovery 的客户端和传统的 Memcached 客户端连接同一个 ElastiCache 集群。ElastiCache 仍然 100% 遵从 Memcached 协议。

可以,您可以随时停用 Auto Discovery。您可以在 ElastiCache 集群初始化期间,通过指定工作模式来停用 Auto Discovery。另外,由于 ElastiCache 仍然支持 Memcached,因此您可以像从前一样使用任何在协议上与 Memcached 兼容的客户端。

引擎版本管理

使用 ElastiCache 时,您可以控制是否以及何时将为集群提供技术支持且符合 Memcached 协议规范的软件升级到 ElastiCache 支持的新版本。这使您能够灵活地保持与特定 Memcached 版本兼容,在生产中部署应用程序前针对新版本进行测试,以及根据自己的要求和时间执行版本升级。由于版本升级涉及一定的兼容性风险,因此这些升级不会自行启动,必须由您启动。这种软件修补方式让您能够主导版本升级,但仍然可以将应用程序修补工作移交给 ElastiCache。阅读后面的常见问题,可以了解有关版本管理的更多相关信息。此外,您也可以参阅 ElastiCache 用户指南。虽然引擎版本管理功能旨在让您尽可能多地控制执行修补的方式,但我们保留在系统或缓存软件存在任何安全漏洞时代表您修补集群的权利。

您可以在创建新集群时指定当前受支持的任何版本(次要或主要版本)。如果您要升级受支持的引擎版本,您可以使用集群的“修改”选项执行此操作。在“缓存引擎版本”字段中指定您希望升级到的版本。然后,Amazon ElastiCache 将立即(如果已选中“立即应用”选项)或在集群的下一个计划维护窗口代表您执行升级。

符合。要进行测试,您可以使用新引擎版本创建一个新集群。您可以将开发或暂存应用程序指向此集群并进行测试,而后再决定是否升级您的初始集群。

我们计划为 ElastiCache 支持更多 Memcached 的主要和次要版本。特定年度支持的新发布版本数量因 Memcached 发布版本的频率和内容而异,由工程团队负责版本全面审查的最终结果。

您可以通过“修改”过程来升级现有 Memcached 集群。从旧版 Memcached 升级到 Memcached 1.4.33 或更高版本时,请确保您的现有参数 max_chunk_size 的值满足 slab_chunk_max 参数需要的条件。请查看升级先决条件