本期采访的讲师是来自腾讯高级软件工程师 雷海林,他有着10年以上的Linux后台Server开发经验,目前主要从事分布式Cache、实时大数据处理引擎,分布式MySQL(TDSQL)设计和开发工作。
他将在SDCC 2016 深圳站之数据库峰会上分享的主题是《 腾讯金融云数据库备份恢复原理与实践 》,全部数据库技术峰会讲师情况和议题等可参见:SDCC深圳站数据库/大数据专场讲师议题全公布。
以下是专访内容:
CSDN:首先请简单介绍下您和您所在的公司,以及目前所负责的领域。
雷海林: 我叫雷海林,现任职于腾讯公司TEG计费平台部,目前是腾讯金融级高一致性分布式数据库TDSQL的技术负责人。
CSDN:腾讯作为业内知名企业,您在腾讯担任高级软件工程师以来,有没有给您留下印象深刻的人或事呢?
雷海林:加入腾讯公司以来,从最初的很简单的后台Server开发开始,中途经历了各种跨IDC,跨城容灾技术方案的挑战,然后再到高一致性分布式Cache,实时大数据引擎的开发,最后又因为SSD技术的大量普及和团队对分布式数据库的要求,很幸运与小伙伴们一起实现了TDSQL,感觉技术是需要持续积累和坚持,要时刻拥抱变化,这样机会来的时候才能及时抓住。
CSDN:在开发过程中,您和您的团队遇到哪些技术难点,并且每个阶段又是如何克服的呢?
雷海林:我目前印象比较深的有如下几个方面:
- 我们团队虽然使用MySQL有上10年的历史了,但是真正在做TDSQL的时候发现大家在MySQL源码的积累上还是不多的,所以在做的过程是充满了不确定性和忐忑,比如需要某个功能,那么不确定业界是否已经有相关的讨论或者补丁,自己做修改是否能融入MySQL等等,出现这些问题都是源于我们对MySQL缺乏足够的了解,同时MySQL又已经非常庞大了,因此我们需要补足这块的知识。最终我们是采用7*12的工作制连续封闭了3个多月,仔细阅读MySQL手册,阅读各种关于MySQL内核,高可用技术,MySQL运营优化相关的书籍和博客,分模块熟悉MySQL代码等等,再逐渐引入对MySQL,Pg,Oracle等数据库熟悉和感兴趣的同事,最后才感觉入门了,可以动MySQL了,当然现在还需要不断地学习。
- 高一致性的改造:其实在做TDSQL之前,为了避免数据丢失,业界大部分采用的方案是半同步和Galera集群技术,但是我们在经历大量测试过程中,发现在数据一致性,跨IDC性能方面还是存在不少问题,而我们团队以前积累的高一致性切换技术又没法直接套用,同时发现MySQL在金融领域也没有太多的成功案例可以参考,所以是很纠结和苦恼的,但是大家都意识到NoSQL是很有局限性的,基于MySQL的高一致性改造方案是必须搞的,最终我们静下心来,仔细研究CAP理论并结合我们多年的后台开发经验,最终找到的解决方案是在MySQL开启线程池的情况下,通过异步化改造是可以实现性能的提升,同时结合我们以前在高一致性的技术积累引入容灾调度,选举,闪回等技术最终实现了目前的强同步架构,一方面保证了跨IDC的高性能,同时保证了单IDC故障能自动切换,并且能保证事务零丢失。
- 分布式方案: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(深圳站)峰会上看到哪些内容?
雷海林:希望不要提太高大上的东西,所有话题能站在听众的角度分享的内容是可以容易被复制和学习的。