为什么说TiDB在线扩容对业务几乎没有影响

作者: 数据源的TiDB学习之路 原文来源: https://tidb.net/blog/e82b2c5f

当前的数据库种类繁多,墨天轮当前统计的所有国产数据库已经有 290个 ,其中属于关系型数据库的有 166个 。关系型数据库从部署架构上又可以分为集中式(典型代表为达梦DM8、金仓KES)、分库分表(典型代表为中兴GoldenDB、腾讯TDSQL)以及原生分布式架构(典型代表为PingCAP TiDB、阿里OceanBase)。

昨天和别人交流PingCAP TiDB时,这位同学对“**TiDB在线扩容对业务几乎没有影响”**这一点表示不太理解,惊讶TiDB到底是怎么做到的。。细聊下来,发现这位同学是一位主要负责集中式和早期分布式架构数据库的DBA人员,比较熟悉Oracle、Greenplum。于是我有点理解他的惊讶了,因为Oracle和Greenplum我也是有一点点经验,本文简单针对一般分布式数据库和TiDB在扩容机制上谈一点个人的理解。

一. 一般分布式数据库在线扩容是怎么做的?

集中式数据库因为其架构本身的限制,一般来说想要实现在线扩容是比较困难的,这里暂且不予讨论,我们主要了解一下一般分布式数据库的扩容是如何进行的。不管是Greenplum这种MPP数据库,还是其它的分库分表数据库,为了实现数据的均衡分布,通常需要在表上定义相关的分布键。通过分布键,再结合哈希算法,可以把数据哈希散列到不同的数据节点中,类似于 hash(key)% N(key代表分布键,N代表数据节点编号) 。举个例子,假如一个分布式数据库有3个数据节点,表的分布键为ID(ID是一个递增序列),那么基于哈希算法散列后数据的分布大致如下图所示:

image.png

现在我们需要扩容一个节点,从原来的3节点扩容到4节点。为了保证原来哈希散列结果的一致性数据需要重新平衡,平衡后的数据分布应该如下面图中所示。可以发现,这个时候大部分的数据基本都搬迁了一遍。先不说数据的迁移是否对业务造成阻塞,光是这现有的大面积数据均衡足以导致整个系统的IO消耗极高, 严重影响整个系统的可用性

image.png

Greenplum在官方文档中还明确指出“ 正在被重新分布的表或者分区会被锁定并且不可读写。 当其重新分布完成后,常规操作才会继续。 ”可以明确的说,Greenplum早期版本里面根本就不支持所谓的“**在线”**扩容。

时代在进步,数据库技术也在进步。为了尽可能实现在线扩容的能力,Greenplum数据库包括其他的分库分表数据库开始引入一些新的算法来优化此事。 一致性哈希算法 开始被普遍应用,它与传统哈希算法最主要的不同是 不再使用节点编号来进行散列 ,而是使用2^32这样一个固定值做取模运算。一致性哈希算法将表中的数据和节点编号映射到一个圆环上,当增加节点时影响的数据范围只是圆环上的一小段数据范围。比如下图中增加节点4,影响的数据只有节点1到节点4之间的这部分数据。

image.png

一致性哈希算法解决了数据重分布时大量数据搬迁的问题,减少了数据搬迁时的网络IO和磁盘IO。不过要真正实现不影响业务,还需要改进数据重分布内部的机制,比如 重分布时锁表等 问题。

二. TiDB的扩容是怎么做的以及为什么它几乎不影响业务?

TiDB的扩容机制离不开TiDB整体的架构实现。作为一个存算分离的原生分布式架构,TiDB集群主要由三大模块构成:用于集群元数据管理及集群调度的PD、用于接收外部请求并解析编译执行SQL的计算引擎TiDB Server以及用于数据存储以及多副本数据一致性保证的存储引擎TiKV/TiFlash。

image.png

基于存算分离的架构,TiDB可以单独进行计算层扩容和存储层扩容。计算层的扩容相对简单,因为TiDB Server本身是 无状态 的。TiDB Server节点 不持久化数据 ,每个节点也是 完全对等 的,当TiDB Server计算资源不够了,只需要增加TiDB Server节点,然后修改上层的负载均衡组件将客户端连接均衡分发到新的TiDB Server节点即可(目前大多数负载均衡组件都支持动态修改配置)。因此, 计算节点的扩容完全不会影响现有的业务。

image.png

针对存储节点,TiKV的扩容与一般分布式数据库的扩容机制是完全不同的,这主要因为TiKV是一种 基于Multi Raft协议的分布式存储引擎 ,而不是像Greenplum或分库分表那种底层是多个MySQL或PG的单机数据库。

假如某集群要从3个TiKV节点扩容到4个TiKV节点,扩容步骤大致可以概括如下:

1. **扩容TiKV节点。**集群增加一个TiKV 4节点,此时TiKV 4上没有任何Region。PD节点识别到新的TiKV节点启动负载调度机制,计算哪些Region需要迁移到TiKV4。

image.png

2. **调度算法确定迁移Region。**PD节点根据调度机制,确定将哪些Region副本迁移到TiKV 4上(假如开始3个节点上各有6个Region,平均到4个节点后每个节点的Region数为18/4=4~5个副本)。PD对TiKV1~3上Region对应的Leader副本发起复制指令。

image.png

**3. 复制Region到新节点。**在TiKV上创建要复制的Region的副本,通过Raft机制开始复制数据。此过程中应用读写访问不受影响,不过因复制过程产生的IO消耗可能会对性能产生一点影响,不过TiDB本身提供了流控,可以动态调整复制的速度。

