温正湖,男,理学院2007届应用物理学专业毕业生,毕业后前往浙江大学光电系攻读硕士研究生,获校优秀毕业生等荣誉。2010年,温正湖校友入职华为杭研所从事Linux操作系统内核开发,2013年加入网易杭研院。他从零开始学习数据库技术,目前是网易数据库技术专家和技术主管,杭州市E类人才。他是业界主流数据库技术会议的明星讲师,开源社区各种分享活动的活跃分子;他累计申请了20多个数据库和大数据领域技术发明专利,已授权11个;他近几年发布90多篇高质量技术博客文章,阅读量数十万;他和团队对MyRocks的优化实践,曾被网易技术委员会评选为年度大奖;他与同事合著的《MySQL内核:InnoDB存储引擎 卷1》在京东上销量超6.3万,好评率达98%,并为2本MySQL技术专著《深入理解MySQL主从原理》和《数据生态:MySQL复制技术与生产实践》做推荐序……
一、加盟网易:挑战数据库内核开发
2013年,中国移动互联网爆发元年,各大互联网公司纷纷加强技术布局以迎接新时代。温正湖加入网易时,摆在面前的是岗位的选择——他钟情的云硬盘开发工作已有人手,网易杭研希望他考虑数据库内核开发,因为有项目使用SSD做InnoDB的二级缓存。彼时温正湖固然有基于Facebook flashcache的SSD缓存项目经验,却对数据库知之甚少,“刚入职时连最简单的SQL都不会写”,所以,选择前者对于他而言更好过渡,选择后者意味着更大的挑战。
温正湖的决定,是接受这个挑战。从大环境来看,2013年是MySQL数据库在国内走向兴盛的时候,彼时“去IOE”是一个热门话题。从个人的角度,温正湖认为,首先,数据库在生产和生活中都至关重要,能实实在在地看到其价值;其次,数据库技术是计算机领域最重要的基石之一,体系复杂,技术含量高,从事这样的岗位会有成就感;再者,在数据库相关岗位中,数据库内核开发跟Linux内核存储领域的关系最紧密,而且越底层通用性越强,更有挑战性。至于技术难度,已经被应用物理学专业毕业的温正湖抛到九霄云外——“四大力学都扛过来了,这个事情肯定也能做好”。
就这样,温正湖加入了网易,但他后来的工作,已经不仅仅是数据库内核开发,当然和他希望让工作产生更多价值的目标还是一致的。在他看来,数据库内核岗位虽然相比Linux内核存储更靠近用户,但如果把用户和内核存储的距离设定为100,那么数据库内核最多也就只前进了20。只有了解业务需求,开发的产品或功能应用到业务场景中去,才能真正产生价值,也才能真正获得成就感。
故而,在做了一年多数据库内核开发(InnoDB L2 Cache、Flashback等)之后,温正湖随着网易云计算的发展,开始从事网易RDS云服务开发。先是做了一个将数据库从物理机迁移到RDS上的管控服务(外部实例迁移功能),帮助成百上千个MySQL实例迁移到RDS上。
后来网易开始做公有云服务,温正湖主导了公有云RDS从云服务架构到用户控制台的改造、优化和提升。由于网易杭研DBA团队很晚才介入公有云的运维,温正湖有机会直接面对外部用户,并随着用户规模的增长得到了更好的锻炼。温正湖还记得,他和中顺易的DBA合作,帮助他们解决了不少问题,数据库团队还获得了中顺易的奖金激励。之后,他还负责了网易公有云MongoDB服务的设计、实现和运维,同时也负责了一段时间公司内部的私有云RDS服务。
2017年10月,温正湖重新回到数据库内核上来,负责网易MySQL分支InnoSQL的特性开发、线上问题定位,同时也负责定位解决MongoDB、Neo4j等数据库问题。温正湖表示,之前的工作经历和积累让他能够更好地做好数据库内核这块工作,但多与业务、DBA和RDS团队接触与沟通仍是将工作做好的关键。
二、排忧解难:关键是建立知识体系
与问题打交道,温正湖将工作中遇到的问题分为三类:
大部分问题其实都比较简单。比如其他同事来请教一些技术性问题,这类问题直接提供答案,或者通过代码或文档确认下即可。还有数据库crash之类的问题。只要有core文件,那么基本上也是会有定位思路的。比较棘手的是性能问题、OOM问题、数据库卡住或复制卡住、数据不一致之类的问题。而对于分析定位故障问题,或者进行性能调优,温正湖认为处理方式基本上是共通的。他分享了以下“套路”:
首先,需要有足够的现场把控能力。通过各种方法和工具来采集尽可能多的现场信息,比如数据库自身的状态和日志。又比如通过GDB调试工具获取调用栈信息,还有系统的I/O、网络和计算资源状态和使用情况等。
其次,要擅于找茬。故障情况总是与正常状态相对应的。需要了解出现问题前发生过什么,做过什么改变,比如是不是数据库版本换了,是不是业务有新的SQL语句,参数配置是不是跟平时的不一样。找茬是为了发现可疑的线索,寻找突破口。
再次,最好有比较广的知识面。数据库类的问题,它可能是因为数据库自身的问题,也可能是所依赖的存储和文件系统,或者操作系统环境问题,甚至是硬件的问题。这些技术知识虽然不是必须的,若能有所了解,可能会事半功倍。比如之前分析过网易云音乐MyRocks性能突然下降的问题,其原因就是RAID卡故障,通过megasas工具能很快发现。
最后,丰富的经验积累也可以提高效率。一个问题第二次出现时,可能只需要确认是不是跟上次一样,无需重头再分析一遍。经验积累不能光靠脑子,还需要勤记。将脑子里的东西dump一份到可持久化的硬盘中,问题再次出现时,脑子里只需要有个索引,知道如何从硬盘里面找到对应的问题分析过程即可。
由于数据库相关技术点非常多,除非工作年限足够长,否则技术人员通常很难对每个技术点都有很深入的理解,温正湖认为,最重要的是要建立技术知识体系。他举例说:“面试时,我都会就事务的ACID属性,从这4个单词层层深入,真的可以问出花来,无穷无尽。”不苛求对原理掌握很好,但千万不能理解错误。
三、享受写作:在网易杭研的快乐成长
温正湖热爱生活,平时喜欢阅读历史、人文、地理和军事类的书籍杂志;也喜欢看电影、慢跑,周末步行去河边、江边、湖边或山脚游玩。但他更热爱的,还是技术写作,不论是技术专利,还是技术博客。他坚持总结和输出,在个人技术博客已分享百余篇文章,累计百万阅读量,上万次点赞收藏分享(https://www.zhihu.com/column/c_206071340)。累计参加10+场全国性的数据库和大数据会议 ,包括中国数据库大会DTCC、大数据顶级分享平台DataFun Talk等。
温正湖技术博客中的文章都是从工作中来,有新技术调研总结,有源码阅读的梳理,也有数据库问题定位分析。他自豪地说:“能够写出这么多文章,说明我的工作是有内容和价值的。我认为,在不影响正常工作进度的前提下,有千万种理由写博客。”
他给出了自己坚持写博客的主要理由:
首先,写文章的过程就是知识梳理的过程。可能某个知识点或某个问题,你认为已经懂了或解决了,可它在脑子里还未成体系,往往过段时间就记不清了。而写的过程需要你进一步去思考,去建立相互间的联系,就像是把一些孤立的点通过不同的边连接,变成一个四通八达的图。因此,写文章可以提升对要写内容的理解,这样有助于加深记忆,把别人的知识变成自己的积累。
其次,写文章有助于充分交流。温正湖目前维护了2个技术博客,分别是网易内部的数据库内核团队博客和知乎上的数据库内核专栏,分别针对公司内外。除了涉及到敏感信息,2个博客基本上是同步的。内部博客让更多的同事知道MySQL有哪些好用的功能,或者存在哪些问题,应当如何规避。同时也能够让各业务和产品知道公司内部谁在做数据库内核,遇到数据库问题或有新的需求能够快速对接。
在知乎建立专栏,在会议上分享数据库相关技术和经验,则是希望有一个技术交流平台和窗口。让温正湖高兴的是,到目前为止,专栏得到了不少数据库大佬的关注,也有不少同行加了微信说看了某个专题的所有文章,对工作有帮助。还有些知友对文章做了评论,起到了交流的作用,同时也认识了不少人。
再次,写文章也是为了提高工作效率。在平时的工作中,很多同事,尤其是数据库云服务和DBA同学会找上来问各种各样的问题,对于一些经常会问道的问题,写成文章,下次有人问的时候,先扔一篇文章过去,不需要每次都被打断手头工作。
四、学长寄语:在学习与突破中不断成长
目前温正湖正带领网易杭研分析性查询引擎和关系型数据库团队进行数据库内核技术研发和落地工作,服务网易公司内部业务和外部商业化客户。他所带领的Impala和Alluxio研发小组是该领域国内一流的内核开发团队,是网易数帆大数据基础平台NDH产品的重要组成部分。团队研发的基于网易杭研开源分布式存储CurveBS的MySQL云原生数据库系统,已在网易内部业务小范围使用,该系统在数据库层进行Redo日志拆分和IO对齐合并等优化,在存储网络上引入RDMA等先进技术,目前事务提交性能紧追业界领先水平。团队成员积极参与数据库和大数据领域的开源社区建设,在Impala、MySQL和Alluxio开源项目均贡献了大量代码,修复了大量Bug,获得了项目官方的认可。
基于工作以来的各种经历,他觉得有这样一些心得可以和学弟学妹们分享:一是要敢于挑战新领域,并用知识体系的构建支撑新领域的每一步。他从一个数据库小白成长到能够独立负责数据库内核,最大的底气就是技术上的成长。当时他告别Linux内核存储的岗位,到来网易杭研做数据库内核开发,很快意识到想做好数据库光有存储背景是远远不够的,数据库在存储之上建造的知识体系才是最核心的。正是一步一步扎扎实实构架知识体系、踏踏实实做事情,才有他从小白到专家的华丽转型。二是要向身边优秀的人学习。温正湖表示,自己的快速进步,除了自己努力外,还得益于他的几任主管和身边的同事。网易有比较自由,开放的工作氛围,每个同事能充分展现自己的工作风格,发挥自己的技术特长。他所在的团队,牛人辈出,有Oracle MySQL ACE,有多个开源项目的Committer/PMC,有些同事目前已经成为某些互联网巨头数据库领域的负责人。在这样的团队中,温正湖有很强的动力去自我提升,通过观察对比,能够取其所长,学习他们的工作方法,获取足够的养分来进一步提高自己。三是要善于平衡工作与生活。温正湖表示,项目紧张的时候,当然是以工作为重点。比如开发数据库云服务时,有定期的版本发布上线计划,上线前几天最忙碌,有时为了赶进度,996也是正常了。而且为了尽可能降低对业务的影响,都选择凌晨上线,工作强度较高是显而易见的。温正湖一般会在工作进入繁忙状态前提高跟家里沟通,之后就可以心无旁骛得做好工作。当然,工作也并非一直忙碌,在相对空闲的时候,他会早点下班回家,周末也会多陪陪家人。