:::info 值此开源专栏初开之际,写下本文,以笔者较为了解的 Dapr 开源项目作为核心讲述对象,描述了开源项目的诞生,发展,表达对于开源社区、生态的看法,与诸君分享。一些看法出于个人视角,难免有错漏和妄揣的部分,还请大家包涵指正。 :::

背景

讲述 Dapr 项目的诞生之前,先为大家讲解 Dapr 项目的现状,以供读者能对项目本身有所了解。
Dapr 是一个 CNCF 旗下一个社区驱动的开源项目,项目贡献者是微软 Microsoft , 最先的作者据笔者追溯应该是白海石和 yaron(他同时也是 Dapr 学习手册的作者,提出 OAM 和 Dapr 的人) 。

Dapr 项目的工作目标按引官方描述:
Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中。

一些社区同学认为 Dapr 是 service mesh 的下一步形态,也有人将这种新时代的运行时提供软件称之为 mecha(机甲),mecha 为业务应用提供分布式能力,就像操纵者穿上机甲一样,做到本来自己做不到的事情。
下图是 Bilgin Ibryam 提出 Multi-Runtime Microservices Architecture 文章中总结的分布式应用的四大需求,分别是生命周期(Lifecycle)网络(Networking)状态(State)捆绑(Binding)。
image.png

由此,Dapr 项目即是一个为现代分布式应用提供分布式能力的开源软件。目前在 GitHub 上开源,至今已获得 18.6k 的 star,受欢迎程度可见一斑。

诞生

追溯 GitHub 上的开源,第一次提交在 2019 年 6 月 21 日,作者是 yaron (Dapr 主要代码贡献者)。不过作为微软的内部项目,其孵化时间要更早一些。

开源项目的诞生通常伴随着现实问题的发现,说道 Dapr 项目解决的问题之前,还有一个项目不得不提,微软的 OAM(Open Application Model)

两个项目的外部公开时间都是 19 年中,OAM 的合作提出者我记得是阿里,彼时正是 kubernetes 火热的时候,计算调度平台上的问题被 Golang 的杀手级应用 Kubernetes 解决一大部分,然而使用 kubernetes 对 Developer 又提出了更多更高的要求,尤其是其提出的新的概念,涵盖不同的 API 和独特的工作方式。

如何解决这个问题呢?

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。

相信聪明的读者以现在的知识来看,也已经想到,如果能够做到一个新的设计语言作为中间层,屏蔽这些开发者不需要关注的基础设施异同,专注于业务编码是不是就能解决呢?因此,OAM 自然呼之欲出。(如果关注 OAM ,可以了解一下该项目标准在阿里巴巴的实践,即 Kubevela 项目,该项目具有较大的潜力)

而 Dapr 则是在白海石与以色列同事 Yaron Schneider 讨论 OAM 时进一步提出的想法,设计一个新的编程模式,将分布式系统常见的功能封装成 Sidecar(Kubernetes 的概念,描述和业务应用在同一个 Pod 的容器),通过 HTTP 或者 gRPC(两种常见的传输模式,能兼容大部分应用)暴露给开发者。该想法命名为 Distributed Application Runtime,简称 Dapr。【本段取自专访OAM和DAPR创始人白海石:一位33年资深程序员的朴素想法-张善友】

Dapr 针对面临的问题,提供了几个新特性帮助解决:

首先是 Sidecar 的形式提供服务,在容器编排平台中,Sidecar 以一种无侵入的方式提供服务,典型的如 Envoy Sidecar 做代理的路由转发,同时由于独立于主要应用程序,因此也拥有跨语言的特性,用户不会绑定于某一个编程语言就能复用逻辑,在微服务时代尤其有用。

第二是 Building Block 的概念,让 Dapr 的使用者可以自定义选择不同的构建块,而不是强制用户的所有功能都必须采用 Dapr 提供的分布式功能。

因此,Dapr 适用环境是为企业级的开发者在分布式系统的设计和编码环节。由于企业在数字化大浪潮中的转型发展,而遇到的业务由本地向云迁移过程中将会面临的复杂问题,正是 Dapr 这类简化编程和应用程序运行模式的软件大放异彩的时候(OAM 也是)。(有一类软件叫做 Infra as code,基础设施即代码,也是因为现代复杂的基础设施环境等问题而进入开发领域,感兴趣大家可以进一步深入了解)

开源

畅谈了这么久,终于聊到 Dapr 项目的开源特性了。

开源带来的好处可以见我另一篇文章的论述总结,本处不再赘述,而是主要探究 Dapr 需要开源的原因,也为大家了解开源运作模式提供材料例子。

从 Dapr 的通用的分布式运行时软件的定位中可以分析出,标准是其核心!

标准是一个人,一个公司做不出来的,要加强 Dapr 的影响力,促进其指定大家统一认可的标准,通过开源,建立一个共同贡献的社区是不二选择。

不仅是标准的问题,Dapr 作为新时代的应用程序,自然有不少新理念,新想法需要验证。编程模式上的验证需要投入大量的研发工程师,这部分人力支出和验证成本都极为庞大,通过社区共建的形式,快速讨论设计、实施、并经过社区验证才能支撑起项目的不断发展。

