关于TDSQL(MySQL)的简单知识分享

0. 前言

最近在系统改造过程中,接触到了国产分布式数据库TDSQL,记录一下关于TDSQL的部分知识点。

1. TDSQL简介

TDSQL是腾讯推出的一款兼容MySQL的自主可控、高一致性分布式数据库产品。

1.1 TDSQL优点:

  • 数据强一致性
  • 高性能低成本
  • 线性水平扩展
  • 金融级高可用
  • 企业级安全性
  • 便捷的运维

1.2 TDSQL系统总览

在这里插入图片描述

  • 资源池:TDSQL部署的服务器资源。

  • 存储节点:存储节点要强调的是TDSQL的两种存储形态,一种是Noshard数据库,一种是分布式数据库(也叫Shard版TDSQL)。简单来说,Noshard就是一个单机版的TDSQL,在MySQL的基础上做了一系列的改造和改良,让它支持TDSQL的一系列特性,包括高可用,数据强一致、7×24小时自动故障切换等。第二种是分布式数据库,具备水平伸缩能力。所以TDSQL对外其实呈现了两种形态,呈现一种非分布式形态,一种是分布式的形态。

  • 计算节点:计算节点就是TDSQL的计算引擎,做到了计算层和存储层相分离。计算层主要是做一些SQL方面的处理,比如词法解析、语法解析、SQL改写等。如果是分布式数据库形态,还要做分布式事务相关的协调。

  • 赤兔运营管理平台 :通过这个平台,DBA可以操纵TDSQL后台黑盒,所以相当于是一套WEB管理系统。让所有DBA的操作都可以在用户界面上完成,而不需要登陆到后台,管理节点的操作可以通过界面化完成。

  • “扁鹊”智能DBA平台:扁鹊智能DBA平台还有一个智能诊断系统,可以定期由DBA发起对实例进行的诊断。

1.3 TDSQL架构模块及其特性

在这里插入图片描述

首先用户的请求通过负载均衡发往SQL引擎。然后,SQL引擎作为计算接入层,根据这个SQL的要求从后端的存储节点去取数据。当然,无论是SQL引擎还是后端的数据库实例都存在一个元数据来管理调度。举个例子,计算引擎需要拿到一个路由,路由告诉SQL引擎,这个SQL该发往哪一个后端的数据节点,到底是该发往主节点还是发往备节点。TDSQL引入了ZK(Zookeeper)来储存类似于路由这类元数据信息。当然ZK只是静态的存储元数据,维护和管理这些元数据信息,还需要有一套调度以及接口组件,这里是OSS、Manager/Schedule。这张图可以看到是TDSQL整体来说就分为三部分:管理节点、计算节点和存储节点。当然这里还有一个辅助模块,帮助完成一些个性化需求的,比如备份、消息队列,数据迁移工具等。另外,这里的负载均衡其实不是必需的,用户可以选用自身的硬件负载,也可以用LVS软负载,这个负载均衡根据实际的用户场景可自定义。

2. 模块划分

2.1 管理模块

在这里插入图片描述

作为一个集群只搭建一套的管理模块,一般可以复用一组机器。

首先,DBA用户在赤兔管理台——这一套WEB前台发起一个操作——点了一个按纽,这个按纽可能是对实例进行扩容,这个按纽会把这个https的请求转移到OSS模块,这个OSS模块有点像web服务器,它能接收web请求,但是它可以把这个转发到ZK。所以,OSS模块就是一个前端到后台的桥梁,有了OSS模块,整个后台的工作模块都可以跟前台、跟web界面绑定在一起。

捕捉到这个请求之后,在ZK上创建一个任务节点,这个任务节点被调度模块捕获,捕获之后就处理任务。处理完任务,再把它的处理结果返回到ZK上。ZK上的任务被OSS捕获,最后也是https的请求,去查询这个任务,最后得到一个结果,返回给前端。

这是一个纯异步的过程。

2.2 DB模块

在这里插入图片描述

DB模块,即数据节点,数据存取服务属于IO密集型的服务,因此,数据节点是TDSQL的存储节点,它对IO的要求比较高。

SET就是数据库实例,一个SET包含数据库的主从节点。

模块Agent,它来完成对所有集群对MySQL的操作,并且上报MySQL的状态。

