发布于: Oct 30, 2022

分片(也被称为横向分区)是关系数据库领域一种颇为流行的数据库优化方法。Amazon Relational Database Service(关系数据库服务,简称 Amazon RDS)是一项托管关系数据库服务,凭借出色的功能帮助用户轻松在云环境下实现分片。在本文中,我们将了解如何利用 Amazon RDS 实现分片数据库架构

分片技术的实质,在于将数据拆分成多个较小子集,进而分布于多个在物理层面相互分离的数据库服务器之上。其中每个服务器皆被称为数据库分片。各数据库分片往往具有相同的硬件、数据库引擎与数据结构类型,旨在保持彼此相近的性能水平。但是,各分片之间并不知晓对方的存在,这也是分片技术与其他横向扩展方法(例如数据库集群或复制)的核心差异所在。

非共享模式为分片数据库架构带来了独特的可扩展性与容错能力优势。在这种模式下,我们不必分神于各数据库成员之间的通信与争用,从而摆脱了由此带来的复杂性与操作开销。如果某一数据库分片遭遇硬件故障或者进行故障转移,因为该单一故障点(或称减速点)与其他分片保持物理隔离,所以其他分片不会受到任何影响。分片技术在理论上能够灵活掌控任意多个数据库服务器,唯一的前提就是驻留在应用层中的数据映射与路由逻辑不会产生无法接受的延迟。

然而,非共享模式也给分片机制带来不少难以克服的缺点:散布在不同数据库分片上的数据彼此分离。负责从多个数据库分片上读取或者联接数据的查询必须经过精心设计。与单分片运行场景相比,多数据库分片往往会带来更高的延迟。此外,无法为全体数据提供统一的全局视角也极大限制了分片数据库架构在联机分析处理(OLAP)环境中的作用。因为在这类环境中,我们往往需要对整个数据集执行数据分析功能。

不过在联机事务处理(OLTP)环境中,超大规模的写入操作或事务处理可能超出单一数据库的容量上限,并严重影响到系统的可扩展能力,这时候分片技术的优势将得到充分体现。随着 Amazon RDS 的问世,数据库设置与运营工作已经在很大程度上实现了自动化。换言之,分片数据库架构的使用门槛得以显著降低。Amazon RDS 提供一组数据引擎选项,具体包括 Amazon RDS for MySQL MariaDB PostgreSQL Oracle SQL Server 以及 Amazon Aurora 等等。您可以从中任意选择,并将其作为分片数据库架构中的分片构建单元。

下面,我们将通过示例了解如何使用 Amazon RDS 构建分片数据库架构。在 Amazon Web Services 云计算环境中,数据流路径的具体位置具有以下几项特征(如下图所示)
  • 数据通过托管在一组 Amazon EC2 实例(带有 Auto Scaling 功能)上的 Web 应用程序输入至系统当中。
  • 数据存储是分层的,其中 OLTP 环境与 OLAP 环境彼此独立,从而满足不同类型的业务与所有权要求。
  • OLTP 环境使用数据库分片。整个环境由一组使用 Amazon RDS 构建的数据库组成,可凭借高度可扩展性满足用户对写入吞吐量的增长需求。各个数据库分片皆由具备多可用区部署功能的独立数据库进行构建,旨在实现高可用性。注意:如果您选择使用 Aurora 数据库集群构建数据库分片,还可以使用主实例配置读取副本以实现高可用性。
  • 根据规划将数据从 OLTP 环境中导出至 OLAP 环境。您可以使用 Amazon Redshift 承载来自所有数据库分片的数据,并针对数据分析功能构建起具备时间一致性的全局数据集。聚合而成的数据结果集将被进一步推送至 Amazon S3 以实现数据共享,供其他分析服务使用并保持长期存储。

相关文章