最火的HTAP数据库 京东智联云新一代分布式数据库TiDB架构揭秘

avatar
@京东科技

作者丨京东智联云数据库团队

2020年伊始,一场突如其来的新冠疫情, 席卷了华夏大地。为了抵抗疫情,全国人民众志成城,共同抗疫。疫情期间,各行各业受到了巨大影响,多数线下服务和活动基本陷入了停滞状态。而与此同时,人们对线上服务的需求则大大提升。线上业务伴随着大量的数据涌入,首当其冲经受考验的就是承载核心业务的数据库系统。

我们对数百位企业用户进行了在线调研,发现绝大多数用户心目中理想的数据库都具有以下几个特点:

  • 可通过动态增加机器来满足业务增长需求,应用层可以不用关心容量和吞吐量等问题;

  • 具有完整的ACID事务,能提供数据的强一致性,支持SQL并能兼容MySQL;

  • 提供跨数据中心的高可用性,数据中心内的故障可自动快速恢复,无需人工介入;任意一个数据中心故障,不影响数据库服务。

为了满足这些需求,京东智联云联合PingCAP,打造了开箱即用的新一代分布式数据库——TiDB服务

TiDB是为云而设计的数据库,实现了一键水平伸缩,支持多数据中心部署,具有强一致性的多副本数据,可实现故障的自动恢复。同时,TiDB还具有强大的OLAP性能,可提供一站式的HTAP解决方案。

TiDB分布式数据库在内核设计上将整体的架构拆分成多个大的模块,大的模块之间互相通信,组成完整的TiDB系统。

  • TiDB:SQL层,负责接受客户端的连接,执行SQL解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个TiDB节点,客户端的连接可以均匀地分摊在多个TiDB节点上以达到负载均衡的效果。TiDB 节点本身并不存储数据,只是解析SQL,将实际的数据读取请求转发给底层的存储层TiKV。

  • TiKV:分布式KV存储,支持完全弹性的扩容和缩容,数据分布在多个TiKV存储节点中,系统会动态且自动地进行均衡,不需要人工介入。TiKV的API能够在KV键值对层面提供对分布式事务的原生支持,默认提供了SI (Snapshot Isolation)的隔离级别。TiKV中的数据都会自动维护多副本(默认为 3),天然支持高可用和自动故障转移。

  • Placement Driver (简称 PD):整个TiDB集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,并为分布式事务分配事务ID。同时PD会根据TiKV节点实时上报的数据分布状态,下发数据调度命令给具体的TiKV节点,可以说是整个集群的「大脑」。PD本身也是由至少3个对等节点构成,拥有高可用的能力。

京东智联云上的TiDB基于Kubernetes部署,使得TiDB更加灵活可靠。具体部署架构如下图:

*(为了便于描述,TiDB的数据库实例我们称为TiDB集群,单个TiDB-server我们称之为TiDB节点)

用户VPC内的云主机通过网络负载均衡(NLB)访问TiDB集群,集群中的多个TiDB节点可以进行负载分担,共同提供服务,实现了“双活”乃至“多活”的能力。京东智联云TiDB集群支持3可用区的部署架构,默认3数据副本,每个可用区一个数据副本。即使某一可用区失效后,数据库服务仍然可用并且不发生数据丢失。同时通过设置亲和性,可保证每个可用区的TiKV实例数保持大致均衡。

此外,PD节点默认为3个节点,每一个可用区都有PD实例,保证PD的高可用。在这种架构下,集群中的所有节点,包括TiDB、TiKV及PD节点都具有高可用性,整个数据库环节无单点故障,任一节点的故障均不影响TiDB集群的对外提供服务。

同时,TiDB集群还接入了京东智联云整体的监控告警服务及日志系统,可全面监控TiDB实例的运行状况,用户通过控制台即可TiDB实例进行创建,扩容、删除等生命周期的管理。

下面再简要介绍一下京东智联云TiDB集群的主要能力及实现:

