GaussDB架构师老朱:一朝“入坑”数据库,从此踏上“不归路”
前言:GaussDB T(OLTP)数据库是怎么炼成的?在国内大环境下,从0到1研发一个数据库是一种怎样的体验?此前,笔者写过一篇《华为“高斯”战记》,有过简单介绍,而本篇则是续篇,将会解密更多GaussDB T研发不为人知的故事。
朱仲楚,华为GaussDB T首席架构师,人称“老朱”,为人低调,相比架构师的Title,老朱更喜欢以”码农”自居,即使身居管理岗,却依然保持每年1-2万行代码的输出。2007年,就是这位”码农”,为GaussDB T敲下了第一行代码。
“入坑”数据库,是老朱人生中的一个转折点,摆在自己面前的,是一条不归路,这点老朱心里其实很清楚。但却毅然选择踏上了这条不归路,不害怕,不后悔,勇往直前。
在这条充满荆棘的路上,老朱和团队踩坑无数,跌的遍体鳞伤,但更让老朱和兄弟们迷茫、彷徨的,是外界大量的质疑、批评甚至谩骂,但最终,老朱还是从黑暗、颓废中走了出来,重拾对未来的信心和希望,也才有了今天的GaussDB T。
研发数据库难点不在技术,而是质疑
“世界本没有数据库,只是因为要做数据管理,才提炼出一套方法,也就才有了数据库的诞生“,每当有非技术人士问起,什么是数据库时?老朱习惯用这样的描述去回答。
数据库在计算机领域是个古老的技术,在系统中的地位就好比汽车的发动机,是整个系统中关键部件之一,其研发难度之高,丝毫不在操作系统、芯片之下。
搞数据库难,自研数据库更难,不仅需要面对技术、人才、资金、市场方面的挑战,更难的是要承受各种质疑、批评甚至谩骂,选择这个领域,就意味着要付出更多的耕耘。
“对我来说,工作中最大的压力不在于技术本身,而是外界的质疑与批评声。有人质疑你,根本不可能做出来,有人认为你,是无知者无畏,还有人质疑你,做的东西不先进,很落后等等,质疑太多了。”老朱有些感慨,太难了!所有质疑者,都会拿着同一标尺(OLTP数据库领域最高标准Oracle)来卡国产自研数据库。
事实上,Oracle也并非一蹴而就,而是历经几十年的打磨和迭代才达到现在的水平,“但没有人给华为,给我几十年的时间去打磨GaussDB ,去做客户体量,因此,压力非常大。”老朱有些无奈的说。
一朝入坑数据库,从此踏上不归路
1998年,老朱从西北工业大学毕业,学的是应用数学专业。毕业后,先在航空工业总公司某研究所工作过一段时间。1999年,老朱南下深圳,在深圳的第一家公司呆了不到一年,但老朱与数据库第一次亲密接触,就发生在这家企业。2000年,入职华为,老朱从此就再也没有换过单位了,并一呆就是十九年。
初到华为,老朱所属部门是电信增值业务,即呼叫中心类业务,与数据库打交道变得更多了。很快,老朱就崭露头角,并且变得小有名气,那是源于一次厦门出差。
客户呈现的问题是业务结算耗时很长,甚至结算不了,客户急了,因为,业务每晚都要做结算,无法结算,意味着问题很严重。
客户业务跑在SQL Server数据库上,结合现场勘察及客户描述,老朱琢磨,这个症状似乎有点似曾相识,细细回忆,突然灵光一闪,老朱想到,SQL Server读写之间有库锁,事务没提交不能读,而读的时候,如果共享锁没读完,是不能写的。
有了线索,那问题就很好解决了,老朱先是给客户出了个主意,改成AB表,结算A表写B表,通过这个简单办法,同时,再做了几个SQL优化,困扰客户的问题就被轻易的解决了。
正是这趟出差归来,部门就开始让老朱去搞数据库了。也就是从这时候开始,用老朱自己的话说,走上了一条“不归路”。
敲下了GaussDB T的第一行代码
2000年时的华为,正处于迅速扩张,到处开局阶段,也就是在开局过程中,不断碰到问题解决问题,让老朱对数据库也有了更深的了解,数据库知识因此迅速积累。这个阶段,老朱没少与Oracle、Sybase、SQL Server等各种商业数据库打交道。
虽然,这时的老朱已经俨然成为他人眼中的数据库专家,但老朱对自己却有着清醒的认知,“不是数据库水平有多高,只不过脑子活,点子多而已“,老朱说。
遇到的问题越多,就越让老朱越意识到自己的不足,并开始了有意识的充电之路。众所周知,华为考核很严格,工作很饱和,并没有太多时间专门去学习。因此,数据库知识的积累,老朱更多的是靠看厂商资料,去了解怎么使用怎么开发。要知道,在2000年,中国互联网还处于萌芽期,可访问的网站都很少,网上关于数据库的资料就更少了。
在这段艰难困苦的岁月,老朱的快速成长得益于2种高效学习的方法,其一是读书,第二种是与人交流。老朱认为,多与人交流是学习数据库知识非常重要的方法。因为,碰到的问题多是技术资料上没有的,要解决特定场景的问题,就需要一些有经验人的点拨,也许仅仅一句话,就能让自己灵感闪现。
2003年,部门将数据库开发、维护工作全部交给了老朱负责,这阶段,老朱其实有点傻傻的分不清,自己到底是DBA还是研发,因为,从架构设计,编码到调优等等,老朱几乎都有参与。
2005年-2006年,老朱开始写数据访问中间件。
2007年下半年,老朱参与到华为自研内存数据库GMDB项目,并写下了个人第一行关系型数据库代码。
华为数据库研发的3个阶段
前面提到的GMDB是什么?又是怎么来的?可能很多人都不清楚,因此,必须要提下华为做数据库的初衷,以及华为数据库研发史上的3个阶段:内部自用、产品化&联合创新、产业化
第一个阶段,在华为数据库研发史上称之为内部自用阶段,时间从2001年持续到2010年。
在内部自用阶段,华为分别研发了电信设备嵌入式数据库DopraDB,电信计费软件内存数据库GMDB,电信设备磁盘数据库ProtonDB。
这个阶段,华为做数据库的初衷,很明确,就是为了电信主航道业务服务。
其中,GMDB是2007年,为解决预付费业务的在线计费对性能的严苛要求,开始构筑高并发、低时延的内存数据库。此后,GMDB的定位不再局限于内存数据库,而是向通用关系型数据库逐渐转变,重构过程中,开始融入大量非内存数据库的特性,这就是Gauss T数据库的前身。
而GMDB向通用关系型数据库转变和三次内核重构,就是由老朱及所带领的团队完成的。
此后,华为做数据库目的又出现变化,也就是众所周知的“备胎”计划,成立2012实验室,该阶段主要是为了解决美国不供货,华为还能不能生存下去的问题。
这个阶段在华为数据库研发史上属于第二阶段,即产品化与联合创新阶段,时间从2010持续到2018年。
此前,甚至包括不少华为内部人士对待“备胎”计划都并没有太当回事,但现在回过头再看,不得不说华为高层有前瞻眼光。“华为要喝牛奶,其实没必要养奶牛,买牛奶喝就可以,但如果别人不卖你牛奶怎么办?华为高层就从这个角度看问题。”老朱说。
在产品化与联合创新阶段,华为分别研发了GaussDB T(OLTP)和GaussDB A(OLAP)。如今GaussDB T在华为解决方案应用发货量30000+,GaussDB T自研分布式内核在招商银行核心业务上线。GaussDB内存库已经服务全球10+亿用户,5年零事故。
到了2019年,华为做数据库的目的再次发生变化,而这次,华为是真的看到了数据库市场的广大需求,数据库不再只是做“备胎”,来保障自身业务的连续性。而是要作为玩家,真正参与到数据库市场竞争浪潮中去。
这个阶段,华为正式面向全球发布了GaussDB,开始大力度向外推广,并宣布GaussDB进入产业化阶段,开始在产业、技术、人才、社区等方面发力构筑生态。
三次重构,GaussDB T炼成记
“只有自研过数据库的人,才会有真正的敬畏之心,才会越佩服商业标杆数据库,因为它们的成功并非没有道理,考虑的非常全面,做的太细致了”,老朱说。
虽然,老朱是DBA出身,又擅长写代码,拥有丰富的数据库架构设计、开发、调优经验,但到了真正开发一个数据库的时候,其实远没有预想的那么简单,这导致很多困难,最初都被低估了。比如代码质量控制、MVCC控制等等,老朱说,那时候真是无知无畏。
从2010年开始,老朱全面接手整个华为数据库技术行业管理工作,基于2007年的GMDB版本,老朱决定重构内核,将逻辑日志改成物理日志,调整持久化机制(主要是乒乓checkpoint改成增量checkpoint),事务锁管理机制。
老朱有自己的一套办法,这些年,作为最终用户,老朱可以说是阅尽各种数据库,结合每个数据库的优点,只要不涉及基因方面的影响,好的都吸收进来,除了将逻辑日志改成物理日志外,也引入了不少概念,比如原子操作。此后,MySQL也有类似的概念,但不完全一样。
而这次重构的首要任务,是把内核打造成不死小强。老朱说,其它地方可以差点,但这方面一定不能有任何问题。这源自老朱一次次处理海外局点数据库损坏的惨痛经历。华为是国内少有面向全球业务的公司,客户遍及全球。在战乱、基础设施较差的国家,经常会遇到电力不稳定,甚至机房被炮击、电源中断等情况,因此,怎样让数据库在极端情况下还重新起来是重中之重。正是基于这方面的重视,让GaussDB内存库创造了5年零故障的记录。
2011年,由另一个兄弟陈志标带队,老朱参与第二重构,增加disk base的引擎,索引算法由T TREE改成B TREE,因为,T TREE算法只适合于内存库。这次重构过程中,熬通宵成为家常便饭。
2016年,老朱再次主导,进行了第三次内核重构,对事务及MVCC机制优化,以及heap table的剩余空间管理机制调整,增加了基于快照的事务隔离处理,为支持share disk架构打下基础。事实上,第三次重构的基于时间戳快照的事务隔离机制同样适用于sharding方式的分布式架构,使得全局事务版本的获取非常轻量。
第三次重构,遇到的问题依旧很多,如MVCC控制开发过程中就困难重重:数十个并发事务插入、删除或更新,一般情况下没有什么问题,但如果引入行链接、行迁移,就会发现许多地方需要加强保护,很多东西就变得不一样,很多锁的Latch处理,都涉及非常大的调整。当时,对这事,老朱还是有点怵,花了很多心血。
那段时间,对老朱来说,做演算提炼成数学公式成常态,有时候,睡个觉做梦可能就把问题给解决了,因此,老朱经常凌晨两三点爬起来做记录,因为怕第二天给忘了。这种情况持续了足有半个月,这导致那段时间,老朱经常被媳妇骂“神经病”。
老朱说,当年几个做内核的兄弟都有类似的情况,如今都已经成长起来了。
黄沙淘尽始到金,从写下第一行代码开始,历经12年打磨,3次内核重构,才有了今天GaussDB T的成功商用,这其中凝聚了以老朱为代表的数百名开发人员的心血。
真金不怕火炼,GaussDB T如今已经在多家银行核心业务上线,例如招商银行,不仅在关键的故障恢复指标上性能领先,AZ内RTO<10s,满足金融场景下数据库高可用诉求,并且目前该系统稳定运行超过500天。
2019年9月,GaussDB T数据库更是率先通过中金国盛金融行业标准符合性试点测评,82个检测项全部为“符合”。这标志着华为GaussDB数据库的功能性、安全性、稳定性等方面都符合金融规范要求,并在银行批量结息业务以及银行信用卡代授权业务等场景中实现性能领先。
近日,经中国信息通信研究院检测,基于鲲鹏处理器、EulorOS操作系统的华为GaussDB T数据库 100%全部通过分布式事务型数据库基础能力测评认证,50个检测项全部为“符合”。测试主要覆盖了基本功能、兼容能力、管理能力、高可用要求、扩展性要求、安全性要求六大类项目。这是继2019年9月中金国盛金融行业标准符合性试点测评之后,华为GaussDB数据库又一次硬实力体现。
写在最后
据悉,目前华为每年在数据库研发上的投入是每年对外数据库采购金额的2倍以上,这凸显了华为做数据库的决心。
但老朱一直强调,GaussDB T要成为一个好的数据库产品,还有很长的路要走,还有很多需要向商业数据库标杆学习和追赶的地方。
老朱是GaussDB T的首席架构师,但也是GaussDB数百位工程师中的一员。从以老朱为代表的这些工程师身上,我看到的是一种对技术的精益求精和偏执。正是这种“轴”,让这群工程师们不断突破与创新,才有了老朱19年的坚持与坚守,也让GaussDB和世界级数据库的距离越来越近。
转自墨天轮
- 点赞
- 收藏
- 关注作者
评论(0)