概述
分布式应用程序运行时介绍
Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。
任何语言,任何框架,任何地方
如今,我们正经历着上云浪潮。 开发人员对 Web + 数据库应用结构(例如经典 3 层设计)非常熟悉,并且使用得手,但对本身能支持分布式的微服务应用结构却感觉陌生。 成为分布式系统专家很难,并且你也不需要这么做。 开发人员希望专注于业务逻辑,同时希望平台为其提供可伸缩的、弹性的、可维护性和云原生架构的其他功能。
这就是Dapr所要解决的。 Dapr 将构建微服务应用的 最佳实践 设计成开放、独立和模块化的方式,让你能够选择的任意开发语言和框架构建可移植应用程序。 每个构建块都是完全独立的,您可以采用其中一个或多个或全部来构建你的应用。
此外,Dapr 是和平台无关的,这意味着您可以在本地、Kubernetes 群集或者其它集成 Dapr 的托管环境中运行应用程序。 这使得您能够在云平台和边缘计算中运行微服务应用。
使用 Dapr,您可以使用任何语言、任何框架轻松构建微服务应用,并运行在任何地方。
云平台和边缘计算的微服务构建块
在构建微服务应用时,需要考虑很多。 Dapr 在构建微服务应用时为常见功能提供了最佳实践,开发人员可以使用标准方式然后部署到任何环境。 Dapr 通过提供分布式构建块来实现此目标。
每个构建块都是独立的,这意味着您可以采用其中一个或多个或全部来构建应用。 在当前 Dapr 的初始版本中,提供了以下构建块:
构建块 | 说明 |
---|---|
服务间调用 | 弹性的服务间调用能在远程服务上进行方法调用(包括检索),无论它们是否位于受支持的托管环境中的。 |
状态管理 | 对于存储键/值对的状态管理,长时间运行,高可用性,有状态服务可轻松写入应用程序中的无状态服务。 状态存储是可插拔的,可以包括 Azure CosmosDB, Azure SQL Server, PostgreSQL, AWS DynamoDB 或 Redis 等。 |
发布订阅 | 发布活动并订阅主题 |
资源绑定 | 带触发器的资源绑定通过接收和发送事件到任何外部源(如数据库、队列、文件系统等)来进一步构建事件驱动架构,以实现扩展性和弹性。 |
Actor | 一种用于有状态和无状态对象的模式,通过方法和状态的封装让并发变得简单。 Dapr 在其 actor 运行时提供了很多能力,包括并发,状态管理,用于 actor 激活/停用的生命周期管理,以及唤醒 actor 的计时器和提醒器。 |
可观察性 | Dapr 可以发出度量,日志和跟踪以调试和监控 Dapr 和用户应用程序。 Dapr 支持分布式跟踪,通过使用 W3C 跟踪上下文标准和 Open Telemetry 发送到不同的监控工具,以方便诊断和服务于生产中的服务间调用。 |
密钥 | Dapr提供秘密管理,并与公有云和本地秘密存储集成,以检索秘密,用于应用代码。 |
Sidecar 架构
Dapr以 sidecar 架构的方式公开其API,可以是容器,也可以是进程,不需要应用代码包含任何 Dapr 运行时代码。 这使得 Dapr 与其他运行时的集成变得容易,同时也提供了应用逻辑的分离,改善可支持性。
托管环境
Dapr 可以托管在多种环境中,包括用于本地开发的自托管,或部署到一组 VM、Kubernetes 和边缘环境(如 Azure IoT Edge)。
自托管
在自托管模式下,Dapr 作为单独的 sidecar 进程运行,服务代码可以通过 HTTP 或 gRPC 调用该进程。 在自托管模式下,您还可以将 Dapr 部署到一组 VM 上。
Kubernetes 托管
在容器托管环境(如 Kubernetes)中,Dapr 作为 sidecar 容器运行,和应用程序容器在同一个 pod 中。
开发者语言 SDK 和框架
为了让不同的语言更加自然地使用 Dapr ,它还包括用于 Go、Java、JavaScript、.NET 和 Python 的语言特定 SDK。 这些 SDK 通过类型化的语言 API 而不是通过调用 http/gRPC API 来使用 Dapr 构建块中的功能,例如,保存状态,发布事件或创建Actor。 这使您能够以自己选择的语言编写无状态和有状态函数和 actors 的组合。 由于这些 SDK 共享 Dapr 运行时,因此您可以获得跨语言 actor 和功能支持。
SDK
注意: Dapr 是语言无关的, 除了 protobuf 客户端外,还提供 RESTful HTTP API 。
开发框架
Dapr 可以与任何开发框架集成。 下面是一些已经和 Dapr 集成的。
Web
例如,在 Dapr .NET SDK 中,您可以与 ASP.NET Core集成,它提供了有状态的路由控制器来响应来自其他服务的 pub/sub 事件。
在 Dapr Java SDK 中,您可以找到 Spring Boot 集成。
Dapr 很容易与Python Flask 和 node Express 集成。 请参阅 Dapr 快速开始 中的示例。
在 Dapr PHP-SDK 中,您可以使用 Apache, Nginx 或 Caddyserver。
Actor
Dapr SDK 支持 virtual actors ,这是简化并发、具有方法和状态封装的有状态对象,设计用于可扩展的分布式应用程序。
Azure Functions
Dapr 通过扩展与 Azure Functions 运行时集成,使函数可以与 Dapr 无缝交互。 Azure Functions 提供事件驱动的编程模型, 而 Dapr 提供了云原生的构建块。 通过此扩展,您可以为无服务器和事件驱动的应用程序同时提供两者。 更多信息请阅读 用于 Dapr 的 Azure Functions扩展 并访问 Azure Functions 扩展 仓库以试用示例。
Dapr 工作流
要使开发者能够轻松构建使用 Dapr 能力的工作流应用程序,包括诊断和多语言支持,您可以使用 Dapr 工作流。 Dapr 集成了诸如 Logic Apps 之类的工作流引擎。 更多信息请阅读 用于 Dapr 和 Logic Apps 的云原生工作流 并访问 Azure Functions 扩展 仓库以试用示例。
为运维设计
Dapr 有为 运维 做专门设计。 通过 Dapr CLI 安装的 服务仪表板提供了基于 Web 的 UI ,使您能够查看信息,查看日志以及 Dapr sidecar 的更多内容。
监控工具支持 提供 Dapr 系统服务和sidecar 的更深入的可见性,Dapr 的 可观测性能力 提供了对应用程序的深入了解,例如追踪和度量。
在任何地方运行
以自托管模式在开发者本地机器上运行 Dapr
Dapr 可以配置为在开发人员本地计算机上以 自托管模式 运行。 每个运行的服务都有一个 Dapr 运行时进程 (或 sidecar) ,配置为使用状态存储, pub/sub,绑定组件和其他构建块。
您可以使用 Dapr CLI 在本地机器上运行启用了 Dapr 的应用程序。 请使用 入门示例。
以 Kubernetes 模式运行 dapr
Dapr 可以配置为在任何 Kubernetes 集群 上运行。 在 Kubernetes 中, dapr-sidecar-injector
和 dapr-operator
服务提供一流的集成,以将 Dapr 作为 sidecar 容器启动在与服务容器相同的 pod 中 ,并为在集群中部署的 Dapr 组件提供更新通知。
dapr-sentry
服务是一个认证中心,它允许 Dapr sidecar 实例之间的相互 TLS 进行安全数据加密。 关于 Sentry
服务的更多信息请阅读 安全概述
在 Kubernetes 集群中部署和运行启用 Dapr 的应用程序非常简单,只需向 deployment 方案添加一些注解。 您可以 在这里 看到一些例子,在 Kubernetes 的入门示例中。 使用 Kubernetes 快速入门 来试试吧。
Last modified January 1, 0001