ITPub博客

首页 > > > 使用Amazon Relational Database Service进行分片

使用Amazon Relational Database Service进行分片

作者:zuike2000 时间:2020-02-18 16:15:58 0 删除 编辑

分片(也称为水平分区)是关系数据库的一种流行的横向扩展方法。Amazon Relational Database Service(Amazon RDS)是一项托管的关系数据库服务,它提供了出色的功能,使分片易于在云中使用。在本文中,我将介绍如何使用Amazon RDS实施分片数据库架构,以实现数据存储的高扩展性,高可用性和容错能力。我讨论了将Amazon RDS部署为数据库分片时架构设计和监视指标的注意事项。我还概述了重新分片的挑战,并重点介绍了Amazon RDS中的按钮放大和缩小解决方案。

分片数据库架构

分片是一种将数据拆分为较小的子集并将其分布在许多物理上分离的数据库服务器上的技术。每个服务器被称为数据库碎片。所有数据库分片通常具有相同类型的硬件,数据库引擎和数据结构,以产生相似的性能水平。但是,他们彼此之间并不了解,这是使分片与其他横向​​扩展方法(例如数据库集群或复制)不同的关键特征。

无共享模型为分片式数据库体系结构提供了可伸缩性和容错能力方面的独特优势。无需管理数据库成员之间的通信和争用。这样做所涉及的复杂性和开销并不存在。如果一个数据库分片遇到硬件问题或经历了故障转移,则其他分片不会受到影响,因为物理上隔离了单个故障点或减速点。分片有可能利用所需数量的数据库服务器,前提是驻留在应用程序层的数据映射和路由逻辑几乎不会产生延迟。

但是,无共享模型也带来了分片不可避免的缺点:散布在不同数据库分片上的数据是分离的。从多个数据库分片读取或联接数据的查询必须经过特殊设计。与仅在一个分片上运行的对等设备相比,它通常会导致更高的延迟。无法提供所有数据的一致的全局映像,限制了分片数据库体系结构在联机分析处理(OLAP)环境中发挥积极作用,在该环境中,通常对整个数据集执行数据分析功能。

在联机事务处理(OLTP)环境中,大量的写入或事务可能超出单个数据库的容量,并且扩展性令人担忧,分片始终值得追求。随着Amazon RDS的问世,数据库设置和操作已在很大程度上实现了自动化。这使得使用分片数据库体系结构变得容易得多。Amazon RDS提供了一组数据库引擎,包括适用于MySQL,MariaDB,PostgreSQL,Oracle,SQL Server和Amazon Aurora的 Amazon RDS 。您可以将其中任何一个用作分片数据库体系结构中数据库分片的构建块。

让我们看一下使用Amazon RDS构建的分片数据库架构的示例。在AWS云计算环境的上下文中,其在数据流路径中的位置具有几个特征(如下图所示)。



  • 数据通过托管在具有Auto Scaling功能的一组Amazon EC2实例上的Web应用程序输入到系统中。
  • 数据存储是分层的,其中OLTP环境与OLAP环境分开,以满足不同的业务和所有权要求。
  • OLTP环境使用数据库分片。它由一组使用Amazon RDS构建的数据库组成,以实现高可扩展性,以满足对写入吞吐量不断增长的需求。每个数据库碎片是专为使用部署在独立的数据库高可用性多AZ功能。注意:如果选择Aurora数据库集群来构建数据库分片,则还可以通过使用主实例配置只读副本来实现高可用性。
  • 根据计划将数据从OLTP环境中拉出到OLAP环境中。您可以使用Amazon Redshift来容纳所有数据库分片中的数据,并为数据分析功能构建时间一致的全局数据集。聚合的数据结果集被进一步推送到Amazon S3,以进行数据共享,其他分析服务和长期存储。

数据分区和架构设计

实现分片数据库体系结构的先决条件是水平分割数据并在数据库分片之间分布数据分区。您可以使用各种策略对表进行分区,例如列表分区,范围分区或哈希分区。您可以允许每个数据库分片以单独的表的格式容纳一个或多个表分区。

