Dapr是一个可移植,事件驱动的运行时。它使开发人员简单地去构建运行在云和edge上弹性、无状态和有状态的应用,而且包含多种语言和开发人员框架。html
今天,咱们正在经历一波云应用浪潮。开发人员熟悉web +数据库应用程序架构(例如经典的3层设计),但不熟悉本质上是分布式的微服务应用程序架构。成为分布式系统专家很难,你也不该该这样作。开发人员但愿专一于业务逻辑,同时依靠平台为他们的应用程序注入伸缩性、弹性、可维护性、弹性和其余本地云架构的属性。web
这就是Dapr的用武之地。Dapr将构建微服务应用程序的最佳实践编入开放的、独立的构建块中,使您可以使用本身选择的语言和框架构建可移植的应用程序。每一个构建块都是彻底独立的,您能够在应用程序中使用其中的一个、一些或所有。数据库
此外,Dapr与平台无关,这意味着您能够在任何Kubernetes集群和其余与Dapr集成的托管环境上本地运行应用程序。这使您可以构建能够在云和edge上运行的微服务应用程序。安全
在设计微服务应用程序时须要考虑不少因素。在构建开发人员能够以标准方式使用并部署到任何环境的微服务应用程序时,Dapr为通用功能提供了最佳实践。它经过提供分布式系统构建块来实现这一点。架构
每一个构建块都是独立的,这意味着您能够在应用程序中使用其中的一个、部分或所有。在这个dpr的初始版本中,提供了如下构建模块:并发
构建块(Building Block)框架 |
描述分布式 |
Service-to-Service invocation (服务间调用)ide |
弹性的服务间调用,支持方法调用,包括重试,不管远程服务位于受支持的托管环境中哪一个位置微服务 |
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提供隐私管理,并与公共云和本地秘密存储集成,以检索用于应用程序代码的隐私 |
Dapr将其API公开为sidecar体系结构,能够做为容器、也能够做为进程,不须要应用代码包含任何的dapr运行时代码。
Dapr能够托管寄宿在多个环境下,包括用于本地开发的自托管,或是部署到VM,K8S、Azure IOT edge等环境中。
在自托管模式下,Dapr做为隔离的side-car进程运行,你的服务代码能够经过HTTP或是gRPC调用。在自托管模式下,你也能够将Dapr部署在一组VM上。
能够将Dapr配置为在本地开发人员机器上以自托管模式运行。每一个正在运行的服务都有一个Dapr运行时进程(或sidecar),它被配置为使用状态存储、发布/订阅、绑定组件和其余构建块。您可使用Dapr CLI在本地机器上运行启用了Dapr的应用程序。
在容器托管环境下,例如K8S,Dapr做为side-car容器运行与应用容器在相同的pod上。
能够将Dapr配置为在任何Kubernetes集群上运行。在Kubernetes中,Dapr-sidecar注入器和Dapr-operator 服务提供了一流的集成,将Dapr做为一个sidecar容器做为服务容器在同一个pod中启动,并提供Dapr组件更新到集群中的通知。Dapr -sentry服务是一个证书颁发机构,它支持Dapr sidecar实例之间的相互TLS,以实现安全数据加密。