亚马逊AWS官方博客

使用多个 Amazon Redshift Serverless 工作组和网络负载均衡器实现卓越性能并提高可扩展性

随着数据分析应用场景日益增多,可扩展性和并发性因素对企业来说变得至关重要。您的分析解决方案架构应能处理大量数据并实现高并发性,但又不能影响速度,如此方能提供可扩展的高性能分析环境。 Amazon Redshift Serverless 提供了完全托管式 PB 级自动扩缩云数据仓库,用以支持高并发分析。这为数据分析师、开发人员和科学家提供了一个快速而灵活的分析环境,使他们能够以出色的性价比从数据中获得洞察。Redshift Serverless 能够在使用量激增期间自动扩展,协助企业以经济高效的方式满足不断变化的业务需求。您无需更改现有的分析和商业智能(BI)应用程序,即可轻松享受这一简便功能。

本博文建议您使用 Redshift Serverless,以便更好地满足苛刻的性能需求(例如高并发性、使用量峰值和快速查询响应速度)并优化成本。提议的解决方案旨在满足三个关键性能要求:

  • 通过在网络负载均衡器的后面使用多个 Redshift Serverless 端点,为数千个并发连接提供支持并实现高可用性
  • 利用低延迟服务水平协议,通过可扩展的分布式工作组来容纳数百个并发查询
  • 借助 Amazon Redshift 的快速查询处理功能,为针对大型数据集的短查询实现亚秒级响应时间

建议的架构使用通过单个网络负载均衡器客户端端点访问的多个 Redshift Serverless 端点。网络负载均衡器将传入请求均匀分配到各个工作组。这将横向扩展资源来满足高吞吐量和低延迟需求,从而提高性能并减少延迟。

解决方案概览

下图概述了 Redshift Serverless 架构,其中网络负载均衡器的后面有多个 Amazon Redshift 托管式 VPC 端点。

以下是该架构的主要组件:

  • Amazon Redshift 数据共享 – 利用此功能,您可以在 Redshift 集群、工作组、AWS 账户和 AWS 区域之间安全地共享实时数据,而无需手动移动或复制数据。数据一经更新,用户便能立即在 Amazon Redshift 中查看最新且一致的信息。借助 Amazon Redshift 数据共享功能,您可以在创建者或使用者端点上进行摄取,并让其他使用者端点能够读取和写入相同的数据,从而实现水平扩缩。
  • 网络负载均衡器 – 充当客户端的单一联系点。负载均衡器将传入流量分配给多个目标,例如 Redshift Serverless 托管式 VPC 端点。这将提高应用程序的可用性、可扩展性和性能。您可以向负载均衡器添加一个或多个侦听器。侦听器使用您配置的协议和端口检查来自客户端的连接请求,并将这些请求转发到目标组。目标组使用您指定的协议和端口号将请求路由到一个或多个已注册目标,例如 Redshift Serverless 托管式 VPC 端点。
  • VPC – Redshift Serverless 是在 VPC 中预置的。通过创建 Redshift 托管式 VPC 端点,您可以让其他 VPC 中的应用程序对 Redshift Serverless 进行私有访问。借助此设计,您可以根据需要通过多个 VPC 来进行扩展。VPC 端点为网络负载均衡器上每个要用作目标组的 Redshift Serverless 工作组提供一个专用的私有 IP。

创建 Amazon Redshift 托管式 VPC 端点

完成以下步骤以创建 Amazon Redshift 托管式 VPC 端点:

  1. 在 Redshift Serverless 控制台上,在导航窗格中选择工作组配置
  2. 从列表中选择一个工作组。
  3. 数据访问选项卡上的 Redshift 托管式 VPC 端点部分中,选择创建端点
  4. 输入端点名称。为您的组织创建一个有意义的名称。
  5. AWS 账户 ID 将自动填充。这是您的 12 位账户 ID。
  6. 选择将在其中创建端点的 VPC。
  7. 选择一个子网 ID。在常见应用场景中,这是您希望将其中的客户端连接到 Redshift Serverless 实例的子网。
  8. 选择要添加的 VPC 安全组。每个安全组均充当一个虚拟防火墙,用于控制安全组所保护的资源(例如特定的虚拟桌面实例)的入站和出站流量。

以下屏幕截图显示了此工作组的示例。记下要在创建目标组期间使用的 IP 地址。

重复这些步骤以创建所有 Redshift Serverless 工作组。

为网络负载均衡器的目标组添加 VPC 端点

要使用 Amazon Elastic Compute Cloud(Amazon EC2)将这些 VPC 端点添加到网络负载均衡器的目标组,请完成以下步骤:

  1. 在 Amazon EC2 控制台上,在导航窗格中选择负载均衡下的目标组
  2. 选择创建目标组
  3. 对于选择目标类型,选择实例以按实例 ID 注册目标,或选择 IP 地址以按 IP 地址注册目标。
  4. 对于目标组名称,输入目标组的名称。
  5. 对于协议,选择 TCPTCP_UDP
  6. 对于端口,使用 5439(Amazon Redshift 端口)。
  7. 对于 IP 地址类型,选择 IPv4IPv6。仅当目标类型为实例IP 地址且协议为 TCP 或 TLS 时,此选项才可用。
  8. 您必须将 IPv6 目标组与双堆栈负载均衡器关联。目标组中的所有目标必须具有相同的 IP 地址类型。创建一个目标组后,无法更改该目标组的 IP 地址类型。
  9. 对于 VPC,选择带有要注册的目标的 VPC。
  10. 保留运行状况检查部分、属性部分和标签部分的默认选项。

创建负载均衡器

创建目标组后,您可以创建负载均衡器。我们建议您为其使用端口 5439(Amazon Redshift 默认端口)。

