在MySQL应用上的挑战
本期采访的讲师是来自腾讯高级软件工程师 雷海林,他有着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(深圳站)峰会上看到哪些内容?
雷海林:希望不要提太高大上的东西,所有话题能站在听众的角度分享的内容是可以容易被复制和学习的。
在MySQL应用上的挑战的更多相关文章
- 怎样将MySQL数据库上传到服务器
首先,需要将本地的数据库导出来,作为一个数据文件,以备稍后上传到服务器用,在本地登陆phpmyadmin控制面板: 登陆成功后,在左侧选择需要操作的数据库: 选择后,页面会自动刷新,然后再在右边点击[ ...
- 定时备份 MySQL 并上传到七牛
多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份. ...
- mysql选择上一条、下一条数据记录,排序上移、下移、置顶
1.功能须要 完毕列表排序上移,下移,置顶功能.效果例如以下图所看到的: 2设置思路 设置一个rank为之间戳,通过选择上移,就是将本记录与上一条记录rank值交换,下移就是将本条记录与下一条记录ra ...
- PHP+Mysql查询上一篇和下一篇文章实例
简单的PHP+Mysql查询上一篇和下一篇文章实例,并输出上一篇和下一篇文章的标题和链接,适合新手学习 获取当前浏览文章id: $id = isset($_GET['id']) > 0 ? in ...
- 【曹工杂谈】Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱
瞎扯一点非技术 本来今天上午就打算写的,结果中途被别的事吸引了注意力,公司和某保险公司合作推了一个医疗保险,让我们给父母买,然后我研究了半天条款:又想起来之前买的支付宝那个好医保,也买了两年多了,但是 ...
- Mysql数据库上修改日期-->造数据
这次要给客户安装测试ineedle设备,但是安装后不会立刻有数据显示,不能够全面的展示给用户web界面的一些信息.此时需要有一个公网服务器能够展示一下ineedle统计数据,但是公司58设备上没有流量 ...
- mysql线上一个定时备份脚本
数据库服务使用的是阿里云的mysql,远程进行定时的全量备份,备份到本地,以防万一.mysql数据库远程备份的数据最好打包压缩: [root@huanqiuPC crontab]# pwd/Data/ ...
- MySQL线上执行大事务或锁表操作
前提 在线执行一些大事务或锁表操作(给某个核心级表加一列或者执行修改操作),此时不但主库从库要长时间锁表,主从延迟也会变大.未避免大事务sql对整个集群产生影响,,我们希望一条SQL语句只在Maste ...
- MySQL入门(上)
1 课程回顾 自定义标签&编码实战 1)自定义标签步骤: 1.1 编写标签处理器类,继承SimpleTagSupport类,覆盖doTag方法 1.2 在WEB-INF目录下建立tld文件,在 ...
随机推荐
- 基于java语言的给cube添加custom view来实现权限控制
今天是农历2014年的最后一个工作日了,在这里提前祝大家新年快乐.羊年大吉!当然本人今天也拿出来点儿真东西,做为献给大家的新年礼物,依次共勉. 下文主要讲述的是使用Java代码来完成对cube基于部门 ...
- GetXamarin.xambe
GetXamarin.xambe <!DOCTYPE html> <html lang="en" class=""> <head& ...
- 在 WF 4 中编写自定义控制流活动
在 WF 4 中编写自定义控制流活动 Leon Welicki 控制流是指组织和执行程序中各个指令的方法. 在 Windows Workflow Foundation 4 (WF 4) 中,控制流活动 ...
- [ES6] 04. The let keyword -- 2 Fiald case
Fiald case 1: let can work in it's block { let a = 10; var b = 1; } a // ReferenceError: a is not de ...
- 【pyhon】nvshens按目录图片批量下载爬虫1.00(多线程版)
# nvshens按目录图片批量下载爬虫1.00(多线程版) from bs4 import BeautifulSoup import requests import datetime import ...
- C++ 11 - STL - 函数对象(Function Object) (中)
我们再来看一个复杂的例子 需求: 我们需要对集合内每个元素加上一个特定的值 代码如下: AddInt.h class AddInt { private: int theValue; // the va ...
- Unity时钟定时器插件——Vision Timer源码分析之二
Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...
- 算法笔记_131:出现次数超过一半的数(Java)
目录 1 问题描述 2 解决方案 2.1 每次删除两个不同的数 2.2 记录两个值 1 问题描述 数组中有一个数出现的次数超过了数组长度的一半,请找出这个数. 2 解决方案 2.1 每次删除两个不 ...
- zend studio 10安装+破解+汉化
http://pan.baidu.com/share/link?shareid=1857675714&uk=3325301372 在线安装汉化包:http://309614533.blog.1 ...
- JS字符编码函数区别分析
http://www.jb51.net/article/14657.htm js对文字编码有3个函数: escape,encodeURI,encodeURIComponent, 对应的解码函数:une ...