TenDB Cluster 是腾讯游戏 CROS DBA 团队提供的 MySQL 分布式解决方案。
主要特点包括:透明分库分表、高可用的 MySQL 集群服务,透明在线的扩缩容;使得开发者可以仅专注于业务逻辑的开发及运营,无需编写数据分片逻辑。在海量用户并发情况下,无须关心存储层的负载压力。
TenDB Cluster 集群主要包括三个核心组件:
架构图如下:

TSpider 是集群的接入层。
TSpider 由腾讯游戏 CROS DBA 基于 MariaDB 10.3.7 分布式存储引擎 Spider 开发定制而成。
TSpider github 地址。

作为 MySQL 存储引擎,TSpider 天然支持 MySQL 协议,这意味着应用程序可以使用 MySQL 标准 API 请求 TSpider。
TSpider 收到应用程序的请求后,会将查询分发到 Tdbctl。Tdbctl 通过数据分片规则重写 SQL 并分发到相应的 TenDB 数据节点执行,然后处理数据节点的返回结果,最后返回给应用程序。
TSpider 本身不存储数据,基本上是无状态的(每个 TSpider 节点的配置需要相同),并且可以无限制地水平扩展。应用可以通过负载均衡组件(如 LVS、L5、甚至 DNS)提供的统一地址访问多个 TSpider 节点。
TenDB 是集群的存储层。
TenDB 由腾讯游戏 CROS DBA 团队基于 Percona Server 5.7.20 定制。提供即时加列、大列压缩、binlog压缩、binlog限速、性能优化、分布式事务优化、BUG FIX 等附加功能,目前是腾讯游戏默认的 MySQL 存储版本。
通常一个TenDB Cluster有多个 TenDB 实例,每个 TenDB 实例均匀存储集群数据。 在部署上,每个 TenDB 实例均采用 Master/Slave 或 MGR 部署方式,以保证 TenDB 实例高可用。
Tdbctl 是集群的控制层。
Tdbctl 是腾讯游戏 CROS DBA 团队基于 TenDB 开发(主要复用 TenDB 自身的 SQL 解析能力及 MGR(MySQL Group Replication)能力),它提供集群路由管理、集群DDL操作、集群监控和其他一些集群功能。
Tdbctl 是一个基于 MySQL 的工具,支持 MySQL 的 MGR 功能,某个节点故障则自动会被集群中剔除。因此,部署时使用 3 个或更多个 Tdbctl 节点构成一个 MGR 集群,以保证控制节点的高可用。
TenDB 集群还有一个名为 TenDB Cluster Operator 的组件,可以简化云上的部署和管理。
TenDB Cluster Operator 提供了在主要云基础设施(Kubernetes)上部署和管理 TenDB Cluster 的能力。 它利用 Kubernetes 的容器编排能力和 TenDB Cluster 的集群管理能力,集成一键部署、一键扩展、故障转移和故障自愈能力,大大降低了用户管理和使用 TenDB Cluster 的成本。