网络负载均衡器充当单一访问端点,并且将用于连接到 Amazon Redshift。这可让您添加更多 Redshift Serverless 工作组,并透明地提高并发性。

测试解决方案

我们对该架构进行了测试,运行了三份 BI 报告,其中将 TPC-DS 数据集(云基准数据集)用作数据。在您选择加载示例数据(sample_data_dev 数据库)时,Amazon Redshift 会免费包含此数据集。安装还提供了用于测试设置的查询。

在来自 TPC-DS 基准的所有查询中,我们选择了以下三个查询用作报告查询。我们更改了前两个报告查询,对临时表使用 CREATE TABLE AS SELECT (CTAS) 查询,而不是使用 WITH 子句,以便模拟可在典型 BI 工具中看到的选项。在我们的测试中,我们还禁用了结果缓存,确保 Amazon Redshift 每次都运行查询。

此查询集包含临时表的创建、这些表之间的联接和清理。清理步骤会删除表。由于在会话结束时会删除表,因此该步骤不是必需的,而执行该步骤是为了模拟 BI 工具会执行的所有操作。

我们使用了 Apache JMETER 模拟客户端调用请求。要详细了解如何针对 Amazon Redshift 使用和配置 Apache JMETER,请参阅 Building high-quality benchmark tests for Amazon Redshift using Apache JMeter

在测试中,我们使用了以下配置:

  • 测试 1 – 单个 96 RPU Redshift Serverless 与三个工作组,每个工作组 32 个 RPU
  • 测试 2 – 单个 48 RPU Redshift Serverless 与三个工作组,每个工作组 16 个 RPU

我们通过每份报告引发 100 个会话(共 300 个),测试了三份报告。三份报告的每个会话均有 14 个语句(共 4200 个)。所有会话是同时触发的。

下表汇总了测试中使用的表。

表名称 行数
Catalog_page 93744
Catalog_sales 23064768
Customer_address 50000
Customer 100000
Date_dim 73049
Item 144000
Promotion 2400
Store_returns 4600224
Store_sales 46086464
Store 96
Web_returns 1148208
Web_sales 11510144
Web_site 240

我们通过摄取比 TPC-DS 架构在 Amazon Redshift 上提供的数据更多的数据,修改了一些表。我们将数据重新插入表中以增加表的大小。

测试结果

下表汇总了我们的测试结果。

测试 1 . 用时 查询数 成本 最大扩展 RPU 数 性能
单个:96 个 RPU 0:02:06 2100 $6 279 基础
并行:3x 32 个 RPU 0:01:06 2100 $1.20 96 48.03%
并行 1(32 个 RPU) 0:01:03 688 $0.40 32 50.10%
并行 2(32 个 RPU) 0:01:03 703 $0.40 32 50.13%
并行 3(32 个 RPU) 0:01:06 709 $0.40 32 48.03%
测试 2 . 用时 查询数 成本 最大扩展 RPU 数 性能
单个:48 个 RPU 0:01:55 2100 $3.30 168 基础
并行:3x 16 个 RPU 0:01:47 2100 $1.90 96 6.77%
并行 1(16 个 RPU) 0:01:47 712 $0.70 36 6.77%
并行 2(16 个 RPU) 0:01:44 696 $0.50 25 9.13%
并行 3(16 个 RPU) 0:01:46 692 $0.70 35 7.79%

上表显示,并行设置比单一设置更快且成本更低。此外,在我们的测试中,虽然测试 1 的并行设置容量是测试 2 的两倍,但成本仍降低了 36%,速度加快了 39%。根据这些结果,我们可以得出结论,对于具有高吞吐量(I/O)、低延迟和高并发要求的工作负载,这种架构具有成本效益且性能高。有关网络负载均衡器VPC 端点定价,请参阅 AWS 定价计算器

Redshift Serverless 会自动扩展容量,以便在高峰工作负载期间(包括工作负载的并发性高峰)提供卓越性能。从上表中的最大扩展 RPU 数结果中可以明显看出这一点。

此测试中未使用最近发布的 Redshift Serverless 功能,例如 MaxRPU人工智能驱动的扩展。这些新功能可进一步提高工作负载的性价比。

我们建议您在网络负载均衡器上启用跨区域负载均衡,因为这可将来自客户端的请求分发到各个已注册目标。启用跨区域负载均衡将有助于在 Redshift Serverless 托管式 VPC 端点之间平衡请求,无论它们是在哪个可用区中配置的。此外,如果网络负载均衡器仅接收来自一台服务器(同一 IP)的流量,您应始终在网络负载均衡器的后面使用奇数个 Redshift Serverless 托管式 VPC 端点。

结论

在这篇博文中,我们讨论了一种可扩展的架构,该架构可以在低延迟、高并发场景中提高 Redshift Serverless 的吞吐量。通过在网络负载均衡器的后面部署多个 Redshift Serverless 工作组,可以提供水平扩缩解决方案并实现极为出色的性价比。

此外,Redshift Serverless 采用了 AI 技术(目前为预览版),可跨所有关键维度(例如,数据量变化、并发用户数和查询复杂性),根据工作负载变化自动扩缩,从而实现和支持您的性价比目标。


关于作者

Ricardo Serafim 是 AWS 的高级分析专家解决方案架构师。

Harshida Patel 是 AWS 的分析专家首席解决方案架构师。

Urvish Shah 是 Amazon Redshift 的高级数据库工程师。他在数据库、数据仓库和分析领域,拥有十多年的工作经验。工作之余,他喜欢烹饪、旅行以及与女儿共度时光。

Amol Gaikaiwari 是高级Redshift 专家,专注于协助客户获得出色的业务成果并实现理想的 Redshift 性价比。他热衷于采用新推出的 Redshift 功能来简化数据管道并增强功能。