Dapr是一个可移植,事件驱动的运行时。它使开发人员简单地去构建运行在云和edge上弹性、无状态和有状态的应用,并且包含多种语言和开发人员框架。
Any language, any framework, anywhere
今天,我们正在经历一波云应用浪潮。开发人员熟悉web 数据库应用程序架构(例如经典的3层设计),但不熟悉本质上是分布式的微服务应用程序架构。成为分布式系统专家很难,你也不应该这样做。开发人员希望专注于业务逻辑,同时依靠平台为他们的应用程序注入伸缩性、弹性、可维护性、弹性和其他本地云架构的属性。
这就是Dapr的用武之地。Dapr将构建微服务应用程序的最佳实践编入开放的、独立的构建块中,使您能够使用自己选择的语言和框架构建可移植的应用程序。每个构建块都是完全独立的,您可以在应用程序中使用其中的一个、一些或全部。
此外,Dapr与平台无关,这意味着您可以在任何Kubernetes集群和其他与Dapr集成的托管环境上本地运行应用程序。这使您能够构建可以在云和edge上运行的微服务应用程序。
Microservice building blocks for cloud and edge
在设计微服务应用程序时需要考虑很多因素。在构建开发人员可以以标准方式使用并部署到任何环境的微服务应用程序时,Dapr为通用功能提供了最佳实践。它通过提供分布式系统构建块来实现这一点。
每个构建块都是独立的,这意味着您可以在应用程序中使用其中的一个、部分或全部。在这个dpr的初始版本中,提供了以下构建模块:
构建块(Building Block) | 描述 |
---|---|
Service-to-Service invocation (服务间调用) | 弹性的服务间调用,支持方法调用,包括重试,无论远程服务位于受支持的托管环境中哪个位置 |
State management (状态管理) | 有了用于存储键值对的状态管理,就可以在应用程序中轻松编写无状态服务和长时间运行的、高可用的有状态服务。状态存储是可扩展的,包括Azure CosmosDB、Azure SQL Server、PostgreSQL、AWS DynamoDB或Redis等。 |
Publish and subscribe (发布和订阅) | 发布事件以及订阅主题 |
Resource bindings (资源绑定) | 带有触发器的资源绑定进一步构建在事件驱动的架构上,通过接受和发送事件到任何外部源(例如数据库、队列、文件系统等),以实现伸缩与弹性。 |
Actors | 一种用于有状态和无状态对象的模式,通过方法和状态封装使并发变得简单。 Dapr在其参与者运行时中提供了许多功能,包括并发性、状态、参与者激活/去激活的生命周期管理以及唤醒参与者的计时器和提醒。 |
Observability (可观察性) | Dapr 传输指标、日志和跟踪,以调试和监视Dapr和用户应用程序。Dapr支持分布式跟踪,使用W3C跟踪上下文标准和将开放遥测技术发送到不同的监控工具,从而方便地诊断和服务生产中的服务间调用。 |
Secrets (隐私) | Dapr提供隐私管理,并与公共云和本地秘密存储集成,以检索用于应用程序代码的隐私 |
Sidecar architecture
Dapr将其API公开为sidecar体系结构,可以作为容器、也可以作为进程,不需要应用代码包含任何的dapr运行时代码。
Hosting Environments
Dapr可以托管寄宿在多个环境下,包括用于本地开发的自托管,或是部署到VM,K8S、Azure IOT edge等环境中。
Self hosted
在自托管模式下,Dapr作为隔离的side-car进程运行,你的服务代码可以通过HTTP或是gRPC调用。在自托管模式下,你也可以将Dapr部署在一组VM上。
Running Dapr on a local developer machine in self hosted mode
可以将Dapr配置为在本地开发人员机器上以自托管模式运行。每个正在运行的服务都有一个Dapr运行时进程(或sidecar),它被配置为使用状态存储、发布/订阅、绑定组件和其他构建块。您可以使用Dapr CLI在本地机器上运行启用了Dapr的应用程序。
Kubernetes hosted
在容器托管环境下,例如K8S,Dapr作为side-car容器运行与应用容器在相同的pod上。
Running Dapr in Kubernetes mode
可以将Dapr配置为在任何Kubernetes集群上运行。在Kubernetes中,Dapr-sidecar注入器和Dapr-operator 服务提供了一流的集成,将Dapr作为一个sidecar容器作为服务容器在同一个pod中启动,并提供Dapr组件更新到集群中的通知。Dapr -sentry服务是一个证书颁发机构,它支持Dapr sidecar实例之间的相互TLS,以实现安全数据加密。