数据库内核月报 - 2016 / 10

MySQL · 社区见闻 · Percona Live 2016 见闻

前言

今年的 Percona Live 时间很凑巧,正好夹在 Oracle Open World 和 MariaDB 开发者大会之间,而且跟 MariaDB 开发者大会一样在阿姆斯特丹,因此蹭了 MariaDB Foundation 的免费票去参加了 Percona Live。

从纽约飞阿姆斯特丹时,从芬兰赫尔辛基中转呆了一天,承蒙祖师爷 Monty 厚爱到他家住了一天,简直就是黑客帝国……

IMG_4176

他家所有的电器设备都可以通过这个中控系统来控制,还可以远程控制。在参加云栖大会的时候他还给我们同事演示了一番,估计他老婆在家里看到灯一会开一会关心里想:这货又在给谁演示远程系统了-_-|||

早上九点到老爷子家,他已经在工作室 Coding 了;下午三点才给我弄了一块鱼片,已经饿成狗了,10分钟吃完又去干活了……晚上8点才出来做晚饭,9点收拾完又去工作了……第二天一早去阿姆斯特丹6点出发,老子说昨天 Review Code 比较晚,只睡了2小时,一上飞机他就直接睡了。

不知道要是我们这么有钱,这么有名望后,这么老还能不能这样努力的工作……

闲扯到此打住,我们来看看今年的 Percona Live 有哪些主题和消息。

主题

今年的主题大户,基本上还是老样子,Percona 自己的主题占了半壁江山,Oracle 原厂占了剩下的大部分,然后 Facebook 和 Booking 依然是民间大厂主题最多的。

现场有差不多10个 Room 同时在进行 Topic,很多主题时间重叠,我只能挑选一部分参加,Oracle 的主题基本上在 Oracle Open World 都讲过了,连人都没换 -_-!!! 所以也就没去听。

Percona

Colin 从 MariaDB 跳槽到 Percona 后第一次出来分享,他这次讲的是如何保证 MySQL/MariaDB 的安全性。

从登陆开始,他提出了包括应该使用 Auth_socket,或者使用远程鉴权,Windows可以用Active Directory。

使用中应该使用 SSL 协议进行传输加密,文件应该使用加密规则对数据文件进行加密防止文件拖库。

这里 MySQL 和 MariaDB 还有点不同,MySQL 只对数据文件本身加密,也就是说如果 Binlog 被拖走了,或者 Redo 被拖走了,还是有机会还原出数据的。
MariaDB 首先它能支持 Amazon 的 KMS,远程获取密钥,这算是跟 Amazon 做的定制。并且可以根据 KMS 提供的更新密码后台异步更新文件的加密,也就是说执行过程中密钥还可以更换。
此外 MariaDB 对所有内容都加密了,除了数据文件,还有 Binlog 和 Redo,这一点 Monty 确实考虑的更全面,这样哪怕整个机器都被人搬走了,只要密钥服务器还在,就没法破解数据。

从这些细节也可以看出 Monty 对 MariaDB 的规划:二进制功能兼容,但是使用不同的代码。

这样有好处有坏处,好处是代码不用跟着 MySQL 走,不用等待官方小版本升级,有 Bugfix 直接抠出代码来 Port;坏处是像我们这些写Patch的人,提给两边的 Patch 可能差异会越来越大。

IMG_4184

Booking

然后听了下 Booking 怎么利用 Multi-Source Replication 来进行数据重分布。不约而同,我们也是用Multi-Source 来对数据进行重分布,这是目前主要的用处,英雄所见略同。

然而,我开发这个功能的初衷是为了能用一台大主机完成多个实例的备份,减少主主复制中对空闲备机的浪费,不过现在好像也没谁拿 Multi-Source 这么用,淡淡的忧伤。反正,有用就好,开源么就是为了造福大家,怎么开心怎么用。

Anyway,自己写的功能在这些高大上的传说中的网站被使用,还是有点小激动。这么多人热爱开源,参与开源的动力也就是来源于此吧。

当然 Booking 希望 Multi-Source 也能支持Semi-Sync,正好,这个我在 Double Sync 这个补丁中已经顺手写完了,再走完开源流程后就可以公开,跟 Monty 提了后正好他也有这个计划,现在他就不用动了,等着我的补丁开源,也许不多久在 MariaDB/MySQL 中就可以看到每个通道都可以设置不同的 Semi-Sync 状态了。

IMG_4185

PS. Booking的MySQL工程师基本都是长发飘飘的…………汉子!

Facebook

Facebook 今年讲了好几个主题都多少跟 RocksDB 有点关系,真的是不遗余力的强推他们自己的产品。

Yoshinori 和 Mark 两位老司机轮番上场,从内核设计到实践应用,全方面介绍RocksDB。

RocksDB 本质上是基于 LevelDB 的,也就是 LSM-Tree 的结构,因此对写有天然的优势。然后 Facebook 针对 Timeline 的业务特点做了很多改进,支持了事务,还可以做快照。

总之跟 Mark 聊下来就是我们啥都支持,现在不支持的也马上要支持,你赶紧用就得了…… 聊 TokuDB 和 RocksDB 的对比,他认为所有方面 RocksDB 都吊打 TokuDB,这个我们还需要自己测试后才能下结论。

Facebook 自己提供的测试数据上看确实是这样,但是到底是 Benchmark 还是 Benchmarketing,一定要自己测试。(原谅我的拍照水平渣画质,可以在 Percona Live 的网站上找到原始PPT)

另外十二月的 CMUG 年底大会,Yoshinori 和 Mark 也会组团来国内分享 RocksDB,到时候可以深入交流。

IMG_4186

Alexey

Sysbench 的作者 Alexey 离开 Percona 后作为个体户这次也来讲了他的工作 —— MySQL on ARM,这也是个很牛逼的项目。

很有幸前段时间跟 Alexey 一起在阿里共同为 MySQL 适配 ARM 做了一点微小的工作,因此对一些细节也是比较了解的,不过 Alexey 回家后继续做了更多深入的工作,例如当时在公司调试我们并没有调通 TokuDB 在 ARM 上的编译,现在他终于搞定了。

ARM 和 x86 在体系结构和指令集上都有很大的差异,包括 Cache Line 不一样,会影响 CPU Cache 对齐;ARM的核数动辄四五十Core,在多核上的问题也比 x86 突出的多;此外还有更突出的 NUMA 问题,GCC 编译问题,指令集结果差异等问题,Alexey 一一予以了解决,还发现了官方本身 Test Case 在 x86 上就存在的一些问题。

Alexey 对这方面做了大量的改动,并且在他的GitHub资源里放了 ARM 版 MySQL 的源码,如果想试试 ARM 的同学可以到他的 GitHub去下载:https://github.com/akopytov/cavium-mysql

Geek 都有一个特点,问题不彻底搞明白,是睡不着觉的,这些活都是没算在付费服务里面的,是他自己觉得一定要彻底搞清楚这些问题。

IMG_4187

总结

今年的Percona Live最重要的就两个事:
1. MySQL 8.0 要来了,跟 OOW 上一样无数的主题狂轰滥炸给 8.0 造势。
2. MyRocks/RockDB 是今年最火的引擎,FB 不遗余力的投入。

关于 8.0,对用户来说可能感觉还不错,但对我们这些内核开发者来说,跟 InnoDB 绑定太紧,是福是祸真不好说……
关于 RocksDB,无论如何也应该试一下,尤其是你在用 TokuDB 的话,毕竟 Percona 已经不太维护了(主要是没有资深开发者了),RocksDB 有 Facebook 一个整团队在维护,并且自己也在大规模用,未必不是一个好的选择。