程序员的“中年危机”是个老生常谈的话题。在焦虑气氛的烘托下,35 岁俨然成了一个魔咒,也是程序员职业发展的分水岭。本期大咖说直播,InfoQ 邀请到了 Zilliz 合伙人、首席布道师顾钧,结合他做开源向量数据库项目 Milvus的经验,分享如何在开源中找到技术的乐趣,以及国产开源数据库的机遇与挑战。
InfoQ:很高兴有机会和您进行交流,您方便简单介绍一下自己吗?
顾钧:大家好,我是顾钧,来自 Zilliz。Zilliz 是一家基础软件领域的技术创业公司,我是 Zilliz Milvus 开源项目的首席布道师,同时我也在国内外的一些开源基金会中做开源相关的推广和社区合作的工作。
InfoQ:此前您曾在一篇文章中提到,Milvus 向量数据库是带您走出程序员中年危机的开源项目。我们也注意到在今年 6 月份,Milvus 从 Linux 基金会旗下 Al 子基金 LF AI & DATA 毕业,今年 3 月,Milvus 论文也被数据管理国际顶会 SIGMOD 接收。您方便和我们介绍一下 Milvus 这个项目的开发背景以及设计思路吗?它能解决的核心问题是什么?
顾钧:Milvus 向量数据库是一个开源项目,其实早在 2018 年,我们就有了初步的构思。2018 年,我们在和用户接触的过程中发现,一些行业用户已经开始尝试把实验室的 AI 算法带到实际业务应用中,但当时整个 AI 应用开发所处的状态是,应用开发需要把端到端所有的组件构建起来。这意味着,开发任何一个应用,都相当于端到端定制,这对于项目来说,人力成本会比较高。
结合自身经验,我们认为,AI 应用的构建和传统应用的构建过程是类似的,需要有大量通用化的组件来做支撑。不过实际上,在 AI 相关领域中,是缺少大量基础构建的。于是在 2019 年的时候,我们就开始开发 Milvus 向量数据库,并在 2019 年 10 月份开源。
通过 Milvus 开源项目,我们希望传达这样的理念:用更加组件化的方式,帮助大家去构建 AI 应用。在全球范围内,从去年开始,大家越来越多地去尝试构建为 AI 应用服务的基础软件组件,而 Milvus 就是其中很重要的一个向量数据库组成部分。
InfoQ:Milvus 涉及数据库和 AI 这两个领域,团队在研发时遇到过哪些挑战?是如何解决的?
顾钧:最大的挑战就是如何去收集用户的需求,并把用户需求与固有的需求做优先级规划。
基础软件在研发过程中会存在很多不确定性。就 Milvus 而言,从数据库的角度来讲,它是一个系统软件,虽然并不是传统的数据库,但会和数据库下的基础组件有一些共同需求,这些需求又有一定的优先级。同时,Milvus 也是为 AI 应用去服务的基础组件,它和传统的数据库又不一样,需求中会带有 AI 应用领域的一些特性。
其中一个最典型的问题就是,你需要思考,是先把整个系统做好,还是优先考虑用户侧的需求,把服务 AI 应用相关的开发功能做好。这其实没有标准答案,因为一个成熟完善的系统,应该兼顾好这两方面。
在这个过程中,我们需要不断地去收集用户反馈,结合用户需求与数据库系统本身的一些固有需求做出合理规划。在某些版本中,会有侧重点,但整体而言,我们希望在两个层面都能不断地往前推进,既能解决用户的实际问题,也能确保稳定性。
总结来说,如果没有一个反馈良好的社区,没有用户的持续反馈,是很难做到这一点的。因为一个新的基础软件,如果只是开发团队自己在做的话,很容易陷入自我陶醉的状态,这比较危险。
InfoQ:除了做好需求规划,团队在开发 Milvus 的过程中,还积累了哪些经验?
顾钧:主要是开源项目开发上的一些经验。因为 Milvus 是一个开源项目,我们需要用一些更加开源的方法、开源的实践来做,这和传统的软件开发存在很大差异。Milvus 所有的代码都是在 GitHub 上公开可见的,这对于团队成员来说会增加很多额外流程,比如需要注意代码风格、注释等等。对于从前没有做过开源项目的程序员来说,很容易忽略这部分内容,甚至认为这是一种形式化。实际上,这是开源中相当重要的一部分。
对于开发者来说,需要拥有易读的代码风格及注释,还要有比较详尽的文档,这样既不浪费社区开发者的精力,也能让别人更容易理解我们正在做的事情,从而吸引更多的开发者参与到社区中来。
InfoQ:像数据库这样的基础软件对可靠性、稳定性的要求普遍比较高,Milvus 是如何提高可靠性和稳定性的?
顾钧:做基础软件,在初期,它的稳定性肯定不是一个理想状态,至于怎样提升它的稳定性,主要从两方面下功夫。
一方面,需要从软件设计的层面下功夫,这要求开发者具备一定的技术积累,开发者可以通过研读论文中的最佳实践来学习。另一方面,从开源项目角度来讲,还有一个很重要的因素是社区的反馈。毕竟你能做的测试有限,你可以测一些代码覆盖率,也可以做压力测试,但是你很难像用户那样,在各种各样的生产场景中使用。Milvus 瞄准了用户痛点,大家也愿意把这样一个相对早期的开源项目放到生产环境中去,和我们一起成长。
InfoQ:未来 Milvus 会重点关注哪些方向?
顾钧:我们对于 Milvus 的定位非常专注,它作为向量数据库,就是要去服务那些 AI 类型的应用,尤其是深度学习型的 AI 应用。从去年开始,MLOps 概念流行起来,开发 AI 型的应用需要 MLOps 的最佳实践。Milvus 的目标就是要做 MLOps 中最重要、最基础的数据库服务组件。
InfoQ:当前国产数据库存在一定的机遇与挑战,可以和我们分享下您的洞察吗?
顾钧:早期国产数据库厂商可能只有四家,这两年确实如同雨后春笋一般冒出来特别多的国产数据库公司,有开源的,也有不开源的。从根本上来讲,国家层面对国产基础软件确实存在一定的需求,这也催生了很多团队投身到这个创业赛道中。不过我认为,现在国产数据库数量确实是有点过多了。
当前,国产数据库也确实存在一定的挑战。数据库尤其是 SQL 型数据库,并不是一个特别新型的行业,它已经经历了一个比较长期的发展,也有了很多比较成熟和稳定的产品,甚至有很多开源产品。像 MySQL、PostgreSQL 都已经相对比较稳定,也有很多用户在生产环境中去使用这些开源项目。在这种情况下,团队要发起一个新的数据库项目,需要相当长的时间才能追赶上这些成熟的项目。同时,从商业层面来看,投入大量的时间,但回报却不明显。
当然机遇也是存在的。比如我们在做的向量数据库,它面向的是一个相对比较新的场景、新的领域,如果有更多的团队能够瞄准那些新赛道,去解决那些成熟数据库无法满足的需求的话,依然是有机会的。
InfoQ:具体有哪些新赛道值得关注?
顾钧:现在的基础软件公司和传统的公司相比有很大的变化,传统做基础软件的公司就是在写一个软件,但现在整个大趋势是基础软件在往公有云转。现在的公司在基础软件领域做研发,最终呈现出来的是一个公有云上的基础软件服务。也就是说,现在大家都是在做软件,但未来大家要提供的是能力。
这其中蕴藏着很多机会,比如 Presto 瞄准的就是一些数据库的需求,它类似于联邦数据库,可以接很多不同的数据源,并用 SQL 语言查询,把不同数据源的数据汇总在一起呈现给用户。现在很多数据科学家也不用 SQL 语言,而是用 Python,所以有人去做 Python 统一的访问连接层,Python 后端可以连接很多不同的数据库、数据源,前面提供一个标准的 Python 访问接入层,以此来迎合数据科学家的需求。
像上述这些需求还是很多的,并且在全球范围内,也有一些创业公司拿到了不错的融资。
InfoQ:对于数据库的未来发展趋势,能谈谈您的理解吗?
顾钧:我觉得数据库会是一个持续热门的创业方向,因为数据库是大家都需要的基础软件,数据库的云服务也是大家非常需要的一个基本的云服务。并且现在也得到了市场的印证,很多做基础软件的 SaaS 公司都在数据库或和数据相关的领域,像 Snowflake 就是最典型的例子。
从某种程度上来讲,数据库在未来的需求,会非常受前端应用的影响。所以大家可以去关注前端应用的一些变化,这些变化一定会带来数据库的变化。就像在云环境下的分布式应用的需求,或者 AI 的一些需求,都会给分布式的数据库、AI 的数据库带来一定的需求。包括时序数据库,现在有不少优秀的创业公司在提供自己的产品和能力,另外像联邦数据库也是一个重要方向。
不过总的来说,未来数据库的呈现一定是在云上的。如果大家想进入这个领域,一定要考虑好你的数据库怎么在云上提供能力,提供服务,怎么以云的方式去交付你的产品。当然这并不是要你从头开发一个数据库,现在也有很多公司基于一些开源项目去进行云产品的扩展。
InfoQ:Milvus 向量数据库在 2019 年就已经开源,当时团队为什么会选择开源?契机是什么?
顾钧:Milvus 实际上是向量数据库中的第一个开源项目,同时我们也是第一个做向量数据库的公司。我们想传达的理念就是,对于 AI 应用开发,不应该再用端到端的方法,而是像传统应用一样,有模型的部分负责业务逻辑,有向量数据库负责数据服务。Milvus 承载了这个理念,我们也需要进行宣传,最直接、最有效的方法就是去做开源推广。
在整个 Milvus 项目开源之前,我们先把基于 Milvus 的应用示例做了一个代码库,并放在 GitHub 上开源,向大家展示 Milvus 的应用场景。有一些用户尝试之后,表现出了很浓厚的兴趣,这让我们意识到开源的想法是很靠谱的。
InfoQ:其实现在也有很多国产基础软件选择开源,您觉得这会成为一种趋势吗?
顾钧:我觉得这已经是一种趋势了。现在做基础软件,基本上不开源已经是极少数的了。至少在国内来讲,大家已经接受了开源的模式。
这背后一个很重要的原因就是,硅谷的开源公司起到了很好的示范效应,它们首先让大家看到,开源公司也能够上市,也能够把一个基础软件做起来。比如 Elastic Search 在前两年就上市了,另外有些公司即使没上市,在资本市场也十分受欢迎。从资本市场的角度来讲,很多开源公司取得了不错的融资成绩,大家也愿意跟进。从另一个角度来讲,小型创业公司在早期,怎么活下来是一件很有挑战的事情,结合国外的开源示例以及开源理念,大家也会越来越多地选择开源这种方式,这能帮助创业公司在早期更易生存下来。
InfoQ:在您看来,开源数据库未来的发展方向是什么?
顾钧:从市场上来看,做开源数据库的公司相对多了一些,大家的思考也更加理智,会把更多关注放在产品层面上。从技术上来讲,任何一个项目都会有一些技术亮点,但是这些技术亮点不一定能够带来产品层面上的优势。现在,很多人会基于基础软件去提供云服务,甚至有一些硅谷初创公司直接就在做云服务,基于开源软件去提供云上的服务。在过去,大家可能会觉得一个开源项目不控制在自己的公司手里,就会感觉不牢靠,但从现在的趋势来看,硅谷的投资人更倾向于接受这个产品本身,其中的技术也许不是由你主导的,但是你有产品化的能力和路径,能把这个技术进行产品化,这才是他们更关心的问题。
我认为大家对于开源数据库的观点和想法会不断的往前走,现在你要加入到一个开源数据库的生态当中是很容易的,因为有很多开源数据库的项目。但如果你要发起一个开源数据库的项目,我觉得可能还要三思而后行,因为项目太多,整个社区太分散,并不是一件好事情。
InfoQ:您之前在一篇文章中提到 Milvus 带您走出程序员中年危机,自己也在开源中找回了技术的乐趣,可以和我们分享下您与开源之间的故事吗?
顾钧:其实我从大学毕业到现在一直都是数据库工程师,做了 14 年的时间。数据库工程师会有自己最熟悉和最擅长的一些数据库门类及领域,像我原来一直都在金融 IT 领域,接触的都是 IBM 的数据库和传统的数据库。这期间恰逢开源数据库崛起,你会发现,不管自己擅长 MySQL 还是 PostgreSQL,十几年后涌现出的新数据库和你原来使用的是不太一样的。这会让你不得不思考,为什么一个技术变得没有那么流行了?甚至你会发现这个趋势变化有一点奇怪和反直觉的地方。我们始终面临的一个挑战是,越来越少的优秀系统工程师愿意做数据库管理员或是系统专家,大家只能更多的依赖自动化,或是一些标准化的流程,而包括 MySQL 在内的开源数据库,其实是缺乏这些工具的。
在互联网场景下,很多人做的新技术、新项目,实际上是把原来的某些东西重做了一遍,虽说重做本身不是问题,但这样做的意义究竟在哪里?这是一个工程师必须要思考的问题,也是我在数据库工程师职业生涯一直困扰我的问题。对于系统工程师来说,怎样随企业,随行业,随技术共同成长,这值得深思。
当时我做了很多思考,后来也对自己的职业方向做了些调整。我过去在摩根士丹利的 IT 团队做了 8 年的数据库工程师、数据库专家,转型到华为去做数据库产品的战略规划,其实就是想要去更系统化地梳理所有数据库产品,想探究为什么我们在这个领域会走到今天这样的状态。
在这个过程中,我也有很多有趣的收获,也让我觉得,我们在这个时代,很多 IT 领域的差距,尤其是在软件领域,甚至基础软件领域的差距没有那么大。虽然我们现在还没有像 Oracle 这么好的数据库,但我们是有机会在基础软件领域迎头追赶的,这也是为什么我后来选择加入一个创业公司,开始通过开源的方式去做数据库产品。我希望通过开源的方式,提升我们的基础软件能力,从而和全球范围内一些其他的基础软件公司去竞争。这对我来讲也是非常有意义的事情。
InfoQ:您第一次接触开源是在什么时候?当时您对于开源的理解和现在相比有哪些差异?
顾钧:我大概是在 2015 年左右的时候接触到开源。当时我作为数据库工程师,更多的是在关注一些比较成熟的数据库商用软件。刚接触到开源的时候,我也比较好奇,也在想开源为什么在一些互联网行业中流行。当时我的想法是,开源可能就是因为免费,大家愿意去使用它。但是到今天,当自己也加入到一个开源项目中去的时候,会对开源有一个完全不一样的理解。
从我今天的角度来讲,开源对不同的利益方有不同的意义。对个人来讲,开源是一个很好的展现自我的方式,你加入到一个开源社区,可以做代码的贡献,也可以做非代码的贡献,比如帮助项目去做一些推广,做一些演讲和分享,写一些技术博客,分享你是怎么使用这个项目的。对于公司来讲,开源能帮助你更容易地建立一个可持续的商业模式,或者运作模式。
InfoQ:最近开源圈发生了两件事,讨论热度比较高,也想和您聊一聊。第一件是某波兰开发者买了台国产安卓手机,她联系手机厂商想获取部分源码时,得到的回复是,可共享的部分代码需要在工作时间到深圳办公室索取。于是这位波兰开发者就找到了一位在深圳的博主,帮她上门自提开源代码。虽然过程有些波折,但这家公司最后还是把相关源码发给博主,并在官方论坛上公开。第二件事和 Apache Doris 有关,这个项目原本是百度在 2018 年贡献给 Apache 软件基金会的,2020 年,百度 Doris 团队的个别同学离职创业,基于 Apache Doris 之前的版本做了自己的商业化闭源产品 DorisDB,前几日,DorisDB 宣布更名 StarRocks 并开源。您对于这两件事是怎么看的?
顾钧:先说第一个手机厂商的事情,我也看了一下前因后果,一开始可能很多人会觉得国内开发者不尊重开源协议,但我个人的想法是,这个手机厂商最初的反应是完全可以被理解的。因为开源项目在开发的过程中,对于代码的规范、文档都有很高的要求。作为一家手机厂商,它主要的业务输出产品是手机,而不是代码,一般来说很多公司对代码的要求没有那么严格。而对于主要业务输出是代码的公司来说,则会要求严格,比如 Milvus 在项目在开源之前,我们会集中地做代码规范化检查和改写,补充文档,这是一个相当耗时间的事情。所以从这个角度来讲,我不认为那家手机厂商一开始的反应是恶意不想分享代码,他可能是需要一些准备,想先检查一下那些代码,防止分享出去被人评价不规范。
对于第二件事情,从个人角度来讲,我觉得发生这样的情况还是挺可惜的。这里想先和大家分享一个前两年发生在硅谷的类似的故事,就是我之前提到过的 Presto。
Presto 这个项目最初是由三位在 Facebook 工作的工程师写的,并且开源出来。而 Facebook 这家公司对于开源的态度一直都比较佛系,他会开源很多项目,但这些开源项目通常不会选择加入到基金会里去孵化。根据事件的主人公描述,Facebook 想把 Presto 项目拿出来,和 Linux 基金会一起成立一个子基金,专门去运作这个项目。当时 Presto 的发起人,三位工程师就不太满意,他们认为自己对这些项目付出了很多,不希望把这个项目加入到 Linux 基金会去,因为这会让整个项目的品牌转移到 Linux 基金会,同时自己也没办法再去注册相关的商标。当时恰逢开源公司融资状况越来越好,三个人就决定离开 Facebook,自己做 Presto 的商业化产品,并且也起了一个不一样的名字,避免产生误解。这几年,他们也拿到了很多融资,估值也很高。
这其实也说明,对一款开源软件来说,虽然社区、代码确实很重要,但他们之所以能够拿到这么多融资,更重要的是他们让别人相信他们有产品化的能力、方法和经验。
回到第二件事情本身,我觉得 DorisDB 最初叫这个名字,一定是对 Doris 这个项目有一定认同感的,但叫这样比较容易混淆的名字确实不是一个很合适的做法。我认为,开源是很好的方法与工具,但它不是最终的目的。如果你把开源当成了最终的目的,你就会纠结在社区以及名字的所有权上。一个开源社区最忌讳的还是社区被分裂,尤其像 Apache Doris 本身还在孵化阶段,它的流行度还没有达到一定程度,这种情况下,分裂社区是一个很不明智的做法。
InfoQ:这是否说明现在有些企业或个人,对开源版权的重视程度并不高?
顾钧:我觉得不是的。因为开源的许可证,像最典型的 Apache 2.0 开源许可证其实设计的还是比较完备的,它对于版权和专利的保护都是有过考虑的。在 Apache 2.0 框架下,你的专利是会授权给别人使用的,只要别人使用了基于 Apache 2.0 协议的软件项目,他就可以无偿使用你的专利。从法律层面来讲,开源基金会对于版权的保护是没有问题的,但确实有很多公司会出于自己的一些想法,对项目做些变化,比如 StarRocks 采用 Elastic License 2.0 作为开源许可证,这个开源许可证是不被开源促进组织 OSI 认可的。不过 Elastic License 2.0 也有它存在的商业背景,几年前大家炮轰公有云服务商,认为他们不回馈开源。但从另一个角度来看,公有云厂商也的确贡献了很多项目,可能有的公司不希望别人贡献,结果导致有时候公有云厂商只能启动一个新项目。
InfoQ:从去年到现在,国内发生了多起重大开源企业融资事件,Zilliz 也在去年 11 月完成了 4300 万美元 B 轮融资,市场对开源赛道的热情高涨,是否说明本土开源到了爆发期?
顾钧:我觉得不单单是国内的开源到了爆发期,全球范围都是这样的。比如美国有很多开源企业融资状况一向很好,甚至在欧洲这样整体创投环境不是很好的地方,也有开源企业拿到融资。之所以出现这样的情况,一方面,当前开源的受众越来越多,很多人在做项目的时候,会倾向于选择开源的方式。尤其是在 AI 等新领域中,比如 AI 基础软件领域,这是一个新兴领域,有很多公司在这个领域做项目,也有很多投资人看到这个领域,而这个领域中又恰好开源公司多一些。另一方面,像之前提到的,硅谷一些公司确实起到了示范作用,他们以开源的方式来颠覆传统,这也会让大家觉得,这对创业公司来说是个不错的方法。
InfoQ:当前开源赛道比较热门的投资方向主要有哪些?什么样的开源项目能够得到资本的青睐?
顾钧:因为公司业务方向的关系,我平时会更多关注 AI 和数据领域,比如一些大数据、数据分析类的项目。在 AI 领域比较热门的方向集中在 AI 基础组件,此外还有一些是更垂直的应用,像国外比较流行的 Conversational AI,专注的就是自然语言处理相关的会话智能技术赛道,此外还有机器视觉相关的方向,它会更偏向算法,但并不是只做算法,而是让快速应用开发的框架去结合自动机器学习技术,帮助用户快速地训练模型,落地应用。
在数据领域,目前比较热门的方向是数据类的云服务项目,当然这些数据类的云服务并不是说你一定要有个开源项目,你可以结合现有的开源项目去做云服务,这也是一种很好的方式。
另外,从技术的角度来讲,确实有些技术相对比较难商业化,有些技术相对比较容易商业化。站在投资者的角度,大家希望最终能获得正向的商业回报,所以更多会偏向能够被商业化,能够被产品化的基础领域。这也给开源带来了一些相应的挑战,对于早期创业项目,如果大家都是开源的,都只是贡献代码,那么差异并不大,但是慢慢地会产生差距。开源项目并不是凭空而出的,而是基于现有的一些开源技术构建的。那些容易被商业化,容易拿到融资的项目,能够得到更好的生存环境,但是他所依赖的那些上游项目可能不那么容易被商业化,这是一个比较大的挑战。
总结来说,如果是 ToC 项目,大家更看重的是你的想法,以及最终能不能落地成产品;如果是 ToB 项目,这需要一个客观的时间周期,不能快速看到结果,大家更关注的是你有没有能力去做这件事情,更关注你过往的成功经验、产品化的能力,以及对生态的了解程度。
InfoQ:最后也想和您聊一聊个人成长相关的话题。现在,程序员的“中年危机”已经成了老生常谈的话题。对于那些面临“中年危机”的程序员,您会给他们哪些建议?
顾钧:在 IT 领域,技术是不断进步的,不断会有一些新东西出来,所以对于技术人来说,最重要的就是要保持学习和思考。这里所说的学习不是要你完全理解这个新技术怎么用,也不是要你花大量的时间去阅读文档。事实上,当你在一个领域积累到一定程度后,是比较容易再去学习或理解其他新事物的基本理念的。
一方面,还是要花时间去积累技术相关的经验和想法,另一方面,也需要意识到成长并非是线性增长的,它可能会在某个节点不断衰减,就像奢侈品一样,最后一定不是一分价钱一分货,可能你付出了十分的努力才换回来一分收获。这个时候不要给自己太大的压力,而是要调整好心态。
我认为当下对大家来说是一个好时期。像前段时间,光明日报说“996”是互联网行业用工史上的一段弯路,现在全社会都希望大家有更多的时间去关注一些 996 以外的事情。比如,你可以参与开源社区中去,即便你不贡献代码,也可以做一些分享,组织活动等等。同时,开源社区比较开放,在这里也可以接触到更多的想法和人。
InfoQ:您有哪些学习方法可以和大家分享?
顾钧:我在学习的时候习惯先从自己熟悉的部分向外拓展,比如当我所在的技术领域出现新事物时,我会研究下新事物和我过去熟悉的事物差距在哪里,为什么会有这样的差距,顺着这条路线,我就会从自己比较熟悉的地方不断去探索它的外沿。
其实在每个大环境下,都会有一个大的主题,比如十年前可能是大数据,再之前是高性能数据库等等。在大主题下面,大家可以去尝试了解这个主题和自己工作的关系,找到一些结合点。这样你就会发现,自己始终在与这些新理念保持同步的状态。
嘉宾介绍:
顾钧,Zilliz 合伙人、首席布道师,LF AI&Data 基金会 TAC 成员,开放原子基金会开源导师。北大毕业 16 年以来专注于数据库、大数据技术,尤其对 OLTP 平台与场景有着丰富的经验,先后任职于工商银行、IBM、摩根士丹利、华为等企业。
领取专属 10元无门槛券
私享最新 技术干货