现代化 SQL Server 数据库
概览
如果您正着手实现遗留数据库的现代化,以提升其可扩展性、性能和进行成本优化,那么您可能会遇到使用 SQL Server 这类商业数据库时所面临的种种难题。商业数据库价格昂贵,会将客户牢牢束缚在其中,并且其许可条款还颇具惩罚性。本部分对从 SQL Server 迁移与现代化至开源数据库的各种方案进行了概述,并介绍了如何根据您的工作负载选择最佳方案的相关信息。
您可以将 SQL Server 数据库重构为像 Amazon Aurora PostgreSQL 这样的开源数据库,以此来节省 Windows 和 SQL Server 的许可费用。像 Aurora 这样的云原生现代数据库将开源数据库的灵活性和低成本与商业数据库可靠的企业级功能相结合。如果您有不稳定的工作负载或者多租户工作负载,您也可以迁移到 Aurora Serverless V2。这能够将成本降低 90% 之多,具体取决于工作负载的特点。此外,AWS 还提供适用于 Aurora PostgreSQL 的 Babelfish
数据库产品
从 Windows 上的 SQL Server 迁移到像 Amazon Aurora、Amazon RDS for MySQL 或 Amazon RDS for PostgreSQL 之类的开源数据库,可以在不影响性能或功能的情况下节省大量费用。请考虑以下事项:
-
从 Amazon EC2 上的 SQL Server 企业版切换到 Amazon RDS for PostgreSQL 或 Amazon RDS for MySQL 最多可以节省 80% 的费用。
-
从 Amazon EC2 上的 SQL Server 企业版切换到 Amazon Aurora PostgreSQL 兼容版或 Amazon Aurora MySQL 兼容版最多可以节省 70% 的费用。
对于传统的数据库工作负载,Amazon RDS for PostgreSQL 和 Amazon RDS for MySQL 能够满足需求,并为关系型数据库提供了一种经济高效的解决方案。Aurora 增加了众多以往仅由昂贵的商业供应商才能提供的可用性和性能方面的功能。Aurora 中的韧性功能需要额外付费。然而,与其他商业供应商提供的类似功能相比,Aurora 的韧性功能成本仍然低于商业软件针对同类功能所收取的费用。Aurora 架构经过了优化,与标准的 MySQL 和 PostgreSQL 部署相比,能够显著提升性能。
由于 Aurora 能够与开源的 PostgreSQL 和 MySQL 数据库兼容,所以还具有可移植性的额外优势。究竟最佳选项是 Amazon RDS for PostgreSQL、Amazon RDS for MySQL 还是 Aurora,这取决于对业务需求的了解以及将必要的功能与最佳选项进行匹配。
Amazon RDS 和 Aurora 的比较
下表总结 Amazon RDS 与 Amazon Aurora 之间的关键差异。
| 类别 | Amazon RDS for PostgreSQL 或 Amazon RDS for MySQL | Aurora PostgreSQL 或 Aurora MySQL |
|---|---|---|
| 性能 | 性能良好 | 3 倍或以上的性能 |
| 失效转移 | 通常为 60–120 秒* | 通常为 30 秒* |
| 可扩展性 | 最多 5 个只读副本 延迟时间(以秒为单位) |
最多 15 个只读副本 延迟时间(以毫秒为单位) |
| 存储 | 最大 64 TB | 最大 128 TB |
| 存储 HA | 多可用区配置,其中包含一个或两个备用实例,每个备用实例都有数据库副本 | 默认情况下,在 3 个可用区中有 6 个数据副本 |
| 备份 | 每日快照和日志备份 | 持续、异步备份到 Amazon S3 |
| Aurora 的创新 | NA | 100 GB 快速数据库克隆 |
| 自动扩缩只读副本 | ||
| 查询计划管理 | ||
| Aurora Serverless | ||
| 跨区域副本与全局数据库 | ||
| 集群缓存管理** | ||
| 并行查询 | ||
| 数据库活动流 |
*大型事务会增加失效转移时间
**在 Aurora PostgreSQL 中可用
以下表格显示了本部分所涵盖的不同数据库服务的每月预估费用。
| 数据库服务 | 每月费用(美元)* | AWS 定价计算器(需要 AWS 账户) |
|---|---|---|
| Amazon RDS for SQL Server 企业版 | 3750 美元 | Estimate |
| Amazon RDS for SQL Server 标准版 | 2318 美元 | Estimate |
| Amazon EC2 上的 SQL Server 企业版 | 2835 美元 | Estimate |
| Amazon EC2 上的 SQL Server 标准版 | 1345 美元 | Estimate |
| Amazon RDS for PostgreSQL | 742 美元 | Estimate |
| Amazon RDS for MySQL | 712 美元 | Estimate |
| Aurora PostgreSQL | 1032 美元 | Estimate |
| Aurora MySQL | 1031 美元 | Estimate |
*存储价格包含在实例定价中。费用以 us-east-1 区域为准。吞吐量和 IOPS 是假设值。这些计算针对的是 r6i.2xlarge 和 r6g.2xlarge 实例。
成本优化建议
异构数据库迁移通常需要将数据库的架构从源数据库引擎转换为目标数据库引擎,并将数据从源数据库迁移到目标数据库。迁移的第一步是评估并将 SQL Server 的架构和代码对象转换为目标数据库引擎。
您可以使用 AWS Schema Conversion Tool(AWS SCT)来评估和评测该数据库是否与各种目标开源数据库选项兼容,例如 Amazon RDS for MySQL 或 Amazon RDS for PostgreSQL、Aurora MySQL 和 PostgreSQL。您也可以使用 Babelfish Compass 工具来评测与适用于 Aurora PostgreSQL 的 Babelfish 的兼容性。这使得 AWS SCT 和 Compass 成为非常有用的工具,可帮助在决定迁移策略之前了解相关的前期工作。如果您决定继续,AWS SCT 会自动对架构进行所需的更改。Babelfish Compass 背后的核心理念是让 SQL 数据库能够迁移到 Aurora,无需进行任何修改,或者只需进行极少的修改。Compass 将对现有的 SQL 数据库进行评估,以确定是否能够实现这一目标。这样一来,在将数据从 SQL Server 迁移到 Aurora 之前,结果就已经明确了。
AWS SCT 会自动完成数据库架构和代码向目标数据库引擎的转换与迁移工作。您可以使用适用于 Aurora PostgreSQL 的 Babelfish 将数据库和应用程序从 SQL Server 迁移到 Aurora PostgreSQL,无需或只需进行少量的架构更改。这可以加快您的迁移速度。
在架构迁移完成后,您可以使用 AWS DMS 来迁移数据。AWS DMS 可以执行完整的数据加载,并通过复制更改在停机时间最少的情况下实现迁移。
本部分将更详细地探讨以下工具:
-
AWS Schema Conversion Tool
-
适用于 Aurora PostgreSQL 的 Babelfish
-
Babelfish Compass
-
AWS Database Migration Service
AWS Schema Conversion Tool
您可以使用 AWS SCT 评估现有的 SQL Server 数据库并评测与 Amazon RDS 或 Aurora 的兼容性。为了简化迁移过程,您还可以使用 AWS SCT 来在异构数据库迁移中将架构从一种数据库引擎转换为另一种。您可以使用 AWS SCT 来评估您的应用程序,并将用 C#、C++、Java 等语言编写的嵌入式应用程序代码转换为其他语言的版本。有关更多信息,请参阅 AWS SCT 文档中的使用 AWS SCT 转换应用程序 SQL。
AWS SCT 是一款支持许多数据库源的免费 AWS 工具。要使用 AWS SCT,请将其指向源数据库,然后进行评测。然后,AWS SCT
下表显示了由 AWS SCT 生成的执行摘要示例,旨在说明将数据库转换至不同目标平台所涉及的复杂性。
目标平台 |
自动更改或最小更改 |
复杂操作 |
|||||
存储对象 |
代码对象 |
转换操作 |
存储对象 |
代码对象 |
|||
Amazon RDS for MySQL |
60(98%) |
8(35%) |
42 |
1(2%) |
1 |
15(65%) |
56 |
Amazon Aurora MySQL 兼容版 |
60(98%) |
8(35%) |
42 |
1(2%) |
1 |
15(65%) |
56 |
Amazon RDS for PostgreSQL |
60(98%) |
12(52%) |
54 |
1(2%) |
1 |
11(48%) |
26 |
Amazon Aurora PostgreSQL-Compatible Edition |
60(98%) |
12(52%) |
54 |
1(2%) |
1 |
11(48%) |
26 |
Amazon RDS for MariaDB |
60(98%) |
7(30%) |
42 |
1(2%) |
1 |
16(70%) |
58 |
Amazon Redshift |
61(100%) |
9(39%) |
124 |
0(0%) |
0 |
14(61%) |
25 |
AWS Glue |
0(0%) |
17(100%) |
0 |
0(0%) |
0 |
0(0%) |
0 |
Babelfish |
59(97%) |
10(45%) |
20 |
2(3%) |
2 |
12(55%) |
30 |
AWS SCT 报告还提供有关无法自动转换的架构元素的详细信息。您可以参考 AWS 迁移行动手册
适用于 Aurora PostgreSQL 的 Babelfish
适用于 Aurora PostgreSQL 的 Babelfish扩展了您的 Aurora PostgreSQL,以能够接受来自 SQL Server 客户端的数据库连接。使用 Babelfish,最初为 SQL Server 构建的应用程序可以直接与 Aurora PostgreSQL 协作,代码更改很少,而且无需更改数据库驱动程序。Babelfish 使 Aurora PostgreSQL 成为双语系统,从而使得 Aurora PostgreSQL 能够同时支持 T-SQL 和 PL/pgSQL 两种语言。Babelfish 最大程度减少了从 SQL Server 迁移到 Aurora PostgreSQL 的工作量。这能加快迁移进程,最大程度降低风险,并大幅减少迁移成本。您可以继续在迁移后使用 T-SQL,但也可以选择使用 PostgreSQL 原生工具
以下图表展示了使用 T-SQL 的应用程序如何连接到 SQL Server 中的默认端口 1433,并通过 Babelfish 翻译器与 Aurora PostgreSQL 数据库进行通信,而使用 PL/pgSQL 的应用程序则可以直接并同时通过 Aurora PostgreSQL 中的默认端口 5432 与 Aurora PostgreSQL 数据库进行连接。
Babelfish 不支持某些 SQL Server T-SQL 功能。因此,Amazon 提供了评测工具,用于对您的 SQL 语句进行逐行分析,并确定其中是否有任何语句不被 Babelfish 支持。
Babelfish 评测有两个选项。AWS SCT 可以评测您的 SQL Server 数据库与 Babelfish 的兼容性。另一个选项是 Babelfish Compass 工具,这是推荐的解决方案,因为 Compass 工具已根据新版本的适用于 Aurora PostgreSQL 的 Babelfish 进行了更新。
Babelfish Compass
Babelfish Compass
评测和更改完成后,您可以使用 SSMS 或 sqlcmd 等 SQL Server 原生工具将架构迁移到 Aurora PostgreSQL。有关说明,请参阅 AWS 数据库博客上的使用 Babelfish 从 SQL Server 迁移到 Amazon Aurora
AWS Database Migration Service
架构迁移完成后,您可以使用 AWS Database Migration Service(AWS DMS)在停机时间最短的情况下将数据迁移到 AWS。AWS DMS 不仅可以加载完整数据,还可以在源系统启动并运行时将更改从源系统复制到目标。在源数据库和目标数据库同步后,即可进行切换操作,此时应用程序将指向目标数据库,从而完成迁移过程。AWS DMS 目前仅通过适用于 Aurora PostgreSQL 的 Babelfish 目标进行完整数据加载,并且不对更改进行复制。有关更多信息,请参阅 AWS DMS 文档中的使用 Babelfish 作为 AWS Database Migration Service 的目标。
AWS DMS 可以进行同构迁移(在同一数据库引擎之间)和异构迁移(在不同数据库引擎之间)这两种类型的操作。AWS DMS 支持许多源数据库和目标数据库引擎。有关更多信息,请参阅 AWS 数据库博客中的使用 AWS DMS 将 SQL Server 数据库迁移到 Amazon RDS for SQL Server