2.3 SQL引擎模块

在这里插入图片描述

SQL引擎处于计算层的位置,本身属于CPU密集型,所以在选机型上尽量要求CPU高一些。其次是内存,作为计算接入层,它要管理链接,如果是大量的短链接或者长链接,非常占内存,所以它对CPU和内存的要求比较高。此外,它本身不存储数据,也没有主备之分。

SQL引擎要处理分布式事物,还要维护全局自增字段,保证多个数据、多个存储节点共享一个保证全局自增的序列;如果是分布式的话,要限制一些语法,包括词法和语法的解析;还有在一些复杂计算上,它还要做一些SQL下推,以及最后数据的聚合。

2.4 TDSQL主备数据复制

mysql主备数据复制实现方式:
在这里插入图片描述

  • 异步复制:主机在不等从机应答直接返回客户端成功。
  • 半同步:主机在一定条件下等备机应答,如果等不到备机应答,它还是会返回业务成功,也就是说它最终还会退化成一个异步的方式。
  • 全同步机制:当主库提交事务之后,所有的从库节点必须收到,APPLY并且提交这些事务,然后主库线程才能继续做后续操作。

TDSQL引入了基于raft协议的强同步复制,主机接收到业务请求后,等待其中一个备机应答成功后才返回客户端成功。

有点类似把半同步的基础上把这个超时时间改成无限大同时应答的备机设置为1,但是TDSQL强同步复制的性能是在原生半同步的基础上做了大量的优化和改进,使得性能基本接近于异步。

2.5自动容灾切换

在这里插入图片描述

SQL引擎将请求发给主节点,主节点被两个备机所同步,每个节点上都有对应的Agent上报当前节点的状态。这时,主节点发生了故障被Agent觉察,上报到zk被Scheduler捕获,然后Scheduler首先会把这个主节点进行降级,把它变成Slave。也就是说此时其实整个集群里面全是Slave,没有主节点。这个时候另外两个存活的备机上报自己最新的binlog点,因为有了强同步的保障,另外两个备机其中之一一定有最新的binlog,那么两个备机分别上报自己最新的点后,Schedule就可以清楚的知道哪个节点的数据是最新的,并将这个最新的节点提升成主节点。

容灾切换需要建立在强同步的基础上。

2.6 数据强一致性

在这里插入图片描述
比如说A节点作为主节点,B、C是从,正常去同步A节点的数据,A+1、A+2,接下来该同步A+3。当A+3还没有同步到从节点的时候发生了故障,这个时候根据B、C节点的数据情况,C的数据是最新的,因此C被选成了主节点,进而C继续同步数据到B。过了一阵,A节点拉起了,可以重新加入集群。重新加入集群之后,发现它有一笔请求A+3还没有来得及被B、C节点应答,但已经写入到日志。这个时候其实A节点的数据是有问题的,我们需要把这个没有被备机确认的A+3的回滚掉,防止它将来再同步给其他的节点。

3. 分表

3.1 分表

在这里插入图片描述

shardkey——是TDSQL的分片关键字,也就是说TDSQL会根据shardkey字段将这个数据去分散。

在这里插入图片描述

3.2 水平拆分

在这里插入图片描述

对于分布式来说,可能最初我们所有的数据都在一个节点上。当一个节点出现了性能瓶颈,需要将数据拆分。

3.3 分布式事务

在这里插入图片描述

分布式事务也是根据shardkey来判断,具体来说,对于SQL引擎读发起一个事务,比如第一条SQL是改用户ID为A的用户信息表。第二条SQL是插入一个用户ID为A的流水表,这两张表都以用户ID作为shardkey。如果这两条SQL都是发往一个分片,虽然是一个开启的事务,但是发现它并没有走分布式事务,它实际还是限制在单个分片里面走了一个单节点的事务。当然如果涉及到转帐:比如从A帐户转到B帐户,正好A帐户在第一个分片,B帐户是第二个分片,这样就涉及到一个分布式事务,需要SQL引擎完成整个分布式事务处理。

TDSQL分布式事务优点:

在这里插入图片描述

3.4 分布式总结

在这里插入图片描述

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

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

相关文章

前端JavaScript篇之for...in和for...of的区别

