跳转到主要内容

为 KeyDB 选择 AWS EC2 实例

为 KeyDB 选择 EC2 实例

在搜索使用何种实例类型的信息时,答案通常是“视情况而定”。本文将通过 EC2 类型的通用数据以及对 KeyDB 在不同类型实例上的性能和选择进行深入分析,来详细介绍各种实例类型。

本文的重点是将 KeyDB 用作内存数据库。未来将有文章探讨如何将 KeyDB 与 FLASH 存储和高级查询结合使用,在查询密集型工作负载(如 KEYS 等 O(n) 密集型操作)下,可以利用更多的核心。当 AWS Graviton2 可用时,我们也将发布相关结果。

在深入分析之前,我们先简单地看一下 EC2 实例的分类,让您有一个大致的了解。

每种实例类型每 GB 的成本#

作为一个内存数据库,首要问题是哪种类型能优化成本,因为内存(RAM)通常是主要限制因素。初步看,x1 实例以及 r5 和 t 实例的定价最优。然而,选择最便宜的类型可能不是最佳选择,也未必适合您。决策的其他因素包括您需要的存储量以及期望的性能。请注意,本文记录的所有成本均为按需实例的成本。

image

性能与垂直扩展性#

性能通常是防止高负载时出现延迟的一个重要因素。KeyDB 是一个快速的多线程数据库,可以在水平扩展之前进行垂直扩展。下表选择了几种实例类型,显示了在 Memtier 基准测试下,首个(成本最低)达到性能饱和的实例。可以看出,C5、R5 和 M5 实例在这些类型中性能最佳。这些实例拥有更快的 CPU,每秒能处理 100 万次操作。

image

如您所见,根据您的需求,每种实例类型都有其优缺点。为了更好地了解每种类型,我们将查看更多数据,以便对本文后面描述的每种类型进行归纳总结。

下面的图表展示了许多这些实例。它比较了每个实例的可用内存(GB)、基准测试的操作数/秒(ops/sec)、每GB RAM 的价格,以及标准化为每秒1000次操作的成本作为性能成本比较。这些图表可以让您更容易地为您的使用场景选择和优化最佳实例。

image

请注意,t2 和 t3 实例用不同的阴影表示,因为它们是可突增实例,数字代表的是峰值负载,而不是持续负载。如果 CPU 积分用完,实例的性能可能会被大幅限制,因此在选择时了解您的使用情况至关重要。

性能、内存,还是两者兼顾?#

由于 KeyDB 是多线程且速度极快,我们的大多数用户倾向于只运行一个实例(除非是为了高可用性)。这降低了设置的复杂性,并为那些不想集群化的用户提供了巨大的好处。为了解 KeyDB 如何优化资源,KeyDB 的多线程在同一台机器上可以获得相当于一个 7 节点 Redis 集群的性能,此时两者都使机器的性能达到饱和。

您可能注意到的第一个趋势是,在超过 .4xlarge 的机器上,性能会达到饱和。因此,如果性能成为您应用程序的瓶颈,您将根据数据库所需的内存量,在等于或大于此机器尺寸时进行分片。这确保了您首先垂直扩展实例。在集群化之前,您还可以创建一个只读副本或活动副本实例来处理部分流量并提供高可用性。

实例的优缺点#

对于 KeyDB 来说,根据您的设置/使用场景,每种实例类型都有不同的优缺点。我们将概述与 KeyDB 相关的优点。有关更多类型的信息,您可以阅读这里。希望这个总结能帮助您做出更精确的决定。

M5 实例#

M5 实例非常适合大多数场景。它们配备了 3.1 GHz 的 Intel Xeon® Platinum 8175 处理器,使 KeyDB 能够达到超过 100 万次操作/秒。内存最高可达 384GB。如果您追求性能,且内存需求不像 r5 实例那么高,这是一个不错的选择。

R5 实例#

R5 实例提供了性能和可用内存的最佳组合。r5 实例的内存每 GB 成本是最低的之一,并且它拥有与 m5 相同的处理器,能够实现超过 100 万次操作/秒。对于需要高性能的大型数据集,r5 实例是最佳选择之一。

C5 实例#

C5 计算优化型实例使用 3.5GHz 的 Intel Xeon Scalable 处理器,速度非常快,但其性能与 m5/r5 处理器相似,也仅略高于 100 万次操作/秒。在性能方面,c5 实例的性价比合理。但如果您的瓶颈在于内存,c5 实例的 $/GB 成本是最高的。大多数使用场景下,c5 实例相比 m5/r5 并没有优势。

T 实例#

对于小型、负载波动的应用场景,T2 和 T3 实例是极具潜力的选择。在我们的测试中,由于处理器稍快,t3 实例的性能优于 t2 实例。关于 t2 和 t3 实例需要注意的主要一点是它们是可突增的。这意味着它们在短时间内可以表现出色,但不要期望能持续保持这种性能。您有 CPU 积分可供使用,如果用完,您的 CPU 会被降速,这可能会给您的用户带来高延迟的负面体验。某些实例可能会被降速到只有 5% 的容量,因此了解您的使用情况以判断其是否合适至关重要。有关可突增实例的统计数据和描述,请查看此文档

