在MySQL应用上的挑战

本期采访的讲师是来自腾讯高级软件工程师 雷海林,他有着10年以上的Linux后台Server开发经验,目前主要从事分布式Cache、实时大数据处理引擎,分布式MySQL(TDSQL)设计和开发工作。

他将在SDCC 2016 深圳站之数据库峰会上分享的主题是《 腾讯金融云数据库备份恢复原理与实践 》,全部数据库技术峰会讲师情况和议题等可参见:SDCC深圳站数据库/大数据专场讲师议题全公布

以下是专访内容:

CSDN:首先请简单介绍下您和您所在的公司,以及目前所负责的领域。

雷海林: 我叫雷海林,现任职于腾讯公司TEG计费平台部,目前是腾讯金融级高一致性分布式数据库TDSQL的技术负责人。

CSDN:腾讯作为业内知名企业,您在腾讯担任高级软件工程师以来,有没有给您留下印象深刻的人或事呢?

雷海林:加入腾讯公司以来,从最初的很简单的后台Server开发开始,中途经历了各种跨IDC,跨城容灾技术方案的挑战,然后再到高一致性分布式Cache,实时大数据引擎的开发,最后又因为SSD技术的大量普及和团队对分布式数据库的要求,很幸运与小伙伴们一起实现了TDSQL,感觉技术是需要持续积累和坚持,要时刻拥抱变化,这样机会来的时候才能及时抓住。

CSDN:在开发过程中,您和您的团队遇到哪些技术难点,并且每个阶段又是如何克服的呢?

雷海林:我目前印象比较深的有如下几个方面:

  1. 我们团队虽然使用MySQL有上10年的历史了,但是真正在做TDSQL的时候发现大家在MySQL源码的积累上还是不多的,所以在做的过程是充满了不确定性和忐忑,比如需要某个功能,那么不确定业界是否已经有相关的讨论或者补丁,自己做修改是否能融入MySQL等等,出现这些问题都是源于我们对MySQL缺乏足够的了解,同时MySQL又已经非常庞大了,因此我们需要补足这块的知识。最终我们是采用7*12的工作制连续封闭了3个多月,仔细阅读MySQL手册,阅读各种关于MySQL内核,高可用技术,MySQL运营优化相关的书籍和博客,分模块熟悉MySQL代码等等,再逐渐引入对MySQL,Pg,Oracle等数据库熟悉和感兴趣的同事,最后才感觉入门了,可以动MySQL了,当然现在还需要不断地学习。
  2. 高一致性的改造:其实在做TDSQL之前,为了避免数据丢失,业界大部分采用的方案是半同步和Galera集群技术,但是我们在经历大量测试过程中,发现在数据一致性,跨IDC性能方面还是存在不少问题,而我们团队以前积累的高一致性切换技术又没法直接套用,同时发现MySQL在金融领域也没有太多的成功案例可以参考,所以是很纠结和苦恼的,但是大家都意识到NoSQL是很有局限性的,基于MySQL的高一致性改造方案是必须搞的,最终我们静下心来,仔细研究CAP理论并结合我们多年的后台开发经验,最终找到的解决方案是在MySQL开启线程池的情况下,通过异步化改造是可以实现性能的提升,同时结合我们以前在高一致性的技术积累引入容灾调度,选举,闪回等技术最终实现了目前的强同步架构,一方面保证了跨IDC的高性能,同时保证了单IDC故障能自动切换,并且能保证事务零丢失。
  3. 分布式方案:MySQL采用的share nothing架构,在互联网大数据量的场景下主要靠业务层来做水平和垂直拆分,牺牲了很多关系数据库的精髓。为了让业务层能得到解放,必须将这个工作放到数据库层来实现,目前解决方案都是通过引入中间件来解决这个问题,当然TDSQL也是采用这个思路;在做TDSQL之前我们已经有不少在NoSQL下自动Shard的方案,所以我们当时也是直接采用这个思路,让TDSQL的分表完全不需要业务干预,集群根据表的大小,CPU/IO利用率等情况来做自动Shard,让开发人员完全放弃事务和Join,发现推广起来非常不顺利,同时DBA运营起来发现数据分布特别灵活,在做备份恢复等操作都很不方便,总体而言这个方案过于理想化,实践中是失败的。既然意识到问题所在,我们立即调整思路,多听下客户(如Webank,部门的业务团队)的意见,再仔细分析分布式与数据库传统特性如事务,Join等结合的难点,所以我们得出结论这块是需要找一个平衡点的,最终提出的解决方案是放弃灵活的自动shard方案,支持将具有同样shard key的库表做成一个group,在数据扩容,缩容的过程当成一个整体来搬迁,在一个group内尽量完整支持数据库的事务和Join等特性,对于这套方案,客户都很容易理解和使用,目前推广起来就顺利多了。

CSDN:能否结合您多年的实战经验,谈谈对MySQL未来发展的前景,分享下您对未来数据库相关领域的一些看法?

雷海林:目前MySQL的使用量非常庞大,国内外BAT,网易,Google,Facebook等大型互联网公司都有基于MySQL进行定制化改造,并且将改造的原理和代码基本上都反馈到了社区或者以博客,技术大会等形式进行了介绍,所以在这个领域大家都能提升的非常快。而Oracle的官方MySQL,Percona,Mariadb作为主流的MySQL分支在商业利益的竞争驱动下也会竭尽全力地开发新功能和做性能优化,适配新的硬件等等,所以我对MySQL的发展非常看好,相信每年都会有亮点出现。接下来重点应该会在SQL执行计划的优化,引擎层的性能优化,在线DDL,可运营型和分布式中间件方面持续发力。