因此,人力也是大多数开源项目考虑的因素。

最后是触达用户,Dapr 这类型的项目面向用户是开发者,还有哪里比开源社区更具有热情的开发者呢,要让 Dapr 的发展更贴近用户,更靠近其目标想达到的云开发者的广泛应用,开源便是其最好的选择。

这里推荐两个项目去观察开源项目的受欢迎程度和活动分布(Star-History OSSInsight),分别是 Bytebase 和 PingCap 开源的工具。一图胜千言,附上两张图以表其功能。

图一:Dapr 项目开源的星星收获趋势
star-history-2022717.png

发展

Dapr 项目既然要为开发者服务,自然要调研开发者在编程中使用的主要功能,将其作为不同的构建块提供给用户。

当前其提供的能力包括状态管理、服务发展、消息收发、发布与订阅、安全信息管理、Actor 模式(源自于微软 dotnet 生态中的 orleans 项目)等,以状态管理的发展比较最开始的形态,还增加并发控制,版本管理等能力,现在还在逐步增加分布式锁、工作流等构建块,而这些新功能、新构建块都是由社区用户需求驱动,从而完成构建的。由此可以看出 Dapr 的开源战略成效显著。

其中 Dapr 的出现还正好应了 XaaS 化的浪潮,其为边缘环境做的减小占用(二进制 50 多M,运行时仅需 4 M内存),提供能力为能力较低的边缘设备、应用,在边缘环境和云之间灵活切换,支持多种运行环境都是其优秀的竞争力来源。

一个开源项目的发展评判一定要关注其相关生态, Dapr 作为类似基础设施的项目,我们讨论两种生态。

一种是其下用于支持 Dapr 项目运行的生态。即各个 Building block 的驱动,他们的生态决定着 Dapr 的使用者能够应用哪些基础设施。
以 PubSub 举例,就有 Kafka,Redis,NatsStreaming,Pulsar 等常用的消息队列驱动提供了发布订阅模式的运行时能力。这方面的生态丰富多彩,其核心问题在于 Driver 都是用户自己实现贡献到社区的,代码质量和应用运行时提供的功能参差不齐,可见标准化的设想无法在现实世界中轻松达成。

一种是其上构建的,基于 Dapr 的项目,这种生态也是大部分公司在使用 Dapr 的案例能体现的。

Dapr 的主要使用者从发起者微软、阿里开始,到现在各公司如青云等参与共建,产出了不少项目和实践案例。以微软为例,为其服务的用户在云上可以轻松无痛切换底层依赖(比如消息队列从 Rabbitmq 切换为 kafka),比如阿里,为其函数式计算平台中的函数应用提供了大量分布式能力,比如蚂蚁,结合其内部优秀的 ServiceMesh 发展经验,研发出 layotto 项目,做出了分布式运行时理念符合自身 IT 基础设施的实现(并开源了),比如青云的 Openfunction,也在函数计算平台中使用 Dapr 构建。

甚至微软还推出了基于 Dapr 的商业产品 container app,用户编写函数级别的服务,一应基础设施由上下文提供,通过 Dapr 为这些服务提供了只关心业务代码逻辑的选择。

开源项目,其开发者生态是重要评判标准,Issue 创建之多寡,响应之快慢,proposal 提交之丰富,contributor 活跃程度,新生贡献者与核心贡献者的进入和流失等指标,都是我们评判开发者生态的重要依据,这部分可以夸一下 ossinsight 项目,将这些指标通过网站提供给大家查询服务,为我们评估开源项目提供了有力数据。
图二:Dapr 项目的开源活动分析
image.png

趋势

领域软件的竞争趋势:火热的开源项目其实象征着当前行业中的主要竞争领域,前几年以 Kubernetes 为核心的 PaaS,最近以 Infra as Code,Devops,Security 为代表的 IaaS,以及之后会进一步激烈竞争的 SaaS、FaaS 提供更优秀的增值服务。不同的领域都有其待解决的问题,如何提供更有价值的服务,也是我们可以从开源生态中窥见的。

程序员的发展趋势:现代开发者们普遍都面临焦虑问题,我们作为程序员,一些工作内容是枯燥的,但是怀着对编程的热爱,对事业的追求,在日常的工作中钻研出各种创新成果,既可能成就自己,也可能惠及世界。而在行业甚至国家层面,都在拥抱开源,这样一种发展趋势下,开源将融入年轻程序员作为大众文化之一。而对个人的建议则是尽早了解开源,拥抱他,成为复合型的人才,程序员的下一步发展要从开源领域中探寻。

及此,本文已经粗略讲述了 Dapr 项目的脉络。仅从 Dapr 这一隅的项目生态,已可窥见云计算发展竞争之激烈,不知多少项目在浪潮中沉浮,消失,或是翻了个浪花便再也没有出现在我们眼中。希望读者能对软件的生命周期,特别是开源软件,有更深刻的认识和想法。