本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
选择节点大小
您为 ElastiCache 集群选择的节点大小会影响成本、性能和容错能力。
节点大小(Valkey 和 RedisOSS)
有关 Graviton 处理器的优势的信息,请参阅 AWS Graviton 处理器
回答以下问题可以帮助您确定 Valkey 或 Redis OSS 实现所需的最低节点类型:
-
是否预期会出现采用多个客户端连接但吞吐量受限的工作负载?
如果是这种情况,并且您运行的是 Redis OSS 版本 5.0.6 或更高版本,则可以代表 Redis 引擎使用我们的增强型 I/O 功能来获得更好的吞吐量和延迟,该功能用于卸载客户端连接。CPUs OSS如果你运行的是 Redis 7.0.4 或更高OSS版本,除了增强的 I/O 之外,你还将通过增强的 I/O 多路复用获得额外的加速,即每个专用的网络 IO 线程将来自多个客户端的命令流水线程化到 Redis OSS 引擎,利用 Redi OSS s 高效地批量处理命令的能力。在 ElastiCache Redis OSS v7.1 及更高版本中,我们扩展了增强的 I/O 线程功能,使其也可以处理表示层逻辑。所说的表示层,我们的意思是增强型 I/O 线程现在不仅可以读取客户端输入,还可以将输入解析为 Redis OSS 二进制命令格式,然后将其转发到主线程执行,从而提高性能。有关更多详细信息,请参阅博客文章
和支持的版本页面。 -
您是否有仅会经常访问少部分数据的工作负载?
如果是这种情况,并且您运行的是 Redis OSS 引擎版本 6.2 或更高版本,则可以通过选择 r6gd 节点类型来利用数据分层。通过数据分层,最近最少使用的数据存储在中。SSD在检索这些数据时,虽然延迟会轻微增加,但是可以节省成本。有关更多信息,请参阅 数据分层 ElastiCache。
有关更多信息,请参阅 受支持的节点类型。
-
您的数据共需要多少内存量?
要获得一般估计值,请取要缓存的项目的大小。将此大小乘以同时要保留在缓存中的项目数。要获得项目大小的合理估计值,请先序列化您的缓存项目,再计算字符数。然后将该值除以集群中的分区数。
有关更多信息,请参阅 受支持的节点类型。
-
你运行的是哪个版本OSS的 Redis?
2.8.22 之前的 Redis OSS 版本要求您为故障转移、快照、同步和将副本提升为主操作预留更多内存。之所以有此要求,是因为您必须具有足够的内存来执行过程中的所有写入。
Redis OSS 版本 2.8.22 及更高版本使用无分叉保存进程,与之前的进程相比,该进程需要的可用内存更少。
有关更多信息,请参阅下列内容:
-
您的应用程序的写操作有多密集?
在拍摄快照或进行故障转移时,写操作密集的应用程序需要多得多的可用内存( 数据未使用的内存)。无论何时执行
BGSAVE
进程,必须有足够的、数据未使用的内存,以容纳在BGSAVE
过程中执行的所有写入。例如,在拍摄快照时、将主群集与群集中的副本同步时,以及启用仅追加文件 () AOF 功能时。另一个示例是将副本提升为主节点时(如果您启用了多可用区)。最糟糕的情况是在此过程中重写所有数据。在这种情况下,您需要的节点实例大小是数据所需的内存量的两倍。有关更多详细信息,请参阅 确保你有足够的内存来制作 Valkey 或 Redis 快照 OSS。
-
您的实现是独立的 Valkey 或 RedisOSS(已禁用集群模式)集群,还是具有多个分片的 Valkey 或 RedisOSS(已启用集群模式)集群?
Valkey 或 RedisOSS(已禁用集群模式)集群
如果您要实现 Valkey 或 RedisOSS(已禁用集群模式)集群,则您的节点类型必须能够容纳所有数据以及上一个项目符号中所述的必要开销。
例如,假设您估计所有项目的总大小为 12GB。在此情况下,您可以使用具有 13.3GB 内存的
cache.m3.xlarge
节点 或具有 13.5GB 内存的cache.r3.large
节点。但是,您可能需要更多内存才能执行BGSAVE
操作。如果您的应用程序写入操作繁重,请将内存要求翻倍至至少 24GB。因此,使用具有 27.9GB 内存的cache.m3.2xlarge
或具有 30.5GB 内存的cache.r3.xlarge
。带有多个分片的 Valkey 或 RedisOSS(已启用集群模式)
如果您要实现具有多个分片的 Valkey 或 RedisOSS(已启用集群模式)集群,则该节点类型必须能够容纳
bytes-for-data-and-overhead / number-of-shards
字节数据。例如,假设您估计所有项目的总大小为 12GB 且您具有两个分区。在此情况下,您可以使用具有 6.05GB 内存的
cache.m3.large
节点(12GB/2)。但是,您可能需要更多内存才能执行BGSAVE
操作。如果您的应用程序写入操作繁重,请将内存要求翻倍至至少每个分区 12GB。因此,使用具有 13.3GB 内存的cache.m3.xlarge
或具有 13.5GB 内存的cache.r3.large
。 -
您是否正在使用 Local Zones?
L@@ ocal Zones 允许您将诸如 ElastiCache 集群之类的资源放置在靠近用户的多个位置。但是,当您选择节点大小时,请注意,无论容量要求如何,本次可用节点大小目前仅限于以下内容:
-
最新一代:
M5 节点类型:
cache.m5.large
、cache.m5.xlarge
、cache.m5.2xlarge
、cache.m5.4xlarge
、cache.m5.12xlarge
、cache.m5.24xlarge
R5 节点类型:
cache.r5.large
、cache.r5.xlarge
、cache.r5.2xlarge
、cache.r5.4xlarge
、cache.r5.12xlarge
、cache.r5.24xlarge
T3 节点类型:
cache.t3.micro
、cache.t3.small
、cache.t3.medium
-
在集群运行时,您可以监控发布到的内存使用情况、处理器利用率、缓存命中率和缓存未命中率指标。 CloudWatch您可能会注意到您的集群没有您想要的命中率,或者密钥被移出的频率过于频繁。在这些情况下,您可以选择具有更大CPU和内存规格的不同节点大小。
在监控CPU使用情况时,请记住 Valkey 和 Redis OSS 是单线程的。因此,将报告的CPU使用量乘以CPU内核数即可得出实际使用量。例如,CPU报告使用率为 20% 的四核实际上OSS是 Redis 以 80% 的利用率运行的核心。
节点大小(Memcached)
Memcached 集群包含一个或多个节点,该集群的数据会分区到各个节点中。因此,集群的内存需求和节点的内存相关但不相同。您可以通过拥有几个大型节点或多个小型节点来获得所需的集群内存容量。此外,由于您的需求是变化的,您可以在集群中添加节点或删除节点,从而仅为所需内容付费。
集群的总内存容量是在扣除系统开销后,将集群中的节点数乘以每个节点的RAM容量计算得出的。每个节点的容量都基于节点类型。
cluster_capacity = number_of_nodes * (node_capacity - system_overhead)
集群中的节点数是运行 Memcached 的集群可用性的一个关键因素。如果单一节点出现故障,则可能对应用程序的可用性以及后端数据库的负载产生影响。在这种情况下,为故障节点 ElastiCache配置一个替代品,然后重新填充该节点。要减小这种可用性影响,请将内存和计算容量分布于更多节点上(每个节点的容量稍小),而非使用少量大容量节点。
在您希望拥有 35GB 缓存内存的情况下,可以设置以下任意配置:
-
11
cache.t2.medium
个节点,每个节点具有 3.22 GB 内存和 2 个线程,共 35.42 GB 和 22 个线程。 -
6
cache.m4.large
个节点,每个节点具有 6.42 GB 内存和 2 个线程,共 38.52 GB 和 12 个线程。 -
3
cache.r4.large
个节点,每个节点具有 12.3 GB 内存和 2 个线程,共 36.90 GB 和 6 个线程。 -
3
cache.m4.xlarge
个节点,每个节点具有 14.28 GB 内存和 4 个线程,共 42.84 GB 和 12 个线程。
节点类型 | 内存(单位:GiB) | 内核 | 小时成本* | 需要的节点 | 总内存(单位:GiB) | 核心总数 | 月度成本 |
---|---|---|---|---|---|---|---|
cache.t2.medium | 3.22 | 2 | 0.068 美元 | 11 | 35.42 | 22 | 538.56 美元 |
cache.m4.large | 6.42 | 2 | 0.156 美元 | 6 | 38.52 | 12 | 673.92 美元 |
cache.m4.xlarge | 14.28 | 4 | 0.311 美元 | 3 | 42.84 | 12 | 671.76 美元 |
cache.m5.xlarge | 12.93 | 4 | 0.311 美元 | 3 | 38.81 | 12 | 671.76 美元 |
cache.m6g.large | 6.85 | 2 | 0.147 美元 | 6 | 41.1 | 12 | 635 美元 |
cache.r4.large | 12.3 | 2 | 0.228 美元 | 3 | 36.9 | 6 | 492.48 美元 |
cache.r5.large | 13.07 | 2 | 0.216 美元 | 3 | 39.22 | 6 | 466.56 美元 |
cache.r6g.large | 13.07 | 2 | 0.205 美元 | 3 | 42.12 | 6 | 442 美元 |
* 自 2020 年 10 月 8 日起的每节点小时成本。 | |||||||
30 天(720 小时)的 100% 使用量的月度成本。 |
这些选项都提供了类似的内存容量,但提供了不同的计算容量和成本。要比较您的特定选项的成本,请参阅 Amazon ElastiCache 定价
对于运行 Memcached 的集群,每个节点上的部分可用内存都会用于连接开销。有关更多信息,请参阅 Memcached 连接开销
使用多个节点需要跨这些节点分布密钥。每个节点都有自己的终端节点。为了便于终端节点管理,您可以使用自动发现功能,该功能使客户端程序能够自动识别集群中的所有节点。 ElastiCache 有关更多信息,请参阅 自动识别集群(Memcached)中的节点。
在某些情况下,您可能无法确定您需要多少容量。如果是这样,对于测试,我们建议从 cache.m5.large
节点开始。然后使用发布到 Amazon 的 ElastiCache 指标监控内存使用量、CPU利用率和缓存命中率 CloudWatch。有关 CloudWatch 指标的更多信息 ElastiCache,请参阅使用 CloudWatch 指标监控使用情况。对于生产和大型工作负载,R5 节点可提供最佳的性能和RAM成本价值。
如果您的集群没有所需的命中率,您可以轻松地添加更多的节点,从而增加您的集群的可用内存总量。
如果您的集群受约束CPU但具有足够的命中率,请使用可提供更高计算能力的节点类型来设置新集群。