京东智联云TiDB可自动进行全量备份,并将备份数据存储在对象存储(OSS)中。在备份过程中,TiDB不会直接把数据写到本地磁盘上,而是先缓存在内存中,然后再传送到对象存储上,通过这种方式不但提高了备份的效率,也降低了对磁盘的消耗。在进行恢复时,也支持将对象存储上的备份数据恢复到一个新的TiDB集群里面,而不覆盖原TiDB实例,最大程度的保证用户数据的安全,防止误操作。

TiDB在京东智联云上的升降配是通过在线动态增加节点(或减少节点),来达到扩容的目的。TiDB可提供近似无限的水平扩展能力,这是 TiDB 的最大特点。这里说的水平扩展包括两方面:计算能力存储能力

  • TiDB节点负责处理SQL请求,随着业务的增长,可以简单的添加 TiDB节点,提高整体的处理能力,提供更高的吞吐量。

  • TiKV节点负责存储数据,随着数据量的增长,可以部署更多的 TiKV解决数据扩展的问题。TiKV节点之间以Region为单位做调度,将部分数据迁移到新加的节点上。

所以在业务的早期,可以只部署少量的服务实例(推荐至少部署3个TiKV, 3个PD,2个TiDB),随着业务量的增长,按照需求添加TiKV或者TiDB实例。

京东智联云TiDB通过TiFlash节点可以支持在线分析功能。TiFlash是TiDB HTAP形态的关键组件,它是TiKV的列存扩展,TiFlash实时复制TiKV集群中的数据,并同时提供与TiKV一样的一致性读取,且可以保证读取到最新的数据。TiDB可以自动选择使用TiFlash列存或者TiKV行存,甚至在同一查询内混合使用提供最佳查询速度。

TiDB集群支持CSV格式的数据文件高速导入到TiDB集群,导入速度每小时可达500G,是传统SQL导入速度的数倍。TiDB使用对象存储(OSS)存储要导入的数据文件,首先会对数据源进行解析,筛选出DDL这些建表的语句,并在目标集群建立库和表;然后对表数据进行解析和编码,转换成与 TiDB相同编码的键值对,并对键值对排序,写入本地临时存储文件中。最后批量将这些键值对写到各个TiKV节点中。导入后,TiDB会对比导入数据源及目标集群的校验和 (checksum),确保导入的数据是正确的。

京东智联云TiDB可支持主从集群,可通过binlog进行数据同步,准实时的将主集群的数据同步到从集群(本地或异地)。主集群负责应用接入提供读写服务,从集群负责同步主集群数据以及故障接管。同时从集群还可以承载如数据查询,报表分析等数据查询业务,分担主集群业务压力,提高资源利用率的影响。(该功能即将推出)

TiDB具有完善的监控和告警功能。TiDB的报警分为两类:

  • 一是资源层面的报警,由Task Monitor组件监控数据库中资源状态和使用情况,例如CPU,存储以及集群中各个节点的运行状态等。如果发现资源状态或使用异常则会产生告警,并通过邮件或短信方式进行通知。

  • 另一类报警是通过日志采集K8S集群中POD和TiDB集群中的节点的日志,通过配置报警规则过滤对应的关键字触发报警。

此外,TiDB集群自身也提供了极其丰富的监控指标,用户可以直接使用浏览器访问TiDB集群的监控端口,查看TiDB上百个指标的详细信息。

  • 高并发、海量数据的OLTP系统

由于TiDB可提供无上限的、线性扩展的高并发、高吞吐的集群处理能力,因此可简单地把TiDB当作一个可无限扩展的MySQL使用,可极大的简化程序设计,降低运维复杂度,是传统数据库中间件、数据库分库分表等方案优雅而理想的替换产品。

  • 海量数据高性能实时分析

TiDB可以提供可扩展的、无上限的实时写入能力,同时,TiDB独有的强大分布式查询引擎可提供比MySQL快1~2个数量级的复杂查询性能,用户可将TiDB用于各种实时分析场景。

目前,京东智联云和PingCAP公司深度合作推出的TiDB产品已正式发布,欢迎大家点击阅读原文来体验云时代的新一代分布式数据库。

更多精彩技术实践与独家干货解析

欢迎关注【京东智联云开发者】公众号