image.png

**4. 删除多余Region。**Region复制完成且数据一致后,PD将发起删除原有副本指令,保证每个Region的副本只有3个。

image.png

**5. Leader重新均衡。**PD根据调度机制,需要均衡Leader副本,将一部分Region的Leader切换到新增节点TiKV 4上,保证Leader的均衡。Leader切换完成后,读写业务将自动路由到TiKV 4上实现业务负载均衡。

image.png

上述步骤简单理解下来就是说,TiKV的扩容是一种 先生成副本再迁移Leader 的一个过程,扩容对业务有影响的地方主要在于生成副本产生的IO消耗以及Leader切换的影响。对于前者,数据库有流控机制可以保证对业务几乎没有影响;对于后者,一方面Leader的切换本身时间非常短,另一方面当TiDB意识到Region迁移后也能够通过内部重试保证前端业务的正常执行。因此, 存储节点的扩容也几乎不会影响现有的业务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451219.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024三掌柜赠书活动第八期:Web3与DAO:下一代互联网演进逻辑

目录 前言关于Web3和DAO关于《Web3与DAO:下一代互联网演进逻辑》编辑推荐内容简介作者简介精彩书评图书目录书中前言/序言《Web3与DAO:下一代互联网演进逻辑》全书速览结束语 前言 随着区块链技术的崛起,Web3和DAO成为了当前互联网领域炙手…

【Vue】组件间通信的7种方法(全)

目录 组件之前的通信方法 1. props/$emit 2.parent/children 3.ref 4.v-model 5.sync 6.attrs,attrs,attrs,listeners 7.provide/inject 7.eventBus 组件之前的通信方法 1. props/$emit 父传子 props 这个只能够接收父组件传来的数据 不能进行修改 可以静态传递 也可…

【前端必备】深入详解Vue2/Vue3 diff算法实现思路

在做diff算法之前有个基本逻辑要明白,Vue的diff算法是同层比较,不会跨层比较,时间复杂度为O(N)。 主要使用首尾比较法(头-头,头-尾,尾-头,尾-尾)。Vue2与Vue3的diff算法主要区别是处…

查看自己电脑是arm还是x64(x86);linux操作系统识别

1、查看自己电脑是arm还是x64(x86) linux 参考: https://liuweiqing.blog.csdn.net/article/details/131783851 uname -a如果输出是 x86_64,那么你的系统是 64 位的 x86 架构(通常我们称之为 x64)。如果…

Java八大常用排序算法

1冒泡排序 对于冒泡排序相信我们都比较熟悉了,其核心思想就是相邻元素两两比较,把较大的元素放到后面,在一轮比较完成之后,最大的元素就位于最后一个位置了,就好像是气泡,慢慢的浮出了水面一样 Jave 实现 …

编曲是怎么编出来的 编曲软件哪个好用 编曲是干嘛的 编曲教学入门零基础 编曲制作 编曲和作曲什么区别 flstudio下载

编曲想必是许多音乐爱好者们的一大追求,能够自己编写出一首歌曲,代表着我们无论是从基本功还是创造力都达到了一定的水平。不过对于初学者来说,编曲还是比较复杂的,今天我们就来聊一聊编曲是怎么编出来的,编曲软件哪个…

「实用分享」用界面组件Telerik UI for Blazor增强你的财务图表!

Telerik UI for Blazor拥有110个原生的、易于定制的Blazor UI组件和高性能网格组件,能节约一半的时间开发全新的Blazor应用程序并使传统web项目现代化,其中囊括了设计和生成工具等。Telerik UI for Blazor控件提供的控件,可轻松满足应用程序对…

Cambalache in Ubuntu

文章目录 前言apt install flatpak这很ok快捷后记 前言 gtkmm4相比gtkmm3有很多改革, 代码也干净了许多, 但在windows上开发 有ui设计器那自然方便很多, 但glade又不支持gtkmm4, windows上装Cambalache很是困难. 各种问题都找不到答案.于是 我用VMware虚拟机Ubuntu20.xx安装Ca…

2024年高压电工证考试题库及高压电工试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年高压电工证考试题库及高压电工试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的高压…

从源代码看Chrome 版本号

一直以来都是用Chrome 浏览器,但是看到Chrome 点分4 组数据的表达方式,总是感觉怪怪的,遂深入源代码了解她的版本号具体表示的内容 chrome 浏览器中显示的版本号 源代码中的版本号标识 版本号文件位于 chrome/VERSION , 看到源代…

三种pdf转ppt方法?学会这几招轻松搞定转换

三种pdf转ppt方法?在当今的工作和生活中,PDF和PPT这两种文件格式常常会让我们感到困扰。有时候我们需要将PDF文件转换成PPT格式,以便更好地进行演示或工作汇报。但是,如何快速、准确地完成这项任务呢?本文将为你揭秘三…

【深入浅出Java性能调优】「底层技术原理体系」详细分析探索Java服务器性能监控Metrics框架的实现原理分析(Dropwizard度量基础案例指南)

深入探索Java服务器性能监控Metrics框架的实现原理分析 前提介绍Dropwizard MetricsDropwizard的特点Dropwizard的开发案例需要引入Maven依赖常用度量类型Meter(每秒请求数为单位测量请求率)定义度量核心MetricRegistry构建对应的Meter指标对象请求标记采样业务方法控制报告器…