Microsoft Dapr 是一个开源的、事件驱动的框架 ,旨在为云计算和边缘应用程序构建弹性和可移植的微服务。微软表示,Dapr 封装了构建微服务的最佳实践,并使开发人员可以专注于他们的应用程序的业务逻辑。
Dapr 提供了一个事件驱动的运行时,它支持构建微服务所需的基本功能,比如服务调用、状态管理和发布 / 订阅消息传递。此外,它还引入了许多更高级的特性。
Virtual actors 旨在通过将状态和行为封装在可以激活和停用的对象中来简化异步计算的管理,并支持使用计时器来触发代码执行。actor 也可以是无状态的。Dapr 中的 actor 是虚拟的,这意味着它们在内存中的表示与 actor 身份和生命周期无关。特别是,可以在一段时间内不使用 actor 时自动回收它,并在首次请求它时创建。actor 还可以迁移到不同的节点,例如,当正在运行它们的节点发生故障时。为了简化 并发处理 ,actor 是单线程的,并且受制于 基于回合的访问策略 。此外,Dapr 运行时将使用超时来检测和解决可能的死锁。
Dapr 还提供了一个 高级的事件驱动模型 ,这个模型可以将数据库、队列和 webhook 等外部服务注册为触发代码执行的事件源,或者注册为事件消费者。这是通过绑定实现的,绑定简化了与那些服务的交互,处理重试和失败,并支持将应用程序从一个服务移植到另一个服务,而无需更改代码。在撰写本文时, 当前的绑定还处于试验阶段 。
最后,Dapr 还支持跨服务 (内部或外部) 的 分布式跟踪 。跟踪不需要插装应用程序代码,因为 Dapr 使用 HTTP/gRPC 中间件来拦截所有 Dapr 和应用程序流量,并自动注入相关 ID 以跟踪分布式事务。Dapr 与 OpenTelemetry 兼容,后者支持使用许多后端,包括 Azure Monitor、Datadog、Instana、Jaeger、SignalFX、Stackdriver、Zipkin 以及其他等等。
Dapr 架构遵循 边车模式 ,这意味着它的组件既可以作为独立的进程部署,也可以作为提供隔离和封装的容器部署,而且不需要在应用程序代码中包含运行时。这使得将 Dapr 与其他运行时集成然后在 Kubernetes 环境中使用它变得很容易。
Dapr 针对许多语言提供了 SDK,包括 Go 、 Java 、 JavaScript 、 Python ,当然还有 .NET 。特定于语言的 SDK 以符合语言习惯的方式暴露 Dapr API,并隐藏使用其 HTTP/gRPC API 的复杂性。
你可以使用主要操作系统可用的安装脚本来安装 Dapr。在 Linux 下,你可以运行以下命令:
复制代码
$wget -qhttps://raw.githubusercontent.com/dapr/cli/master/install/install.sh-O - |/bin/bash $dapr init
然后你可以通过执行 Dapr run 在本地运行 Dapr,或者配置 Kubernetes 集群来利用它的 自动伸缩能力 。如果你打算在Kubernetes 中使用Dapr,确保你也可以检出最近针对Kubernetes 发布的 微软开放应用程序模型 ( Open Application Model ,简称 OAM)及其最初的实现 Rudr 。OAM 和 Rudr 旨在帮助开发人员明确地定义他们的应用程序,使其与实现区分开来,并保持开发和部署之间的关注点分离。
Dapr Aims to Simplify the Creation of Resilient and Portable Microservices