下图是使用分区键作为Invoice表中水平分区的示例customer_id。



当涉及多个表并由外键关系绑定时,可以在所有涉及的表上使用相同的分区键来实现水平分区。跨表但属于一个分区键的数据将分配给一个数据库分片。下图显示了一组表中的水平分区的示例。



使用的基本设计技术如下:

  • 每个数据库碎片包含分区键映射表,customer来存储分区键驻留在该碎片。应用程序从所有分片读取此表,以构造将分区键映射到数据库分片的数据映射逻辑。有时应用程序可以使用预定义的算法来确定分区键位于哪个数据库分片中,因此可以省略此表。
  • 分区键customer_id作为数据隔离点添加到所有其他表中。它直接影响数据和将工作负载分配到不同的数据库分片。用于单个分区的查询包括分区键,以便应用程序层的数据路由逻辑可以使用它来映射到数据库分片并相应地路由查询。
  • 主键在所有数据库分片中都具有唯一的键值,以避免当数据从一个分片迁移到另一个分片或在OLAP环境中合并数据时发生键冲突。例如,“发票”表的主键invoice_id使用交错的数字,并为保留最后两位数字shard_id。另一种常见的做法是使用GUID或UUID作为主键。
  • 可以在表中将具有时间戳记数据类型的列定义为数据一致性点。必要时,它用作将所有数据库分片中的数据合并到全局视图中的条件。例如,当将数据提取到OLAP环境中时,“ creation_date发票”表的用作提取查询中的过滤器,以为所有分片指定一致的时间范围。

精心设计的分片数据库体系结构可使数据和工作负载均匀地分布在所有数据库分片上。落在不同分片上的查询能够始终达到预期的性能水平。分片上越来越多的数据分区将增加数据库引擎的资源消耗,甚至在大型硬件上也会形成争用点和瓶颈。要确定每个分片使用多少个数据分区,通常可以在优化查询性能的承诺与合并目标之间取得平衡,以更好地利用资源削减成本。

将Amazon RDS部署为数据库分片时,您还必须考虑数据库引擎的类型,数据库实例类和RDS存储。为了帮助您轻松管理数据库配置,Amazon RDS提供了一个数据库参数组。它包含所需的一组配置值,这些配置值可以一致地应用于所有数据库分片。

监控可伸缩性

在全局情况下,您可以将一个分片的监视指标(例如系统资源使用或数据库吞吐量)更有意义,在全局情况下,您可以将一个分片与其他分片进行比较,以验证系统中是否存在热点。为监视数据设置适当的保留期也很有用。然后,您可以使用历史信息来分析趋势并计划容量,以帮助系统适应变化。

作为托管服务,Amazon RDS会自动收集监视数据并将其发布到Amazon CloudWatch。CloudWatch提供了数据库和系统级别的指标的统一视图。一些度量标准对所有数据库都是通用的,而另一些度量标准则特定于某个数据库引擎。有关指标的完整列表,请参阅Amazon RDS和Amazon Aurora的文档。

我总是建议监测整个系统资源的使用指标,如CPUUtilization,FreeableMemory,ReadIOPS,WriteIOPS,和FreeStorageSpace。这些指标指示数据库分片上的资源使用情况是否在容量范围内以及还有多少增长空间。系统资源消耗是证明分片数据库体系结构需要进一步扩展或合并的一个重要因素。

以下是示例CloudWatch仪表板,它提供了对分片数据库体系结构的出色可见性。它将来自所有数据库分片的实时和历史指标数据汇总到一张图中。



当数据库分片具有较高的系统资源使用率并需要更多功能时,它可以是向上扩展或向外扩展。Amazon RDS提供了按比例放大的选项。您可以使用它来将数据库实例类修改为具有更多CPU和RAM的更大硬件,或者修改数据库实例存储以获取更多存储空间和增加的IOPS容量。对于不同的数据库引擎或特定的数据库版本,可用实例类的选择可能会有所不同。AWS管理控制台是检查该位置的好地方。

