自 2020 年以来,在数字化、国产化浪潮叠加下,中国信创产业得以高速发展,从基础硬件到基础软件、应用软件再到信息安全层面均涌现出一批领先的项目和厂商。
聚焦到基础软件层面,以 IoTDB 为代表的国产时序数据库正为工业、制造业等国家支柱行业的数字化转型、国产化替代筑基。
作为一款从“0”到“1”自主研发的国产时序数据库,IoTDB 刚刚走过自己的第 12 个年头,原厂团队也已成立商业化公司天谋科技,围绕 IoTDB 落地应用持续发力。从能用到好用、管用,以 IoTDB 为代表的国产基础软件正在快速崛起。
而这背后,是一位又一位软件工程师用一行行代码敲出的青春。新春伊始,我们留意到一篇围绕“IoTDB”、“成长”的 2023 年终总结在知乎平台得到热议。
这份总结来源于一位名叫“谭新宇”的清华校友,一位从学生时期就深度参与 IoTDB 研发,如今在天谋科技负责 IoTDB 内核开发的软件工程师。
于谭新宇而言,2023 年有着独特的意义。在这一年,谭新宇完成了从学生、开源社区贡献者到领导团队的软件工程师的身份转换,并亲历了 IoTDB 从技术原型到体系化产品的演变。
近日,我们有幸与谭新宇进行了一次深度访谈。在这次访谈中,谭新宇与我们分享了这份年终总结背后的思考,以及一路走来,自己与 IoTDB、天谋科技一同成长的所思所感。
下为谭新宇自述:
01 温暖的团队和学以致用的成就感
2016 年,高考完填清华大学志愿的我并不知道自己的专业兴趣是什么,也并不知道不同的专业有什么区别,于是随便报了个机械大类便入学了。
大一下的时候,我接触到编程课,对编程印象还不错,所以便萌生了转专业的想法,最终也顺利地平转到了对编程萌新相对友好的清华大学软件学院。
一开始的时候,课程压力是非常大的,但是好在有很多大佬同学们和辅导员们帮助我,经过不断地摸爬滚打,我才逐渐走上了轨道,进而走到了研究生阶段。
当时,我几乎打听了清华大学软件学院的所有实验室,在过滤掉不感兴趣的搞前后端和 AI 的实验室后,此刻面临着两个选择:一个是散养的实验室,去了之后可以在企业自由的实习三年;一个是学院里在做的时序数据库 Apache IoTDB(当时还是孵化器项目),实验室的工作也是比较忙的。
最终经过深思熟虑,我还是希望掌握更多的实质技能,所以选择来到了 Apache IoTDB 实验室。原因在于,我的主业还是学生,相比在外实习,在 Apache IoTDB 实验室我可能得到更多的锻炼,这就意味着我硕士期间能够拥有三年的数据库内核开发经验。同时我自身对分布式系统感兴趣,在这可能得到更多的尝试机会。
进组后,我给自己的目标是利用研究生的三年时间提升自己的理论知识水平和工程能力,因此我一进去就开始了解开源,学习数据库知识,并加入了分布式模块进行实践,做了不到一年时间,2020 年底时我便被社区接纳为了 committer。
2021 年 8 月,经过一年多的开发,我们也终于迎来了 IoTDB 老分布式版本的第一个线上用户,并在之后的若干用户场景中与竞品进行了多次对比。在这个过程中,我们发现这个版本的分布式架构由于前期设计和开发人力的投入太少,所以存在一些难以解决的扩展性和效率问题。
于是在 2022 年,我们吸取教训,结合整个社区的力量,集思广益又重新设计了分布式模块,最终在 2022 年 12 月发布了新的分布式 1.0 版本。
如果说当时选择 IoTDB,是因为我能够在自己感兴趣的方向学到切实的技能,那么能够不断坚持到毕业、到现在,除了新颖的研发方向,一定还离不开温暖的团队和学以致用的成就感。
其实在最开始接触 IoTDB 的时候,我做的大多都是一些维护性重构性的工作,直到 2021 年后半年我才开始认真研究时序数据库并逐渐意识到了它的挑战。
我记得当时我和小伙伴调研了若干个国产时序数据库的分布式架构并进行了多次分享,从中发现了许多优点和大家依然没有解决的痛点。让我印象深刻的是,这些调研成果并没有流于纸面上的总结,而是被当时的 IoTDB 社区开放地接纳并重视起来,并对这些优点和痛点的解决方案进行了大量的讨论和分析。
这期间东哥、乔老师、田原学长、金瑞学长、江天学长、荣钊学弟、洪胤学弟等社区的很多参与者也都结合一些论文和自己的思考提出了不少很有特点的想法,这些想法最终奠定了我们重构 IoTDB 分布式架构,进而实现高并发、高可用性能突破的基础。
这个过程让我非常信任和认可这个积极思考、认真实践的团队,并且对自己在 IoTDB 这个项目可以获得长足的成长富有信心。
IoTDB 社区一直充满着活跃、积极的氛围,社区的参与者不断扩大、不断多元化,有东方国信、阿里、云智慧、360、用友、华为、中冶赛迪等多家公司的开发者,和来自清华大学、北京大学、北京航空航天大学、西北工业大学、复旦大学、南京大学、厦门大学、威斯康星大学、新加坡国立大学等国内外多个高校的学生。看着越来越多的贡献者参与到 IoTDB 的开发中来,也变成了我最开心的事情。
在 IoTDB 社区,我们不仅锻炼了个人能力,也认识了很多很厉害、很友善的新朋友,进而继续热情地投入到 IoTDB 的研发演进工作上去。
同时,看到学生时期的我参与的技术成果,能够被用户实际运用到他们的生产实践中去,我觉得很有成就感,这也是让我坚持下去的重要动力。
比如当时 IoTDB 老分布式版本的第一个线上用户,针对用户 20TB/天的入库流量,我们用 3 节点的分布式 IoTDB 集群替代了 20 节点的 HBase 集群。经过初步统计,预约未来 5 年能为企业节省上百万的硬件成本。
尽管在上线前的内测期间,我们遇到了不少问题,但我们顶住了压力并都进行了修复,最终也顺利上线。通过这次经历,我不仅进一步认可了自己在做的工作,也理解了能为用户创造实际价值才是项目存亡的关键。
02 让用户用更低的成本,挖掘更高的时序数据价值
2022 年,我手上的秋招 offer 陆续开奖,这期间我心理也发生了很复杂的变化。其实选择哪条路都不会太差,我觉得主要还是需要剖析自己更喜欢怎样的工作方式,并且说服自己一旦做出选择后就不再患得患失。
认真思考以后,我认为个人兴趣方向的能力成长,和在一起工作的团队是否高效是我最看重的,这也是我最终选择了 IoTDB 的商业化公司天谋科技的原因。
当时,IoTDB 分布式版本已经到了发布前的最后阶段,我最主要的工作是在和学长、学弟们一起实现通用共识框架。
这期间,我们一方面抽象了对上对下的通用接口,另一方面支持了强一致性和弱一致性的共识算法,并结合时序场景写写冲突极少的业务特点,设计并实现了基于异步复制思路的弱一致性共识算法——IoTConsensus,进而在内存控制、可观测性等方面都实现了提升。
所以在我看来,这个架构未来还有太多可以做的工作,我非常希望能够继续参与到 IoTDB 共识框架的功能,性能,稳定性和正确性成熟的过程中来,希望这种共识框架可以成为大家未来使用通用共识框架的范式。
此外,当时刚在 PingCAP 实习完的我深刻意识到了可观测性对于一款商业数据库去构建可扩展的工程服务体系和可持续的架构演进体系的重要性。那么进入天谋科技,就与我在自己感兴趣的分布式系统和可观测性方向继续发力,继续推进已有的 IoTDB 技术成果发展,这种成长的需求相吻合了。
还有,经过以清华大学学生身份进入实验室,以社区贡献者身份深度参与到 IoTDB 的技术内核研发这一系列的过程,我已经特别认可和喜欢 IoTDB 这个有创造力又温暖的研发团队了。
我想到了最开始调研时序数据库的优点与痛点时,那么多社区小伙伴参与进来,大家集思广益,力争做一个最好用、最管用的时序数据库产品,想到研发 IoTConsensus 时,我和乔老师、恺丰、海铭、金瑞、洪胤、厚亮和珍姐都参与了 IoTConsensus 的设计实现与迭代测试,虽然实现和 debug 的过程非常艰苦,但是大家可以说是既痛苦又有收获,最后实现的性能成果也让大家觉得所有克服的困难都值得。
而这个团队成立的天谋科技,现在将致力于把我们的研发成果推进到行业应用中,让工业领域的更多用户们用上 IoTDB,这也让我想起了第一个分布式用户让我感觉到的“为用户创造实际价值”的满足感。
所以,我还是希望能和这些厉害、靠谱的朋友们一起继续努力,通过不断地调研、脑暴、突破,让 IoTDB 真正的创造市场价值,让用户用更低的成本挖掘更高的时序数据价值。
此外王老师、东哥、乔老师都对我的就业方向和未来发展路径给予了中肯的建议,最终我选择了进入天谋科技继续做 IoTDB。
到现在,我还是非常感谢研究生期间 IoTDB 这个大平台对我的帮助,也很高兴自己做出了这样的选择。和用户真正的需求靠得更近,和 IoTDB 一起成长,这大概就是我认为选择天谋科技的价值。
03 2023,收获满满
2023 年,我所在的天谋科技 IoTDB 系统组的主要工作,分为高扩展性、高可用性、可观测性几部分。
过去一年,我们系统组在 IoTDB 的计算负载均衡、分片分配算法、企业版激活、强弱一致性共识协议、共识层、监控面板、监控模块和日志精简等方向,都实现了成果突破,帮助 IoTDB 实现了存储和计算资源的双均衡,有效避免了节点宕机时负载不均衡现象的发生,在性能、稳定性、鲁棒性、可观测性、工程服务效率和架构演进体系等方面都有了显著提升。
并且,随着 IoTDB 各模块可观测性的显著提升,我们的监控指标数量从 100 多个增加到了 900 多个。尽管监控指标数量增加了近 10 倍,但监控模块在火焰图中的 CPU 开销却从 11.34% 下降到了 5.81%,实现了显著的开销节省。
除了功能模块研发,我们在 2023 年也持续对 IoTDB 系统性能进行优化。比如我们从用户视角出发,对用户迫切需求的行式写入接口进行了深入的瓶颈分析和性能优化,针对典型场景,我们已经找到了 5 个主要的优化点,预计完成这些优化后性能将提升一倍以上。
同时,在 IoTDB 内核之外,我们也大力发展了 IoT-Benchmark 基准测试工具,在写入能力(跨设备写入)、查询能力(align by device/desc/limit 查询)和元数据建模能力(支持不同 TagKey 层级设置 TagValue 个数)方面都实现了显著功能提升,期待它能够成为时序数据库领域内公认的基准测试工具,为不同的时序数据库提供一个公平竞技的平台。
这些研发成果,有一些是经过我们团队内部反复讨论达成共识后的共同努力实现的。比如说日志精简这部分的工作,因为 IoTDB 线上环境中日志打印量较大,这在一定程度上影响了问题排查的效率。因此,我们针对 36 个用户和测试场景进行了深入的日志挖掘分析,经过与各模块负责人的逐一讨论,对其中 23 条日志进行了降级,在不同场景下我们总共减少了约 37% 到 74% 的日志打印量。
其实这项工作可大做可小做,但我们还是非常认真地编写了日志分析脚本进行分析,并进行了量化的数据统计和效果预估。
完成这项工作后,有一次我和在北大读博做可观测性研究的张同学闲聊,居然发现我们的工作思路与他们领域内腾讯和中山大学在 2023 ICSE 上发表的顶会论文 LogReducer 非常相似。
这种巧合让我感到非常有成就感。我们的工作不仅提升了 IoTDB 的运维效率,还与学术前沿领域的研究工作不谋而合,证明了我们的方向和方法是具有前瞻性和实际应用价值的。
还有一些研发成果,是我们调研可供参考文献中的前沿设计思路,并基于此进行场景特性细化从而得来的。比如共识层这部分的工作,2022 年,IoTDB 共识层参考了 OSDI 2020 Best Paper Delos 的思路进行了设计和实现,支持了多种具有不同一致性和性能特性的共识算法。
2023 年,我们也在性能与一致性级别这两个维度上对其支持的不同共识算法进行了深入的对比分析,为 IoTDB 的实施及用户在选择共识算法时提供了重要参考。
此外,我们还广泛调研了多种数据库的共识算法实现,通过文档阅读、代码走读和性能实测等多种方法,从共识算法的功能和性能开销等多个角度进行了细致地对比。
针对内存紧张的特殊场景下可能会出现的副本不一致的问题,考虑到对于时序场景,可用性往往比短暂的不一致性更加重要,我们通过在共识层捕获此类异常并采取有限重试的策略,以避免让业务感知到这种现象,从而保证了系统的高可用性和一致性。
聚焦到社区上,过去一年我在 Apache IoTDB 社区提交并被合并了 119 个 PR, Review 了 387 个 PR,从 PR 数量上来说相比去年和前年有了显著提升,可能是由于更加专注于工作,并且 scope 也在不断扩大吧。
让我更加高兴的是,我能明显感觉到作为“IoTDB 背后的团队”,我们对 IoTDB 易用性的思考更加深入了,研发过程中用到的工具也更高级了,IoTDB 发展为一个时序数据库产品的路径,我们也更明确了。从数据库内核的研发拓展到用户高度关注的易用性监控工具的研发,就是一个很好的例子。
2023 年在研发过程中,我最大的感受就是积累理论建模能力和系统思维是多么的重要。虽然研发工作,听起来已经是在创造新的功能、新的产品,但是这绝不意味着我们要闭门造车,把自己关在已有框架的既定思维里所谓的“创新”,而更应该深入钻研已有的科研突破、技术成果,以及了解用户的需求和痛点,进而针对任何系统分析或产品性能当前的瓶颈提出有效的优化方案。
这些钻研应该从平时做起,这样在实际的研发过程中,才能立刻调动你需要的理论与实践知识储备,然后快速的反哺到你的创新过程中。
所以,2023 年,在技术沉淀方向,我和小伙伴们其实做了很多探讨和尝试:我们梳理了常用的 JDK 和 Linux 命令,也用熟了问题排查工具 JProfile 和 Arthas;我们对 JVM 有了一些深入的探索和技术沉淀;我们绘制了 IoTDB 的磁盘文件地图;我们针对若干用户场景的真实数据进行了压缩算法的对比测试;我们还组织了 6 次工程讨论班和 6 次论文讨论班,对 6 个方向的共 15 篇论文进行了分享介绍。这些一点一滴对理论、对工具的积累,都变成了 IoTDB 进行性能演进的技术储备之一。
在持续的积累、迭代、调优、打磨中,我们的性能成果获得了评测认可。2023 年后半年,我和小伙伴共同投入到了某知名测试场景的瓶颈分析、性能调优和内核迭代中。
历经三个月的不断调整测试,我们的努力最终获得了显著成果,不仅在该测试场景中取得了第一名的成绩,还通过了第三方的评测。我们所有的创新成果汇聚成了高性能的 IoTDB 产品,而它通过了权威的评测认证,这一成就不仅证明了 IoTDB 1.x 架构的出色性能,也让我们对于 2024 年能够实现更进一步可验证的性能成绩充满期待。
除了技术方向,在研发的最终目的——应用层面,我也有幸深度参与了进来。2023 年我们组参与了数十个POC 项目,覆盖了海、陆、空、天等多个领域,并成功部署上线了数百节点的 IoTDB 集群,实现了 62.6 GB/s 的最大吞吐量和 0.8 以上的集群线性比,参与这些带有挑战性的项目并最终成功落地还是非常让人有成就感的。
同时,我们逐步构建了面向 IoTDB 的 DBA 宝典。通过梳理异常排查方案和问题导图,我们为 33 个常见问题提供了原因分析和解决策略。DBA 宝典的存在大大降低了实施团队处理异常的难度,有效减轻了产研团队的 Oncall 负担。
归根结底,我们研发产品的动力就是希望让用户用起来、用得好、用得便,所以看到落地实现的性能突破,看到大家的好评越来越多,这种欣喜也是同样让我印象深刻的。
04 改变、效率与协作
从学生到研发,从社区到公司,这些年我觉得自己改变很多,我觉得本质的原因可能都与我一直在追求“效率”相关。尤其是 2023 年,在项目管理和团队管理的角度,我认为都有值得说一说的感悟。
从 IoTDB 项目管理的角度来说,2023 年我深刻体会到了流程体系在构建一个可持续发展的软件开发团队中的重要性;我认识到只有拥有一流的团队,才能够开发出一流的软件。我们的产品流程体系在 2023 年进一步完善,在代码质量静态检测、Commit 级别的监控、定期的功能和技术评审会议、多层级技术支持团队、竞品功能和技术分析、安全漏洞感知和修复等多个方向进行了优化,这对我们建立可持续的软件工程体系有很大帮助,进而我们可以让 IoTDB 的每一次技术更新都能够保障低风险、高质量,让项目用户能够获得更敏捷、全面的支持服务体验。
同时,2023 年我们面对并快速解决了许多棘手的问题,但也遇到了一些难以快速找到原因的疑难杂症,例如 DataNode 进程在 OOM 后仍能响应心跳但无法处理新的读写请求,以及 Ratis consensusGroupID 编码错误导致的 GroupNotFound 错误等等。
从这些经历中,我发现不是所有技术问题都能够立即找到解决方案,但解决这些问题的过程加深了我们对于设计新功能时对各种异常场景的考虑,有效避免了许多未来可能发生的 Oncall 问题,本质上其实也在帮助 IoTDB 确定未来的演进方向,也就是所谓的“磨刀不误砍柴工”吧。
而从团队管理的角度来说,当我选择进入天谋科技,并且有幸牵头 IoTDB 系统组的工作后,我发现我的很多精力需要放在让团队的效能最大化上:
技术方面,我最开始深入了解的就是分布式系统,我一直在学习如何实现分布式系统的高扩展性和高可用性,而 2023 年我们组的主要工作之一便是打造 IoTDB 的可观测性,我发现这些理念同样适用于团队协作中。
在团队中,高扩展性意味着支持团队成员的并行工作和动态调整;高可用性意味着在关键任务或数据上实施冗余策略;而可观测性意味着定期统计和评估时间分配及其 ROI,以减少团队沟通成本对我自己的工作造成的影响。
基于这样的认识,我在分配我们组的任务时,尽可能根据我对团队成员的了解,分配给每个人感兴趣和擅长的任务,并确保信息、知识或工作负载能够在多个成员之间共享,以此来平衡大家工作的主动性和灵活性。
同时,我也对自己的工作效率进行了持续监控,以结果促使我思考如何提升自己和团队单位时间的工作效率。很高兴的是,公司的气氛一直非常包容、开放,我也获得了其他团队小伙伴的很多建议、支持,这让我能够一直坚持大家一起探索提升效率和价值的途径,最终也尽量避免了我们组内出现“单点瓶颈”,实现了更加高效和稳定的团队协作模式。
05 2024,做深、做广、做好、做响
回顾 2023 年,我觉得我在技术和管理方面取得了一些进步,但同时也深刻意识到,在让企业成功的方方面面,我还有太多不了解不擅长需要学习的地方。
展望新的一年,我为自己和我们组设定了以下几点期望:
• 做深:希望能够系统地学习体系结构、操作系统以及《性能之巅》中的相关知识,并将这些知识应用到实践中,不断提升 IoTDB 的技术水平和性能表现。
• 做广:除了在分布式和可观测性方面的投入之外,希望能深入学习时序数据存储引擎,查询引擎和流处理引擎的知识,向优秀的同事和业界前辈学习。
• 做好:持续努力提高 IoTDB 的稳定性、鲁棒性和易用性,确保它成为用户信赖的时序数据库。
• 做响:寻找机会将我们团队的工作成果和经验分享给外部,与更多的同行进行技术交流,不断增强 IoTDB 的知名度和技术影响力。
对我个人而言,我坚信的一点是,只要相信自己当前的工作富有意义和前景,并且能够在其中找到快乐,那么就值得坚持下去,全力以赴。
我相信,我的工作是有价值的,未来 IoTDB 一定能够在工业物联网的时序场景大放异彩。在这个过程中,我需要保持学习和成长的心态,积极面对每一次机遇和挑战。
期待自己继续和 IoTDB、和天谋科技同行、共赢。