CSDN:作为前辈,您觉得如何才能更好的掌握数据库这门技术?

雷海林:数据库作为与操作系统,编译器并列的系统软件,涉及到的理论知识,代码实现和运营管理都是需要大量时间的学习才能掌握的好的,我想初期应该是重点研究数据库的用户手册和Innodb引擎的手册,重点要先对基本功能有个清晰的了解和验证,对各个参数和状态字段尽量了解含义,然后再根据兴趣可以找一些数据库内核分析的书籍和文章来学习并验证,同时因为MySQL是个开源软件,所以根据兴趣也可以找代码来分析了,当然前期通过3.x版本的代码入手可能更好一点;总而言之,数据库技术是一门实践性很强的技术,需要能静下心来投入大量时间来琢磨,只要努力,随时都能让你提高。

CSDN:除了这些以外,您最近还会关注哪些技术?

雷海林:我最近比较关注高性能的后台开发,分布式技术的理论和分布式消息队列,也对go语言非常感兴趣。

CSDN:在本次SDCC 2016(深圳站)数据库峰会上,您分享的话题是?

雷海林:我是一个开发人员,对于常用的东西都喜欢搞懂它的原理,所以我这次的分享主要是关于各种备份技术的底层原理和优缺点介绍,最后再介绍下TDSQL目前采用的方案和后期可能的优化方向,也希望借此机会,跟业内其他数据库团队交流交流。

CSDN:您最期待在SDCC 2016(深圳站)峰会上看到哪些内容?

雷海林:希望不要提太高大上的东西,所有话题能站在听众的角度分享的内容是可以容易被复制和学习的。

时间: 2024-08-27 08:55:42

在MySQL应用上的挑战的相关文章

高性能MySQL(上)

今天在公司做了一个分享,发上来大家探讨一下! 高性能MySQL(上),布布扣,bubuko.com

Mysql数据库上修改日期-->造数据

这次要给客户安装测试ineedle设备,但是安装后不会立刻有数据显示,不能够全面的展示给用户web界面的一些信息.此时需要有一个公网服务器能够展示一下ineedle统计数据,但是公司58设备上没有流量了,近期的数据没有更新了,所以准备将数据库中实际数据抽出几天的更改一下日期,使其展示ineedle的web界面上.最新的七天数据是2015.07.27--2015.08.02这7天的数据,正好一个星期.计划是将2015.07.27-2015.08.02修改为2015.10.19-2015.10.25

mysql选择上一条、下一条数据记录

1.表数据结构 选择mysql记录上一条,下一条sql语句 SELECT * FROM user ORDER BY rank ASC +----+------+---------+ | ID | rank | name | +----+------+---------+ | 1 | 1 | admin1 | | 2 | 2 | admin2 | | 3 | 3 | admin3 | | 4 | 4 | admin4 | | 5 | 5 | admin5 | | 6 | 6 | admin6 |

MySQL数据库 上

MySQL数据库 (上) MySQL数据类型:数值类型.日期和时间类型.字符串类型 1.数值类型 注:BIT数据类型保存位字段值,并且支持MyISAM.MEMORY.InnoDB和BDB表 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 77

RDS MySQL 表上 Metadata lock 的产生和处理

1. Metadata lock wait 出现的场景 2. Metadata lock wait 的含义 3. 导致 Metadata lock wait 等待的活动事务 4. 解决方案 5. 如何避免出现长时间 Metadata lock wait 导致表上相关查询阻塞,影响业务 1. Metadata lock wait 出现的场景 创建.删除索引 修改表结构 表维护操作(optimize table.repair table 等) 删除表 获取表上表级写锁 (lock table tab

如何查看Mysql服务器上的版本

select version(); 1,mysql 的守护进程是mysqld [[email protected] ~]# service mysqld start 启动 MySQL: [确定] 你可以看看你的服务是否已经添加到linux上 [[email protected] ~]# chkconfig --list mysqld mysqld 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:启用 6:关闭 [[email protected] ~]# 如果没有,先添加,用chkconf

在mysql 服务器上安装sysbench-0.4.12,报错。

下载可以到csdn.net上下载. 其他环境介绍: 1.rhel6.3 x64,最小化安装 2.mysql 5.5.40 安装步骤: tar xzvf  tar -xzvf sysbench-0.4.12.tar.gz cd sysbench-0.4.12 ./autogen.sh ./configure --prefix=/project/class2/sysbench --with-mysql=/project/class2/mysql/ --with-mysql-includes=/pro

mysql下载,安装及在Navicat for MySQL工具上连接的问题

之前一直使用的是mysql的数据库,所以总觉得对mysql的安装使用是手到擒来的事,但是因为最近需要重新安装mysql突然发现了很多问题(有点打脸).事实证明还是有必要记录一下的.这里面我归纳了一下网上的方法和我自己的总结. *************************************************************************************** Mysql的下载: 下载mysql:https://dev.mysql.com/downloads

详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上)

SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. SpringMVC分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行定制. MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架. 本文旨在快速且详细的介绍intellij idea 搭建SS