如果选择用于MySQL或PostgreSQL的Amazon RDS来构建数据库分片,则还有另一个扩展选项:迁移到Amazon Aurora数据库集群。Aurora数据库集群可以在集群存储卷之上包含多个数据库实例,以提供比Amazon RDS数据库实例更高的性能和IOPS容量。Amazon RDS提供了一个按钮选项来创建Aurora只读副本。此选项设置复制过程,以将数据从MySQL或PostgreSQL 的Amazon RDS数据库实例迁移到Aurora只读副本。数据迁移完成后,可以将Aurora只读副本升级为独立的Aurora数据库集群。

重新分片

对于数据库碎片向外扩展选项被称为resharding,这意味着再分片。从广义上讲,重新分片还可以指所有旨在调整分片数据库体系结构中分片数量的过程。这些过程包括添加新的分片,将一个分片拆分为多个分片或将多个分片合并为一个。尽管它们的格式不同,但是这些过程本质上需要执行相同类型的操作:将现有数据从一个分片迁移到另一个分片。在实时访问和更改数据的实时生产数据库中,以最少的停机时间进行数据迁移始终是重新分片的挑战。

Amazon RDS努力使重新分片变得更容易!在适用于MySQL,MariaDB或PostgreSQL的Amazon RDS中,Amazon RDS提供了一个按钮横向扩展选项(只读副本),可将一个独立数据库拆分为多个新数据库。下图显示了重新分片的示例工作流,该工作流使用只读副本作为数据复制技术在数据库之间迁移数据。



  1. 已创建只读副本,以连续从主数据库复制数据。
  2. 主数据库推迟了写活动,因此只读副本可以同步并提升为新的独立数据库。在这段时间内,应用程序层的映射和路由逻辑将master数据库上多个数据分区的状态更新为只读。
  3. 修改了数据映射和路由逻辑,以将连接路由到新数据库。

如果您选择Amazon Aurora数据库集群来构建数据库分片,则其只读副本将与主实例共享存储卷。因此,它们不能用于在Aurora群集之间复制数据。相反,Amazon RDS提供了克隆数据库功能,以使用与源数据库相同的数据创建新的Amazon Aurora数据库集群。对于Aurora MySQL数据库群集,还可以选择设置MySQL复制,以将其数据复制到另一个新的Aurora MySQL数据库群集。

除了使用现有数据库技术复制数据之外,重新分片还可以利用其他工具在数据库分片之间迁移数据,包括AWS Database Migration Service(AWS DMS)或用户定义的数据提取流程。下图是基于工具的重新分片工作流的示例,该工作流一次迁移一个数据分区。



  1. 数据迁移工具设置为将数据分区从一个数据库分片复制到另一个数据库分片。应用程序层的映射和路由逻辑将数据分区的状态更新为只读。然后,数据迁移工具可以在两个数据库分片之间同步数据。
  2. 数据同步后,应用程序层的数据映射和路由逻辑将更新数据分区的映射和状态,以使其在新的数据库分片上生效。

基于工具的重新分片方法具有灵活性,因为每个数据分区都可以单独迁移。迁移一个数据分区时,它进入只读模式,应用程序仍可以读取其数据。其他数据应用程序仍然可以读取和写入,并且可以保证整个分片数据库体系结构的可用性。

基于数据库的重新分片方法在分拆新数据库时会将写入活动的停机时间放在数据库分片上的多个数据分区上。新数据库上线后,它将包含从原始数据库复制的所有数据分区,即使其中仅会使用其中的一部分。因此,您将需要清除重复的数据。

摘要

在本文中,您了解了分片作为关系数据库实现高可伸缩性的一种方法。您了解了一个使用Amazon RDS在云中实施分片数据库架构的示例用例,以及它如何适合数据存储和分析工作流程。您还了解了RDS提供的以高度自动化的方式管理,监视,扩展和扩展数据库碎片的各种功能。

希望本文能使您更​​好地了解分片以及在AWS云计算环境中使用分拆的难易程度。如有任何疑问,请随时在下面发表评论

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-04-16

  • 博文量
    404
  • 访问量
    2063