何为 “分布式能力抽象层”?
如上图所示,左侧是分布式应用存在的四大类需求:生命周期、网络、状态、绑定。从需求上说 Multi-Runtime 要为分布式应用提供这四大类需求下所列出的各种具体的分布式能力。以 Sidecar 模式为应用提供这些能力容易理解,但关键在于 Multi-Runtime 提供这些能力的方式。和 Service Mesh 采用原协议转发不同,Multi-Runtime 的方式是:
-
将能力抽象为 API:很多分布式能力没有类似 HTTP 这种业界通用的协议,因此 Multi-Runtime 的实现方式是将这些能力抽象为和通讯协议无关的 API,只用于描述应用对分布式能力的需求和意图,尽量避免和某个实现绑定。
-
为每种能力提供多种实现:Multi-Runtime 中的能力一般都提供有多种实现,包括开源产品和公有云商业产品。
-
开发时:这里我们引入一个“面对能力编程”的概念,类似于编程语言中的“不要面对实现编程,要面向接口编程”。Multi-Runtime 中提倡面向“能力(Capability)”编程,即应用开发者面向的应该是已经抽象好的分布式能力原语,而不是底层提供这些能力的具体实现。
-
运行时:通过配置在运行时选择具体实现,不影响抽象层 API 的定义,也不影响遵循“面对能力编程”原则而开发完成的应用。
备注:分布式能力的通用标准 API,将会是 Multi-Runtime 成败的关键,Dapr 的 API 在设计和实践中也遇到很大的挑战。关于这个话题,我稍后将单独写文章来阐述和分析。
=====================================================================================
在快速回顾 Service Mesh 和详细介绍 multi-runtime 架构之后,我们已经为了解 Dapr 奠定了良好的基础。现在终于可以开始本文的正式聂荣,让我们一起来了解 Dapr 项目。
Dapr 是一个开源项目,由微软发起,下面是来自 Dapr 官方网站的权威介绍:
Dapr is a portable, event-> driven runtime that makes it easy for any developer to build resilient, stateless and stateful applications that run on the cloud and edge and embraces the diversity of languages and developer frameworks. Dapr 是一个可移植的、事件驱动的运行时,它使任何开发者都能轻松地构建运行在云和边缘的弹性、无状态和有状态的应用程序,并拥抱语言和开发者框架的多样性。
参考并对照 Service Mesh 的定义,我们对上述 Dapr 定义的分析如下:
-
定位:Dapr 将自身定义为运行时(runtime),而不是 Service Mesh 中的 proxy。
-
功能:Dapr 为应用提供各种分布式能力,以简化应用的开发。上面定义中提及的关键点有弹性、支持有状态和无状