目录 for...in和for...of的区别for...in循环for...of循环区别: for…in和for…of的区别 在JavaScript中,for...in和for...of是两种常用的循环语法,它们有着明显的区别和适用场景。 for...in循环 for...in循环用于遍历一个对象的所有可枚举…

引入echarts环形图及显示后端数据

实现效果&#xff1a; 1.下载echarts 并引用 npm install echarts --save 或 pnpm install -S echarts 项目中引用&#xff1a; 在项目main.ts中 import * as echarts from "echarts"; //引入echarts 3.页面中使用 <div id"main" class&quo…

Topaz Photo AI for Mac v2.3.1 补丁版人工智能降噪软件无损放大

想要将模糊的图片变得更加清晰&#xff1f;不妨试试Topaz Photo AI for Mac 这款人工智能、无损放大软件。Topaz Photo AI for Mac 一款强大的人工智能降噪软件&#xff0c;允许用户使用复杂的锐化算法来提高图像清晰度&#xff0c;还包括肖像编辑选项&#xff0c;如面部重塑、…

C#在既有数组中插入另一个数组:Array.Copy方法 vs 自定义插入方法

目录 一、使用的方法 1.使用Array.Copy方法 2.Copy(Array, Int32, Array, Int32, Int32) 3. 使用自定义的方法 二、实例 1.示例1&#xff1a;使用Array.Copy方法 2.示例2&#xff1a;使用自定义的方法 一、使用的方法 1.使用Array.Copy方法 首先定义了一个名为InsertAr…

Mysql大表添加字段失败解决方案

背景 最近遇到一个问题&#xff0c;需要在user用户表千万级别数据中添加两个字段&#xff0c;发现老是加不上去&#xff0c;一直卡死。表数据量不仅大&#xff0c;而且是一个热点表&#xff0c;访问频率特别高&#xff0c;而且该表的访问是在一个大事务中。加字段的时候一直在…

人工智能福利站,初识人工智能,图神经网络学习,第三课

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统

代码下载&#xff1a; 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而&#xff0c;由于水下环境的复杂性和特殊性&#xff0c;水下目标检测面临着许多挑…

读千脑智能笔记06_人工智能的未来(上)

1. 人工智能正在经历一场复兴&#xff0c;这是科技界最热门的领域之一 1.1. 大多数科学进步都建立在被广泛接受的理论框架之上。这种理论框架称为“科学范式” 1.2. 人工智能的未来将与大多数人工智能从业者如今的设想存在本质上的不同 1.3. 人工神经网络与人类大脑中的神经…

ChatGPT高效提问—prompt常见用法

ChatGPT高效提问—prompt常见用法 1.1 角色扮演 ​ prompt最为常见的用法是ChatGPT进行角色扮演。通常我们在和ChatGPT对话时&#xff0c;最常用的方式是一问一答&#xff0c;把ChatGPT当作一个单纯的“陪聊者”。而当我们通过prompt为ChatGPT赋予角色属性后&#xff0c;即使…

JCTC | 利用几何深度学习对蛋白质-配体结合pose进行等变灵活建模

Overview 该论文解决了药物开发中蛋白质-配体复合结构灵活建模的挑战。作者提出了一种名为FlexPose的新型深度学习框架&#xff0c;它可以直接对复杂结构进行建模&#xff0c;而不需要传统的采样和评分策略。 该模型结合了标量-向量双特征表示和 SE(3)等变网络设计来处理动态结…

成倍降本增效,提升企业竞争力!SOFAServerless 品牌升级为 Koupleless,重磅发布 1.0 版本...

如果你是企业经营者&#xff0c;在为企业降本增效而发愁&#xff1b;如果你是企业的开发、运维或架构同学&#xff0c;在日常工作中被开发效率、交付问题等困扰…… 欢迎来了解 Koupleless&#xff08;原 SOFAServerless&#xff09;&#xff01; 现在&#xff0c;Koupleless 重…

2024-01-06-AI 大模型全栈工程师 - 机器学习基础

摘要 2024-01-06 阴 杭州 晴 本节简介: a. 数学模型&算法名词相关概念; b. 学会数学建模相关知识&#xff1b; c. 学会自我思考&#xff0c;提升认知&#xff0c;不要只会模仿&#xff1b; 课程内容 1. Fine-Tuning 有什么作用&#xff1f; a. 什么是模型训练&#xff…