Dapr 并非服务网格。服务网格主要关注细粒度的网络控制,而 Dapr 则致力于帮助开发人员构建分布式应用程序。Dapr 和服务网格都采用 sidecar 模式,与应用程序共同运行。虽然它们有一些功能重叠,但各自也提供了独特的优势。有关更多信息,请阅读 Dapr & 服务网格 概念页面。
由于 Dapr 作为应用程序的 sidecar,Dapr 项目对性能非常重视。请参阅 此处 以获取最新的性能数据。
Dapr 中的 actors 源于 Orleans 的虚拟 actor 概念,这意味着它们在被调用时会激活,并在一段时间后自动停用。如果您熟悉 Orleans,Dapr 的 C# actors 会让您感到熟悉。Dapr 的 C# actors 基于 Service Fabric Reliable Actors(同样源于 Orleans),这使得您可以将 Service Fabric 中的 Reliable Actors 迁移到其他托管平台,如 Kubernetes 或其他本地环境。此外,Dapr 不仅仅局限于 actors。它为您提供了一套最佳实践的构建模块,可以集成到任何微服务应用程序中。请参阅 Dapr 概述。
虚拟 actor 功能是 Dapr 运行时提供的众多构建模块之一。由于 Dapr 是编程语言无关的,并提供 http/gRPC API,因此可以从任何语言调用 actors。这允许用一种语言编写的 actors 调用用不同语言编写的 actors。
创建新的 actor 类似于本地调用,例如 http://localhost:3500/v1.0/actors/<actorType>/<actorId>/…
。例如,http://localhost:3500/v1.0/actors/myactor/50/method/getData
调用新创建的 myactor
的 getData
方法,id 为 50
。
Dapr 运行时 SDK 提供了特定语言的 actor 框架。例如,.NET SDK 提供了 C# actors。目标是让所有 Dapr 语言 SDK 都具备 actor 框架。目前 .NET、Java、Go 和 Python SDK 已具备 actor 框架。
为了使 Dapr 在不同语言中使用更自然,它包括 Go、Java、JavaScript、.NET、Python、PHP、Rust 和 C++ 的特定语言 SDK。这些 SDK 通过类型化语言 API 而不是直接调用 http/gRPC API 来提供 Dapr 构建模块的功能,例如保存状态、发布事件或创建 actor。这使您能够用您选择的语言编写无状态和有状态函数及 actors 的组合。并且由于这些 SDK 共享 Dapr 运行时,您可以获得跨语言的 actor 和函数支持。
Dapr 可以与任何开发者框架集成。例如,在 Dapr .NET SDK 中,您可以找到 ASP.NET Core 集成,它提供了响应其他服务的发布/订阅事件的有状态路由控制器。
Dapr 集成了以下框架: