高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

TXSQL 是什么?云计算时代数据库核弹头

  • 2019-10-28
  • 本文字数:2892 字

    阅读完需:约 9 分钟

TXSQL是什么?云计算时代数据库核弹头

5 月 23-24 日,以“焕启”为主题的腾讯“云+未来”峰会在广州召开,广东省各级政府机构领导、海内外业内学术专家、行业大咖及技术大牛等在现场共议云计算与数字化产业创新发展。


腾讯 MySQL 内核研发专家张青林在腾讯“云+未来”峰会的「开发者专场」做了主题为“TXSQL:云计算时代数据库核弹头”的技术内容分享,本次分享从五个方介绍 TXSQL:



第一部分:腾讯云和 TXSQL 的概念

腾讯云作为国内云计算领先公司,在全球建立了 500 多个数据中心,供数于万计的开发者使用。



CDB 产品是腾讯云提供的 TXSQL 产品,CDB 产品提供了一整套的解决方案,包括用户上云,数据迁移、备份、恢复、升级等操作,相比于传统用户来构建 MySQL 服务,减少了投入的同时也方便使用。



腾讯云的 CDB 服务渗透到了各行各业,包括银行、证券、物流,还有传统企业等都有腾讯云的客户,用户购买 CDB 后,会分配相应的主机、端口、用户名、密码等信息,用户通过这些信息可以直接联接到后台的数据库。



CDB 服务目前分为本地盘和网盘,TXSQL 是基础架构部数据库内核团队独立维护的 MySQL 分支,对外通过 CDB 服务提供给客户。可以看到 TXSQL 是内核,也是底层提供数据服务的位置。



第二部分:我们为何会创造 TXSQL

我们来详细看看构建 TXSQL 的必要性:



从 2016 到 2017 年,存储规模达到了 4 倍以上,并且随着云计算市场的不断成熟,行业覆盖率也得到了前所未有的发展,整个实例级别已经达到了 10 万+。


当用户自己构建数据库服务的时候,跑在自己的服务器上,一年可能只会遇到一两个问题,但是如果有数十万个服务器在同时运行,那么每天遇到问题的概率是很大的,所以我们遇到了三个挑战:


第一,客户使用了 CDB 产品,他会把数据库的请求返回交给上层应用,如果数据库出现问题,可用性基本上得不到保障,所以随着规模的不断增长,我们必须能够快速定位和解决客户遇到的问题。


第二,来自业务的需求,随着行业覆盖率的不断扩展,比如金融或者对数据要求比较高的行业,他们就会对数据安全等功能有多元化的需求,所以需要具备满足客户需求的开发能力。


第三,关于性能,我们知道电商在大促或者游戏有活动的时候,数据库所受到的压力很大,这时候为了提升单机的性能,让用户花最少的钱买最好的服务。



综上所述,面临着三大挑战,一个是稳定性,一个是新的业务需求,还有一个是性能的提升。


基于此,腾讯云需要有一个自己的内核团队来快速定位客户问题,来帮助客户解决问题,并且最大速度的提升单机性能。


第三部分:我们如何设计 TXSQL


B3M 是我们的代码设计模型,可以让客户操作的时候更方便,更好的解决问题,也可以帮助客户实现一些新的需求。


用户可能会问, MySQL 作为一个基础软件,有几百万代码,门槛比较高,怎么保持修改后的 MySQL 版本的稳定性呢?



我们不是随意改 MySQL,我们改的每一处地方都要经过严格的测试。


首先,我们会进行需求分析,需求分析主要来源于几个方面,一个是数据库在运行过程中出现的问题,比如官方的 BUG,另外是用户需求相关的东西,帮助他们更好的使用数据库,再就是做性能调优,用户在使用 MySQL 过程中,我们也逐渐提升性能和竞争力。


经过需求分析之后会做设计,然后再进行代码编写的工作,编写之后我们会严格把控代码质量,每一个步骤都会经过严格测试,比如代码覆盖率测试和单元测试,我们基本每两到三个月会发布一个数据库内核版本,每一个版本都要跑稳定测试和性能测试,以及崩溃恢复测试,从而保证我们的代码不会引入新的 BUG。


在版本发布的时候,首先进行个别实例的发布,然后对新的 TXSQL 版本的实例进行进行秒级监控,没有问题再进行小集群的发布,最后再进行全网发布,通过这种方式我们保证了 MySQL 版本的稳定性以及可靠性。


第四部分:用户在使用 TXSQL 内核版本的时候需要注意哪些问题

对于用户来说,所使用 CDB 内核提供了哪些服务?



因为我们对 MySQL 的改动,是在 MySQL 的基础上进行二次开发的,一种是性能调优,一种是线上问题的解决,还有功能开发,针对于新的业务需求来实现。


我们会通过在压测过程中比较他们资源竞争的情况,比如说内存资源或锁资源,下图中的前三个是我们对 redo log 所做的性能调优,第一个是 redo log,通过减少 sync 盘的次数来提升性能,第二部分是通过多缓冲 buffer,即 Redo Log 在 Sync 的同时不影响其它事务日志的写入,第三个则可以保证事务在向系统缓冲区写 Redo 日志时互不影响,提升并发性。Select offset limit 操作则是将计算下推到引擎层,降低 CPU 资源消耗的同时,提升性能。



