其实在数字的日子还是很开心的, 因为线上的服务已经很稳定, Pika 已经在公司大规模的铺开, 因为开源, 也有挺多大公司使用, 收到的评价也都还行, floyd/zeppelin 也搞完, 用 @yyj 的话说你就是”每天来看看论文, review review 代码, 这日子过的太开心的”. 我记得那会老板对我们团队最大的要求就是线上稳定, 我记得老板的老板说, “公司对你们这个团队的最大要求就是稳定, 线上不出事就行”.

我想大部分的基础架构团队都会遇到类似的瓶颈, 现有的线上服务已经能够支持公司大部分服务, 公司的业务团队对基础架构团队最大的诉求是稳定, 对于更极致的性能, 对于弹性等等, 其实诉求不大. 但是作为小组长, 需要时刻给自己和团队找一些新的方向.

所以在17年的时候, 我觉得我应该出来看看了.

其实那会出来就聊了集团的数据库团队和阿里云的数据库团队. 后来去了阿里云的数据库团队因为, 我觉得如果做云厂商的话, 那么可能就不会遇到我之前的问题, 因为云厂商的话, 面临的是整个行业的竞争, 客户会选择用脚投票, 你的任何优化对于性能, 成本只要有收益, 客户就会投给你. 就像飞刀说的客户为产品买单, 不会为技术买单.

现在看来, 应该是对的. 很多时候客户会把我们和各种其他产品进行PK, 我们在性能上的优化只要稳定, 有收益,一定有客户买单.

我记得之前有一个大客户在PolarDB 的blob 字段里面存储了100kb 左右的字段, 每一次更新, 虽然只是修改其中的某一个字段, 但是都是整个 100kb 字段的update 操作, 那么整个性能的瓶颈就卡在redo log 的写入上了, 因为PolarDB 是基于计算存储分离的架构, InnoDB 是基于 ARIES/WAL 的实现, redo log 的写入是顺序写入, 这样设计的原因是因为早年机械盘的顺序写的性能是远高于随机写的, 因此将随机IO 转换成顺序IO 从而充分利用硬件的能力, 但是在分布式存储上就完全不是这样, 分布式存储的随机写性能会高于顺序写, 所以我们重写了redo log, 实现了”random write redo log” , 从而赢下了这个客户.

还有一个客户有几十个索引, 那么二级索引的插入就成为瓶颈, 还有客户并发数特别高, 那么btree 的index lock 就会成为瓶颈, 还有客户有查询历史数据的需求, 那么如果保存undo log, readview 如何保存就会成本瓶颈, 这些我们也都做了相应的优化, 当然也是因为有这些客户场景, 迫使我们去做这些优化.

我们还针对一次page IO 在分布式存储latency 过长从而导致持有Lock 时间过长实现了shadow page, 针对lock 我们还做了”early lock release” 等等, 都是在优化3% 左右的性能, 但正是这些慢慢的积累, 才有现在客户回访里面对我们性能的肯定.

在这个行业做的久了, 你就会越加的尊敬Oracle. 在单机存储引擎领域, Oracle 做的真的是非常的极致, 现在PolarDB 能够和Oracle PK 也只是因为赛道变了, 但是在单机存储引擎上, 我仍然觉得Oracle 很多地方值得我们学习. 所以不管别人怎么说, 我还是觉得 Oracle, AWS aurora 团队那些糟老头子比我们强, 一定有很多值得我们学习的地方, 我还是觉得数据库领域是慢工出细活, 没有所谓的灵光一闪, 只有日积月累.

记得之前和@江疑 聊过, 可能阿里巴巴以前的数据库针对电商行业做了大量了优化, 但是还有很多行业等待我们去发掘, 比如游戏, 比如教育等待. 这也是我觉得非常有意思的地方, 可以做的事情还很多, 我们还差的很多. 就好像在王者荣耀里面, 我喜欢李白/韩信一样, 天花板很高, 永远没有尽头, 所以这个领域40/50/60 岁的人大有人在.

我们所说的国产化的趋势, 计算机基础领域人才的培养, 我理解是需要在硬实力上进行PK 的, 我理解的硬实力应该是存储引擎, 分布式存储, 是事务系统等等.

从数字到现在, 每年都会参加校招, 也和很多毕业生聊过, 其实挺多同学不知道在计算机领域不同的方向其实就跟不同行业一样. 所以我总是建议毕业生, 先做难的事情, 再做简单的.

然后就跟我的 blog 的 quote 一样, “做有积累的事情”. 希望你工作十年以后应该跟工作2年的同学是不一样的, 我理解基础架构/数据库, 算法(但是算法我不懂)是这样的领域, 就像我现在的老板@jimmy Yang 一样, 40好几的人了, 每天还是需要和我们一起看代码, 一起学习的..

我还是建议毕业生刚开始的时候先好好写 C/C++, 能够知道具体每一个函数的调用栈是怎样, 能够知道每一个mutex 调用的开销是怎样, 能够很接近硬件, 充分利用硬件, 不用在上面在隔着一层.

我还是建议毕业生如果选择做工程的话, 可以对操作系统, 数据库进行深入的了解, 我理解这两个领域是工程里面发展最成熟也最快的领域, 你可以在这两个方向充分学习, 以后转向其他方向, 我理解也是有帮助的.

另外还是建议毕业生学好基础学科, 国外很多的教材, 比如 MIT 6.824, CMU Andy 的课程等等都非常有利于学习, 国内的知识付费的App 真的不建议用, 真的是割韭菜在我看来.

记得乔布斯说过 “Why join the navy if you can be a pirate?”, 很多时候我们都非常理想化, 但是我更建议的是先加入navy, 学习如何成长成优秀的navy, 然后如果喜欢或者有梦想的话再成为pirate. 大家都是成年人, 这个是最稳妥的方案. 当然你如果足够优秀, 也可以忽略.

看到后面, 你如果觉得PolarDB 这个事情很有意思, 你对存储引擎, SQL, 分布式存储感兴趣的话, 现在阿里巴巴面向2022届的实习生招聘已经开始了, “Welcome To The Jungle”

当然社招的同学感兴趣, 也可以联系我.

邮箱: baotiao@gmail.com


<
Previous Post
WorkLog InnoDB Faster truncate/drop table space
>
Next Post
路在脚下, 从BTree 到Polar Index