创业故事:创始人1年完成8万行内核代码核心功能!
问题1:赵老师,您好!很荣幸有机会采访您,先简单介绍一下您自己?
您好,各位读者大家好,谢谢DTCC(ITPUB社区)给我这个机会,让更多同行知道我和我们的公司泽拓科技以及我们的产品昆仑分布式数据库。我一直在数据库管理系统(DBMS)设计和研发这个领域,之前主要在Oracle,TeraData和腾讯等公司工作,分别从事Berkeley DB,MySQL,PostgreSQL和TDSQL数据库的设计和研发。
我的职业生涯起始于2007年的Oracle Berkeley DB全球研发团队。Berkeley DB当时是MySQL的个支持事务的存储引擎,即使是现在的MySQL 的事务处理和handler接口的代码中仍然可以看到Berkeley DB的影子。我初在Berkeley DB团队协助Berkeley DB的创始开发者Keith Bostic先生做一些简单的开发工作,在他的帮助和指导之下我也学到了很多很多数据库系统的知识和技能,用现在的流行语说是“底层逻辑”,从而后来可以逐步做一些更高难度的开发工作。所以我要感谢Keith Bostic, Michael Cahill, Mo Shen等同事对我的帮助和指导,他们带我入门了数据库系统内核设计和研发的殿堂。
2010年中我加入了Teradata,我所在的小组负责基于PostgreSQL开发一个高性能的事务存储引擎,我是小组的核心开发者之一,完成了诸多核心功能的开发,供Jupiter项目使用。这个项目由一位华人高管Jason Chen牵头,产品设计和技术由Teradata当时的首席数据库科学家负责,其构思非常的类似于后来火起来的HTAP概念。
我在2013年重新回到Oracle,加入MySQL Optimizer团队,从事MySQL查询优化的功能开发。我负责重构MySQL的GIS查询处理,利用InnoDB当时新增的rtree索引实现空间查询优化,并且基于Boost.Geometry重新实现了MySQL的空间查询功能。这些工作实现了MySQL的空间数据管理能力的飞跃,在空间查询的精度和性能方面取得领先。在此我要感谢Manyi Lu,Norvald,Roy,Oystein,Tor等MySQL同事对我的帮助和支持。
在2015年底我加入了腾讯,从事TDSQL的开发。我加入时TDSQL1.的工作已经完成,具备了强同步和扩容等功能,不过当时的TDSQL1.还只是一个分库分表系统,因为它当时还不具备分布式事务处理和分布式查询处理功能。
我在2016年开始牵头设计和开发了TDSQL的分布式事务处理功能,基于经典的两阶段提交(2PC)算法实现了TDSQL的分布式事务处理功能。在这个过程中解决了MySQL的一系列XA事务(分布式事务的分支)的容灾问题,这样TDSQL的分布式事务处理就具备了坚不可摧的容错能力。在此期间还指导我的同事实现了TDSQL的初步的分布式查询处理功能,这样TDSQL就演变为一个分布式数据库系统了,也就是TDSQL2.0。
直到今天, TDSQL2.0仍然支撑着腾讯公司内部大量业务,并且在腾讯公有云服务和私有云产品中有大量外部用户,包括众多头部银行客户。
当时觉得分布式数据库是一个充满机遇的领域,而且业界的产品还存在各种不足,因而一个更好的产品和服务是有很多潜在用户的,特别是DBaaS云服务有巨大的增长空间。
在需求端,人类生活深度的数字化还只是开了个头,所以未来各行业的数据管理需求还会持续增加;且2019年,美国对中国在技术层面持续施压,我预测Oracle数据库也会在未来某个时间段使用范围受限。后来的信创和新基建证明这个预测是基本准确的。
在产品端,基于MySQL的分布式数据库当时只有TDSQL一家,但是TDSQL在技术层面由于基于中间件迭代而来,在查询处理方面有一些硬伤。
基于MySQL做存储节点的分布式数据库具备天然的优势:基于成熟的MySQL作为存储节点,产品质量更加有保障;借力MySQL生态,有大量现成的人力资源(DBA和应用开发者,培训机构和讲师),互联网上也有大量开放的技术资源,包括文档,经验,方案,第三方工具等等。因而用户迁移业务到这样的分布式数据库的心理负担会小化。这是其他分布式数据库(比如TiDB,CockRoachDB,OceanBase等)所不具备的。
另外就是云计算大大简化了后端产品的交付工作量,因为用户只要购买DBaaS服务即可,完全省去了安装部署升级维护等日常工作,甚至大大降低了DBA的工作量。DBaaS在国内即使今天也只是刚开始,在用户的观念层面还在逐渐接受的阶段。我当时估计云服务和云平台未来一定会分开来,现在已经有此趋势,比如MongoDB,Redis,Spark,Kafka,Snowflake等明星产品都是各自背后的开发团队(公司)在各大公有云上面提供云服务的。这种趋势未来还会继续发展,公有云平台将会发展成为Mall,各个产品就是Mall里面开的店面。现在国内公有云平台主要是百货商场模式,我认为这样的业务模式的人效较低,云平台团队需要做的产品研发和服务的种类过多,复杂性较高,对估值不利,因而将会进一步调整。
我在腾讯负责主导TDSQL2.分布式数据库的设计和开发,主要是分布式事务处理和分布式查询处理等核心功能集合。
我的创业经历挺特别的,2019年刚离开腾讯时,我一个人开始了昆仑数据库这个项目。我经过了1个月的思考和选型,确定了昆仑数据库的产品定位,系统架构。接下来的一年多时间中,我完成了昆仑数据库的基础的核心功能设计,并且昆仑数据库的前8万行内核代码都是我一个人写的 --- 昆仑数据库的基本的核心功能,包括数据增删改查,节点通信,分布式事务处理,分布式DDL执行和复制,分布式查询处理等等。那段时间充满了成就感,像是在一大块荒无人烟的土地上面规划,然后开拓探索,充满乐趣和挑战性,也非常辛苦。
后来陆续有几位以前的同事和朋友加入,大家一起工作,更快也更有趣了。大家在我初的工作的基础之上,做了大量扩展、改进和增强,也增加了更多新功能、新模块和组件,使得产品更加完善和健壮,功能更加全面,性能更高。在这个工作的过程中,我们充分的讨论和沟通,结合各自过往的工作经验和教训,对技术路线、方法做出取舍和决策,所有人都收获了更多技术、经验、和认知。看着团队一天天壮大,我非常高兴。打造一个高效协作的团队,是创业公司在打造一个产品和服务之外的另一件‘产品’,我现在会花更多时间在打造这件艺术品上面,帮助团队每个人成长,提高团队协作效率。 同时还要观察行业发展动向,在全局层面把握公司发展的方向。
我们那届应届生拿到Oracle的offer时,都有机会选择团队,我当时选择了Berkeley DB这个团队。我当时考虑的是数据是IT系统和IT产业的核心,各种IT技术都是围绕数据展开的,包括数据存储管理(数据库,文件系统),数据分析利用,数据处理(应用系统的后端技术,数据中台等),数据传输(各种网络技术),数据展示(CG,互联网前端)等等。因此,数据库系统是数据存储管理利用的核心技术之一,在IT产业中具有极高的价值。同时,我一直对后端技术(包括操作系统,数据库,网络等)有很大的兴趣,觉得里面的技术问题充满了挑战性和乐趣。后台服务器软件系统的挑战性和魅力在于:它要具备的稳定性、可靠性和性能,以及可维护性、可观察性和安全性,对各行各业的生产实践具备极其关键的作用。这一系列技术目标组合起来全部实现,在工程层面构成了的挑战。设计和实现服务器软件系统,需要全盘综合考虑业务和通用技术各方面的需求,才能实现出的产品。
特别是对于数据库系统来说,它又是后台服务器系统中理论基础和要求高的,其理论和技术基础包括关系代数、SQL查询解析和优化,事务处理,高可用和容错、网络通信等一系列基础的计算机理论和技术,可以说是计算机科学和工程技术领域的少数顶峰之一,具有无与伦比的魅力,具有极高的使用价值,对人类各行各业信息技术应用具有极其重要的作用和影响力,所以我特别希望为这座高峰增添几块石头,把它垒的更高,雕刻的更加雄伟壮阔。所以,就选择了数据库系统这个方向,加入了Berkeley DB团队,在数据库系统的设计和研发这条道路上走到现在。
从需求层面说,传统行业包括金融行业等有切实的分布式数据库的使用需求,这些需求来自:
1. 存储管理的热数据的规模(TB级别)很大而且持续增长;
2. 需要承载的实时访问负载(面向终端消费者的场景,数千个数据库连接,数十万QPS甚至更多)较高,波动范围较大(促销活动,以及其他用户活动随时间的自然波动等)。
所以一些传统行业已经在积极使用分布式数据库了。
由于政策法规的要求,以及业务和数据的极端重要性,银行等金融机构对于采用新的数据库管理系统(DBMS)产品是相当谨慎的,这完全可以理解。所以金融行业基本都是从外围业务以及服务开始,逐步采用分布式数据库产品。
什么时候可以进入银行的核心交易系统?估计还要5到10年的时间。这依赖于一系列核心技术的出现和应用,包括高性能的非x86 CPU(arm系列CPU在性能方面目前来说还无法完全替代x86),也包括分布式数据库产品在可靠性、性能、安全性等方面的进一步成熟和完善,以及相关生态(人员、技术资源)的进一步普及和发展。
理论上完美的一致性,就是一个一个地依次执行事务,也就是所谓‘线性一致性’。但是这种方法在实际中没有任何价值。工程领域任何实用的技术都是为了在满足既定的正确性模型的基础之上,达到高的性能。甚至这个模型需要依照不同的问题而定义和供用户选择,这也就是为什么数据库理论中有3种常用的事务隔离级别(以及1种不实用的隔离级别,即dirty read)。为了在理论层面追求完美的一致性而失去性能和实用性的话,就只是理论家的思维玩具了。
数据库理论对于事务的数据一致性的定义(即ACID)非常成熟可靠,几十年的应用实践证明了其实用性和可靠性之间的完美平衡。这些理论对分布式数据库也完全适用,因为数据库事务处理的理论模型中并没有假定数据存储的策略,可以集中存储也可以分开存储。
确保分布式事务数据一致性的手段和技术,在30年前就有国外学者研究通透了,也就是两阶段提交等算法即two phase commit, 2PC,这些算法在过去30年里国外知名产品中都有广泛应用。尽管经典的2PC算法的容错能力仍有漏洞。而容错能力是昆仑数据库的强项,我们对2PC做了一系列增强,得到了生产实践的验证。
在用户层面,数据库系统的性能、一致性的平衡和取舍是可以也需要动态调整的,这通常依赖于场景和需求。所以,在昆仑数据库中我们给用户充分的调整空间,让用户在性能和一致性之间取得对他们适当的平衡。
数据安全方面,目前业界的一些产品确实还有较大的进步的空间,而昆仑数据库在数据安全方面具有巨大的优势,例如我们支持多层级多粒度(库,schema,表,列,行,视图)的访问控制,以及全流程的加密数据传输,数据文件和日志文件的加密存储等,防止SQL注入的运行时安全技术(即prepared statement)等等,确保数据全生命周期的安全性。
我总体看好未来国产数据库的发展。不过我希望给国内的同行们一些粗浅的建议:我认为国内的基础软件厂商要着眼于全球,面向全球用户。中国市场虽然非常巨大,并且国家对国产数据库等基础软件厂商有不少鼓励政策,但是大家也不要忽略了中国以外的市场。这个开拓的过程肯定会更难,国外的竞争也会更加激烈,不过从长远发展来看是很值得的。
在思考昆仑数据库的天,我们就着眼于全球用户了。比如在产品层面,目前昆仑数据库所有的源代码中代码注释和运行日志输出都是英文的,同时昆仑数据库支持用户做所有标准的国际化(internationalization, i18n)和本地化(localization, l10n)配置。在研发流程方面,我们的任务管理系统中几乎所有的bug报告和功能设计文档都是用英文写的,并且我们也写了很多英文用户文档。
总的来说,我们的产品设计和开发过程中有完整的国际化思考,这么做就是想让全球用户都能看懂,方便全球用户使用昆仑数据库。
我们的底层逻辑是:计算机技术本来就没有国界限制,所以要大化适用人群,也就是全球化。“国产”的思维有很大的局限性,如果总想着国家的帮扶,就会像温室里的花朵,不会长的强壮,自己的路还是要靠自己走。华为是我们所有中国企业‘走出去’的榜样。
DBA不会被人工智能取代,也不会被云计算取代。换句话说,目前为止,机器、技术和工具无法取代人类。因为把这些技术和产品有效地运用起来,还是需要通过有效训练和学习的人来实现。所有自动化的产品都是对人类已有知识和经验的封装和固化,却无法处理未知情况。即使机器学习也是基于已有的框架和模型在学习(也就是调整参数而已),无法自动建立新的框架和模型。人类到目前为止还没有突破人类大脑的认知能力,来建立与之匹配或者接近的新技术、新产品,来取代人类的认知能力和创造力,因而人工智能无法在需要创造力(也就是从到1)的领域取代人类。
以飞行员为例,现代的主流客机都具备自动起飞、巡航驾驶和自动降落的技术,但是为什么仍然需要飞行员驾驶呢?因为人写的飞机自动驾驶软件只能基于已有的航空、空气动力学、机械、电子电气知识,处理可以预知和遇到过的情况,但是无法处理意外情况。比如《中国机长》里面讲述的2018年5月14日四川航空3U8633航班英雄机组成功处置万米高空风挡破裂的事件,机长刘传健完成了一系列高难度驾驶动作,成功挽救了机上所有人员。这样的超高难度处置措施,是飞机的自动驾驶软件完全无法处理的。
未来的DBA就像是飞行员一样,其核心价值和需求是要能够处理紧急情况,特殊情况和例外情况,而不是执行常规操作,因为常规操作是完全可以自动化和程序化的。在昆仑数据库中,我们根据过去在各大厂的分布式数据库开发和应用经验,自动化了所有常规数据管理操作,大化地降低了DBA的日常繁碎劳动,让他们聚焦真正高价值高难度的工作。
昆仑数据库未来会持续开源并且维护社区版本分支。开源对于我们来说是有益的,我们希望达到的理想情况是昆仑数据库的客户大量来自开源社区升级为企业版本用户,也就是Product Lead Growth, PLG。这方面我们目前做的不仅有开放源代码到github和gitee,还包括开放我们的bug系统和每天的自动化测试结果,方便大家近距离关注我们的研发过程,关注我们已经解决、正在解决和将要解决的问题。
未来我们还会增加更多的文档、教程、培训,目前在我们官网的文档和博客里面已经有很多文档和用法说明,在下载页面有很多ppt和pdf文档。我们还会持续增加内容输出,争取用户可以通过阅读这些技术资料,靠自己就把昆仑数据库使用起来(self service)。
在人类生活持续数字化的今天和未来,DBA是数据库系统的船长。每个公司的数据库系统这艘大船或者舰队里面,都装着这个公司有价值的信息,都支撑着这个公司的各种业务的运行,是这个公司的命脉所在。因而这个船长的责任非常重大,DBA的工作也就有非常高的价值。希望大家多学习数据库系统的知识和技能,并且结合实际工作观察和理解数据库系统的工作机制和原理。不要满足于和止步于系统日常不出错就好,否则一旦遇到关键情况就扛不住了,那样就不是一个称职的船长了。祝大家成功!
相关文章