A1 实例#

A1 arm 实例是亚马逊更经济实惠的选择之一,它使用 AWS Graviton 处理器。这些处理器更适合在持续负载下运行的小型数据库,不像可突增的 t3/t2 实例。A1 实例在每秒操作数/美元(即每花费一美元处理的操作量)方面提供了最低的价格,但每 GB 内存的成本相对较高,且 2.3GHz 的处理器无法达到其他实例类型那样高的每秒操作数。对于已经使用 arm 应用程序和工作负载的场景,KeyDB on Arm 是一个很好的选择,并且与之配合良好。我们预计新的 Graviton2 将带来非常大的性能提升,并在获得相关信息后立即发布。

X1 实例#

X1 实例的每 GB 内存成本最低,但其 2.3GHz 的 Intel Xeon E7 8880 v3 处理器最高只能达到 620,000 次操作/秒,因此性能不如 m5/r5 实例。然而,对于需要大量内存存储且性能未接近实例极限的场景,X1 系列可能是您的正确选择。

I3 实例#

存储优化型实例,如 i3 系列,非常出色,尤其适合使用像 KeyDB on FLASH 这样的功能。我们没有详细介绍这种实例类型,因为关于 FLASH 与实例类型的讨论本身就足以写成另一篇文章。i3 实例使用 2.3GHz 的 Intel Xeon E5-2686 v4 处理器,最高可达约 400,000 次操作/秒。除非您利用了 SSD 存储,否则其成本与其他实例不具可比性。i3en 实例使用 Intel® Xeon® Scalable (Skylake) 或 Xeon(R) Platinum 8175M 处理器,最高可达 845,000 次操作/秒。因此,在选择时注意实例的规格说明非常重要。

其他注意事项#

在选择 EC2 实例时,还有其他一些因素需要考虑。我不打算详细讨论这些,但了解您的选项会有所帮助。

  • 您可能会注意到实例上有 d、n、a 或 e 等后缀(例如 m5d.4xlarge)。
  • ‘n’ 表示网络优化(更高带宽)。处理器也可能不同,所以请仔细查看。
  • ‘d’ 表示它有额外的基于 NVMe 的 SSD 存储。这物理连接到主机服务器,并提供与实例生命周期绑定的块级存储。
  • ‘a’ 表示它使用 AMD 处理器。
  • 您可以在这里比较处理器类型和统计数据。
  • 根据您的使用场景,有按需定价(本文中使用),即按小时计费。然而,如果您计划持续运行服务器,可以考虑预留实例定价,最高可便宜 75%。对于有灵活性的用户,可以请求 Spot 实例。更多信息请参见这里
  • 请记住使用的处理器,因为它可能导致不同的性能。在选择实例时,始终建议运行某种基准测试。这样做的一个原因,除了选择正确的类型外,还在于有一个基线可以比较,以帮助识别您设置中的瓶颈。
  • EBS 优化型实例可以确保 EC2 和 EBS 卷之间的专用吞吐量,这在某些情况下对于备份和保存数据有好处。S3 选项也是 KeyDB 内置的一个廉价选择。

结论#

在试图优化选择时,有很多东西需要消化。在成本、内存、性能、存储之间找到正确的平衡,很大程度上取决于您数据库的负载/流量。然而,一旦您有了想法,选择就会变得容易一些。希望本文能为您提供一些见解,帮助您在不是 EC2 实例专家的情况下做出选择。AWS 文档对于加深您的理解非常有帮助。

即将推出#

KeyDB on FLASH 比较#

如本文所述,在设置一个低成本、高存储、大量使用 FLASH 选项的实例时,同样存在许多问题。KeyDB 即将发布一个新版本的 FLASH,并将对 AWS 实例进行评估。

基准测试说明:#

Memtier 基准测试实例为 m5.8xlarge 实例。需要这种规模的实例才能将到 KeyDB 的流量跑满。在大多数情况下,使用以下命令进行测试。

memtier_benchmark -s <服务器IP地址> --threads=32

KeyDB 测试实例通常使用以下命令运行。请注意,线程数(# threads)将根据可用资源进行截断。

keydb-server --server-threads 7 --server-thread-affinity true

如果需要身份验证,请向 memtier 传递参数 --authenticate=<您的密码>,并向 KeyDB 传递 --requirepass <您的密码>。如果在安全网络上,可以为 KeyDB 使用 --protected-mode no

如果您的 memtier 实例不够大,它将成为瓶颈并会扭曲结果。如果您通过 VPC、VPN 或负载均衡器,那里也可能存在瓶颈。否则,数字应该与发布的数据非常相似。