分库分表之初识Vitess
,作为海外最为知名的分库分表产品,一直以来在国内声音不多。近期抽空了解下这个产品,特分享出来。本文部分内容取自官网。
1. 概述
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
是一个用于部署、扩展和管理大型开源数据库实例集群的数据库解决方案。它目前支持MySQL、和。它的架构设计使其在公共或私有云架构中运行时与在专用硬件上运行时一样有效。它结合并扩展了许多重要的SQL功能和NoSQL数据库的可扩展性。
1).使用场景
2).技术特点
❖ 性能优化
❖ 运行防护
❖ 监控诊断
❖ 系统运维
❖ 海量存储
3). 核心优势
4).方案对比
2. 基本架构
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
平台由若干服务器进程、命令行工具和基于 web 的工具组成,具备一致性元数据存储支持。根据用户应用程序的现状,可以选择不同的方式接入。如果正在从头构建一个服务,应该起始于定义数据库拓扑;如果需要对现有数据库进行扩展,那首先需要部署一个连接代理。无论数据库集群规模大小, 工具和服务器都旨在提供帮助。对于较小的实现, 的一些特性诸如连接池和行缓存可以帮助更充分利用现有硬件。 的自动化工具则为大型实现提供额外的好处。
❖ Cell
Cell 是放置一组服务器和网络基础设施的区域,并且与其他Cell做到故障隔离。它通常是一个完整的数据中心或数据中心子集,有时称为Zone或 Zone。 可以优雅地处理Cell 级故障,例如当一个Cell 断开网络时。 在每个Cell中托管本地拓扑服务。这一服务在Cell中包含的大部分信息,这使得Cell能够被拆除并重建。 限制数据和元数据的跨Cell的流量。虽然其具有将读取流量路由到单个Cell的能力,但 目前仅提供来自本地Cell的读取。如有必要,可跨Cell写入。
❖ Plans
在 和 层解析查询,评估执行查询的最佳方法,进而生成查询执行计划。 优化策略之一是将尽可能多的工作下推到底层 MySQL 实例。当这不可能时, 将使用从多个MySQL收集输入并合并结果以生成正确查询结果。
❖
是一个逻辑数据库。如果使用分片技术,则映射到多个 MySQL 数据库;如果没使用分片,则直接映射到 MySQL 数据库名称。无论那种情况,从应用侧来看,都显示为单个数据库。从 读取数据就像从 MySQL 数据库读取数据一样。但是根据读取操作的一致性要求, 可能会选择从主数据库或备数据库中读取。
❖
是一种基于 的新工作流。它使您能够在 之间重新定位表,从而在不停机的情况下重新定位物理 MySQL 实例。
❖ Query
努力营造一种用户与单个数据库连接的错觉。实际上,单个查询可能与多个数据库交互,并且可能使用多个连接到同一数据库。
❖ Map
通过复制图来识别主数据库和它们各自的副本之间的关系。在故障转移期间,复制图使 能够将所有现有副本指向新指定的主数据库,以便继续复制。
❖ Shard
分片是一个 的子集。一个 将包含一个或多个分片。一个分片通常包含一个 MySQL 主副本和许多 MySQL 副本。分片中的每个 MySQL 实例都具有相同的数据。副本可以提供只读流量(具有最终的一致性保证)、执行长时间运行的数据分析查询或执行管理任务(备份、恢复、差异等)。
❖
是过程和相应的过程的组合,通常运行在同一机器上。每个 都具备对应的角色。查询通过 服务器路由到。 划分角色如下:
❖
该拓扑服务是一组在不同服务器上运行的后端进程组成。这些服务器存储全局拓扑数据,并提供分布式锁定服务。 使用插件系统来支持存储拓扑数据的各种实现,默认的拓扑服务存储插件是etcd2。拓扑服务的存在有几个原因:
一个 集群有一个全局拓扑服务,每个单元有一个本地拓扑服务。
❖
一个 用来描述数据是如何和Shard内组织。此信息用于路由查询,也用于重新分片操作。对于 ,可以指定它是否被分片。对于分片的 ,可以为每个表指定 列表。
❖
是一种可通过 访问的更改通知服务。 的目的是从 集群的底层 MySQL 分片提供与 MySQL 二进制日志等效的信息。gRPC 客户端,包括 组件,如 ,可以订阅 以接收来自其他分片的更改事件。从实例上的一个或多个实例拉取事件,后者又从底层MySQL实例的二进制日志拉取事件。这允许有效执行诸如 之类的功能,其中订阅者可以从一个或多个 MySQL 实例分片的二进制日志中间接接收事件,然后将其应用于目标实例。用户可以利用 获取有关给定 、Shard和位置的数据更改事件的深入信息。工作原理可参考如下:
❖ vtctl
vtctl是一个命令行工具,用于管理 集群。它既可用作独立工具 ( vtctl),也可用作客户端-服务器(与 结合使用)。建议使用客户端-服务器,因为它在远程使用客户端时提供了额外的安全层。使用 vtctl,可以识别主数据库和副本数据库、创建表、启动故障转移、执行重新分片操作等。随着 vtctl 执行操作,拓扑服务会根据需要进行更新。其他 服务器会观察这些变化并做出相应的反应。例如,如果您使用 vtctl 故障转移到新的主数据库, 会看到更改并将未来的写入操作定向到新的主数据库。
❖