而在功能方面,我们实现了官方版本所没有的功能,比如加密、审计、线程池,并行复制。首先是审计功能,官方的版本是没有审计这个功能的,只有企业版才有,我们结合自己的实际情况,为了保证用户的性能,我们做了一个 audit 的插件,从而保证性能的同时实现了用户所需要的功能。




第三个是 thread handling,我们在测试压力测试的时候,随着并发的加大,性能会首先提升,然后下降,原因则是系统内部各种资源的竟争比较严重,TXSQL 通过把 Thread Pool 引入来解决这个问题,并且解决了以下几个问题:


  • 解决了 Threadpool 情况下全局读锁所造成的死锁问题

  • 解决了 Dump 线程对于 Thread Pool 的影响

  • 添加新的 Information Schema 表来观察 ThreadPool 内部的运行情况




当主库压力不断变大的时候,我们备库的消耗数赶不上主库生产的时候,从 5.1,5.5, 5.6,5.7,这个问题始终没有得到很好的解决,5.6 的时候虽然有一个并行算法,但是并不能完全解决延迟问题,我们引入了自己的并行,从而很好解决了这个问题。当你主库延迟的时候,主库挂了,备库没有消费完累积的 RelayLog 之前,服务器是不能够提供服务的,如果接受服务的话会有双写的问题。


无论是我们在上云过程中还是服务用户过程中,都遇到了各种各样的困难。


比如我们在帮一个游戏公司上云过程中发现了他们的性能问题,我们对系统进行分析的时候对它进行了优化,调优了各种参数并升级内核,最终使用户的性能从 7 万上升到 17 万。


第二案例比较突出的是游戏客户,他们的实例遇到了内存泄露的问题,占用内存不断上升,造成了机器的 OOM,这个问题我们花了将近一周的时间找到问题 RootCause,然后用一周的时间进行灰度发布和测试,我们 Fix Bug 的速度一般是两周,而官方受限于版本发布,一般都需要两到三个月才能解决。



TXSQL 只是作为内核版本来帮助用户进行计算。我们的稳定性有几个来保证,一个是全链路监控,一个是机器层面操作系统方面的监控,还有 MySQL 的秒级监控,以及人工的在线帮助。



第五部分:TXSQL 未来的发展方向


在保持稳定性,性能调优和功能实现的基础上,未来我们会以这几个方向。


批量计算:对于可以让 Engine 做的事情,我们可以将计算下推到 Engine 层来做,减少消耗。


执行计划缓存也是我们在不久将来要做的事情,之前做过一个测试,最简单的基于主键的查询就会有 10%的性能提升。


为了解决存储的问题,我们将 RocksDB 引入到了 TXSQL 中,即 TXRocks,也会在近期推出这个产品,在支持事务操作的同时,可以极大的降低用户成本。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/49D_yYl43bNvpMa6m8rxjw


2019-10-28 16:58609

评论

发布
暂无评论
发现更多内容

Java常用的几个Json库,性能强势对比!

xcbeyond

性能优化 6月日更

Kubernetes手记(16)- 网络通信

雪雷

6月日更

webpack编译原理

法医

大前端 webpack 6月日更

JAVA面向对象(六)--类和对象

加百利

Java 6月日更

Linux之cd命令

入门小站

Linux

架构实战营 - 模块 6- 作业

泄矢的呼啦圈

架构实战营

项目经理如何才能不背锅

escray

学习 极客时间 朱赟的技术管理课 6月日更

架构实战营模块6作业

Vic

架构实战营

【架构实战营】第 6 模块作业

swordman

架构实战营

科技进步道阻且长,仍未来可期

架构精进之路

科技 6月日更

软件技术从1996年以后就停滞不前了!?难道软件技术难返“春天”了么?

三掌柜

试用期 签约计划 人气作者 TOP10

[译] R8 优化:Null 数据分析 (第一篇)

Antway

JSON转Excel

入门小站

工具分享

[译] R8 优化:Null 数据分析 (第二篇)

Antway

6月日更

Python——命名元组 (namedtuple)

在即

6月日更

【Flutter 专题】100 何为 Flutter Widgets ?

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

上云赋智的企业们,也许是这届618的最大赢家

脑极体

ServeMux详解

Rayjun

HTTP Go 语言

网络攻防学习笔记 Day48

穿过生命散发芬芳

网络攻防 6月日更

自然语言处理技术

Qien Z.

nlp 6月日更

Kubernetes手记(15)- dashboard

雪雷

k8s 6月日更

Nike上货提醒:监控到商品尺码SKU

木头

Nike监控 上货监控 SKU监控

微服务的由来

卢卡多多

微服务 6月日更

JavaScript 学习(五)

空城机

JavaScript 大前端 6月日更

架构师实战营 模块六作业(拆分电商系统为微服务)

好吃不贵

业务架构

华为的活动

IT蜗壳-Tango

6月日更

深入浅出 Ajax 的核心原理

悟空聊架构

ajax 架构 大前端 6月日更 悟空聊架构

【Vue2.x 源码学习】第十八篇 - 根据 render 函数,生成 vnode

Brave

源码 vue2 6月日更

解读SpringBoot和SpringMVC中配置类的@Impot等导入是如何解析的

赵镇

spring

简单实现springmvc中的请求处理

赵镇

springmvc

「SQL数据分析系列」7. 数据生成、转换以及操作

数据与智能

数据库 sql

TXSQL是什么?云计算时代数据库核弹头_云计算_张青林_InfoQ精选文章