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

阅读数:119 2019 年 10 月 28 日 16:58

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 解决了 Threadpool 情况下全局读锁所造成的死锁问题
  • 解决了 Dump 线程对于 Thread Pool 的影响
  • 添加新的 Information Schema 表来观察 ThreadPool 内部的运行情况

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原文链接:

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

评论

发布