在 AWS re:Invent 2024 的主题演讲中,Amazon 正式发布了支持多区域 Active/Active 架构的关系型数据库 Aurora DSQL,目前已开放预览。
我正在拉斯维加斯现场观看 Keynote,刚刚听到这一令人振奋的消息。Aurora DSQL 的亮点在于能够跨区域写入,同时确保数据一致性。这项技术的推出,无疑将为全球化的应用程序开发带来巨大便利。稍后会分享更多细节!
Amazon Aurora DSQL
Aurora DSQL 是一款具备几乎无限扩展能力的无服务器分布式 SQL 数据库。它通过提供一个跨越三个可用区 (AZ) 的 Active/Active 单一集群,最大程度减少了复制和故障切换操作。同时,它具备 ACID 特性,能够提供强一致性的数据处理能力。
特点
Aurora DSQL 拥有以下亮点:
- 几乎无限的扩展能力
- 构建具备 99.999% 高可用性的应用
- 无需管理基础设施
- 强数据一致性
- 兼容 PostgreSQL
此外,Aurora DSQL 提供了公共端点,而非局限于 VPC 内,是真正意义上的零扩展无服务器数据库。
架构
Aurora DSQL 的单一区域配置与 Aurora Limitless Database 的架构相似。它由跨越三个可用区的计算层、事务日志层和存储层组成,提供一个单一的集群端点。在单一区域模式下,写入事务会被提交到分布式事务日志,并在三个可用区内同步,确保数据的可靠性和一致性。
这个设计让 Aurora DSQL 成为了适用于高负载、高可用场景的理想选择,同时通过无服务器架构解放了开发者的运维负担。
在多区域配置中,Aurora DSQL 可实现 99.999% 的高可用性。多区域配置为每个链接区域提供一个区域端点,共计两个端点。这种设计使其具备与单一区域配置相同的恢复能力和连接性能。
链接的集群在两个端点上共同提供一个逻辑上的单一数据库,支持具备强一致性的数据读取与写入操作。此外,除了链接区域外,还需要一个称为见证(witness)的区域。见证区域负责短时间内保存加密的事务日志,从而提升多区域配置的耐久性与可用性。
这种架构不仅满足了跨区域数据处理的需求,还确保了数据的高一致性和可靠性,为全球化的高可用性应用场景提供了理想的解决方案。
性能表现
虽然 Aurora DSQL 拥有几乎无限的扩展能力,但其每个查询的延迟可能会引起关注。尤其在多区域配置中,由于通信距离较长,这一问题更为显著。AWS 宣称,在多区域配置下,Aurora DSQL 的性能比 Google Cloud 的 Spanner 快 4 倍。
然而,需要注意的是,Aurora DSQL 采用了乐观并发控制 (OCC)。通常情况下,即使系统规模扩大或混入较长的事务,事务执行速度也不会受到明显影响。但在跨区域竞争或冲突频繁的情况下,由于可能需要多次重试,性能可能会有所下降。
因此,尽管 Aurora DSQL 提供了高性能和高扩展性的解决方案,在特定高竞争场景下,设计和使用时仍需权衡。
费用
目前,Aurora DSQL 仍处于预览阶段,因此可以免费使用。具体的收费信息将在正式公开时公布,敬请期待。
支持的区域
目前,Aurora DSQL 可在以下区域使用:
- 美国东部(弗吉尼亚北部)
- 美国东部(俄亥俄)
实践操作
接下来,让我们实际启动 Aurora DSQL 集群,体验它的功能。
- 登录 AWS 控制台,在弗吉尼亚北部区域找到 Aurora DSQL 页面。
- 点击 Create cluster 按钮,开始创建集群。
通过这些简单的操作,即可快速体验 Aurora DSQL 的强大功能!
创建多区域配置
在这里,我们将通过以下步骤为 Aurora DSQL 配置多区域集群:
- 勾选 Add linked Regions 选项以启用多区域配置。
- 在 Linked cluster Region 中选择 俄亥俄 作为链接集群的区域。
- 在 Witness Region 中选择 俄勒冈 作为见证区域。
- 最后,点击 Create cluster 按钮,完成集群的创建。
通过上述设置,Aurora DSQL 将在多区域之间实现高可用性和强一致性,为分布式应用程序提供强大的支持。
完成设置后,只需等待几分钟,Aurora DSQL 集群即可启动并完成多区域配置部署。
就这样,Aurora DSQL 成功启动!
切换到俄亥俄区域查看集群
当您切换到俄亥俄区域的 AWS 控制台时,可以看到同样的 DSQL 集群已经成功创建。这表明多区域配置的 Aurora DSQL 集群已经在不同区域间实现了同步部署!✨
现在,您可以在两个区域中测试数据一致性和写入性能,充分利用 Aurora DSQL 的多区域能力。
在 AWS 控制台中,进入 Aurora DSQL 集群的详细信息页面,您将看到以下关键信息
在 Aurora DSQL 集群的详细信息页面,进入 Linked Regions 部分,您可以清楚地看到配置的链接区域信息
目前,在 Metrics(指标) 部分,您可能只看到 ApproximateClusterStorage(近似集群存储量),它显示了 Aurora DSQL 集群当前使用的存储空间。
在 Aurora DSQL 集群详情页面顶部,点击 Connect 按钮,可以看到如何连接到您的集群的相关信息
获取连接信息
点击 Connect 后,您将看到以下关键的访问信息:
- 端点(Endpoint):用于连接 Aurora DSQL 的数据库地址。
- 端口(Port):Aurora DSQL 的默认端口号。
- 数据库名称(Database Name):您在创建集群时指定的数据库名称。
选择认证方式
在 Authentication Token(认证令牌) 部分,可以选择以下两种角色:
- 管理员(Administrator):提供对数据库的完全访问权限,适合配置和管理数据库。
- 自定义数据库角色(Custom Database Role):适用于更有限的权限范围。
此处选择 管理员 角色,然后点击右下角的 Copy 按钮,即可将生成的认证令牌复制到剪贴板。
⚠️ 注意:认证令牌的有效期仅为 15 分钟,请确保在有效期内完成连接操作,否则需要重新生成。
使用 psql
登录 Aurora DSQL
按照以下步骤使用 psql
客户端连接到 Aurora DSQL 集群:
[root@ip-10-0-2-85 bin]# psql --host=hyabtu6pcuqagk4uvhl4q5r27y.dsql.us-east-1.on.aws --port=5432 --dbname=postgres --username=admin
Password for user admin:
psql (16.4, server 16.5)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
Type "help" for help.
postgres=>
在成功登录到 Aurora DSQL 后,您可以执行以下 SQL 命令来创建表、插入数据并查询,验证数据库功能。
postgres=> CREATE TABLE items(item_id int, item_cat varchar, val int, item text);
CREATE TABLE
postgres=> INSERT INTO items (item_id, item_cat, val, item)
VALUES
(1, 'AAA', 101, '111'),
(2, 'BBB', 102, '222'),
(3, 'CCC', 103, '333'),
(4, 'DDD', 104, '444'),
(5, 'EEE', 101, '111'),
(6, 'FFF', 102, '222'),
(7, 'GGG', 103, '333'),
(8, 'HHH', 104, '444');
INSERT 0 8
postgres=> SELECT * FROM items;
item_id | item_cat | val | item
---------+----------+-----+--------
8 | HHH | 104 | 444
2 | BBB | 102 | 222
5 | EEE | 101 | 111
3 | CCC | 103 | 333
1 | AAA | 101 | 111
7 | GGG | 103 | 333
6 | FFF | 102 | 222
4 | DDD | 104 | 444
(8 rows)
在成功设置多区域 Aurora DSQL 集群后,您可以切换到俄亥俄区域登录并验证记录的一致性。操作步骤如下:
[root@ip-172-31-15-140 bin]# psql --host=liabtu6pcuqcnbn5bxdtns7yjq.dsql.us-east-2.on.aws --port=5432 --dbname=postgres --username=admin
Password for user admin:
psql (16.4, server 16.5)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
Type "help" for help.
postgres=> SELECT * FROM items;
item_id | item_cat | val | item
---------+----------+-----+--------
8 | HHH | 104 | 444
2 | BBB | 102 | 222
5 | EEE | 101 | 111
3 | CCC | 103 | 333
1 | AAA | 101 | 111
7 | GGG | 103 | 333
6 | FFF | 102 | 222
4 | DDD | 104 | 444
(8 rows)
切换到俄亥俄区域后,您可以验证是否可以正常插入数据。以下是操作步骤:
postgres=> INSERT INTO items (item_id, item_cat, val, item)
VALUES
(9, 'III', 201, '555');
INSERT 0 1
postgres=> SELECT * FROM items;
item_id | item_cat | val | item
---------+----------+-----+--------
8 | HHH | 104 | 444
2 | BBB | 102 | 222
5 | EEE | 101 | 111
3 | CCC | 103 | 333
1 | AAA | 101 | 111
9 | III | 201 | 555
7 | GGG | 103 | 333
6 | FFF | 102 | 222
4 | DDD | 104 | 444
(9 rows)
最后总结
Aurora DSQL 发布时,我最初以为它是 Aurora Limitless Database 的多区域版本,但实际上差异非常明显。Aurora DSQL 运行在 VPC 外部,具有 零扩展 的特点,启动速度极快!(相比之下,首次试用 Limitless Database 时启动耗时超过 100 分钟!)
尤其是运行在 VPC 外的特性,使其非常适合 Lambda 等无服务器环境的访问。此外,它支持多区域 Active/Active 写入,这为构建全球化应用程序(尽管目前仅限于弗吉尼亚和俄亥俄区域)提供了极大便利,同时也非常适合作为边缘计算环境的数据存储解决方案。在企业级应用场景中,Aurora DSQL 极大简化了区域间的冗余部署,能够从单一可用区冗余扩展到区域间冗余,成为构建地理分布式高可用架构的有力工具。
然而,也有一些需要注意的限制。Aurora DSQL 采用乐观并发控制(OCC),无法在事务中对记录进行锁定,因此需要对提交时的冲突错误进行重试处理。此外,目前对于复杂的数据库操作支持仍有提升空间。
我原本以为 Aurora 的更新会朝着 HTAP(混合事务和分析处理)的方向发展,但这次转向全球一致性的强化,令人眼前一亮。作为 Aurora 的长期观察者,这种演进方向非常有趣。在即将到来的 re:Invent 2024 中,将有专门针对 Aurora DSQL 的详细解读环节,我计划参加并带来更多有价值的信息分享!🎉
Aurora DSQL 的推出,不仅对技术爱好者意义非凡,也为企业级用户提供了新的可能性。期待它的持续进化!