Dapr 介绍

Dapr是一个可移植的、由事件驱动的运行时,使开发人员可以轻松构建在云和边缘上运行并包含多种语言和开发人员框架的弹性、微服务无状态和有状态应用程序。

Dapr 的构建块

服务调用

Dapr服务调用构建块是应用程序可以使用gRPC或HTTP这样的标准协议来发现并可靠地与其他应用程序通信。

Dapr的服务调用如何工作的总览图如下:

服务A对服务B发起HTTP/gRPC的调用。Dapr使用在给定主机平台上运行的名称解析组件发现服务B的位置。Dapr将消息转发至服务B的Dapr Sidecar。注: Dapr Sidecar之间的所有调用考虑到性能都优先使用gRPC。仅服务与Dapr Sidecar之间的调用可以是HTTP或gRPC。服务B的Dapr Sidecar将请求转发至服务B上的特定端点(或方法)。服务B随后运行其业务逻辑代码。服务B发送响应给服务A。响应将转至服务B的Sidecar。Dapr将消息转发至服务A的Dapr Sidecar。

消息的发布和订阅

Dapr的消息发布和订阅构建块提供了平台无关的API框架来发送和接收消息。

发布服务器将消息发送到消息代理,订阅服务器绑定到消息代理上的订阅。消息代理将消息的副本转发给相关的订阅。

Dapr发布和订阅构建块的特点是支持"至少一次保证"语义,即发布消息后,该消息将至少传递到任何相关订阅服务器一次。如果服务只能处理一次消息,则需要提供幂等性检查,确保不会多次处理同一消息。

状态管理

Dapr状态管理构建块解决了在分布式应用程序中跟踪状态存在的问题,例如应用程序可能需要不同类型的数据存储,访问和更新数据时可能需要不同的一致性级别,多个用户可以同时更新数据、需要冲突解决等1。

Dapr状态管理可以简化跟踪状态,而无需依赖关系或第三方存储SDK上的学习曲线,它提供键/值API,此功能不支持关系数据存储或图形数据存储。Dapr数据存储被建模为组件,可以在不更改代码的情况下更换它。例如:MySQL、Redis、Azure CosmosDB等,可配置的状态存储行为Dapr允许开发人员将额外的元数据附加到状态操作请求中,用以描述请求的处理方式,如:并发要求、一致性要求等。

事件驱动

Dapr事件驱动构建块允许应用程序以事件驱动的方式进行交互,通过监听事件来触发应用程序的不同部分进行相应的处理。

Dapr的事件驱动机制,类似于消息传递机制,但消息传递机制一般用于不同进程或线程之间的通信,而事件驱动机制侧重于不同组件之间的交互。

Dapr的事件驱动机制,也与发布/订阅模式有所关联。开发者可以定义事件类型,并注册相应的事件处理器,当事件发生时,Dapr会调用已注册的事件处理器进行处理。此外,Dapr还提供了对事件的可扩展支持,允许开发者使用不同的消息队列技术(如RabbitMQ、Kafka等)来传递事件。

服务发现

Dapr服务发现构建块允许应用程序在分布式环境中查找和发现其他应用程序或服务。

Dapr的服务发现机制,主要通过以下方式实现:

  • Dapr Sidecar:Dapr Sidecar是Dapr的核心组件之一,它与应用程序一起部署,并负责处理与Dapr API的交互。Dapr Sidecar可以捕获其他服务的注册信息,并注册本服务的地址信息,以实现服务发现的功能。
  • Dapr注册中心:Dapr注册中心是一个分布式服务注册和发现的组件,它负责管理服务的注册信息。当服务启动时,它会将自己的信息注册到Dapr注册中心,当服务停止时,它会自动从Dapr注册中心注销。其他服务可以通过查询Dapr注册中心来发现可用的服务。
  • Dapr API:Dapr API是Dapr的核心接口之一,它提供了服务发现的功能。通过调用Dapr API,应用程序可以获取其他服务的地址信息,从而实现服务之间的通信。

总之,Dapr服务发现构建块可以帮助开发者在分布式环境中快速、准确地查找和发现其他服务,提高分布式系统的可用性和可维护性。

断路器

Dapr断路器构建块允许在分布式系统中实现故障的自动检测和恢复。

Dapr断路器基于OSSpine的断路器模式,通过在应用程序中引入熔断机制,当系统出现故障或异常情况时,可以自动触发熔断机制,避免故障对整个系统的影响1。

Dapr断路器构建块主要通过以下方式实现:

  • Dapr Sidecar:Dapr Sidecar是Dapr的核心组件之一,它与应用程序一起部署,并负责处理与Dapr API的交互。当应用程序出现故障或异常时,Dapr Sidecar可以捕获错误信息,并触发熔断机制,避免故障对整个系统的影响。
  • Dapr API:Dapr API是Dapr的核心接口之一,它提供了断路器的功能。通过调用Dapr API,应用程序可以配置断路器的行为,例如设置熔断阈值、熔断时间等参数。

总之,Dapr断路器构建块可以帮助开发者在分布式系统中快速、准确地检测和恢复故障,提高系统的可用性和稳定性。

限流

Dapr限流构建块允许在分布式系统中实现流量控制,以保护系统免受过度请求的影响。

Dapr限流基于令牌桶算法,通过限制单位时间内通过的请求数量来控制流量。Dapr限流构建块可以在分布式系统的不同层次进行实现,例如在客户端、网关层、业务逻辑层等。

Dapr限流构建块主要通过以下方式实现:

  • Dapr Sidecar:Dapr Sidecar是Dapr的核心组件之一,它与应用程序一起部署,并负责处理与Dapr API的交互。Dapr Sidecar可以根据一定的策略,限制单位时间内通过的请求数量,从而保护系统免受过度请求的影响。
  • Dapr API:Dapr API是Dapr的核心接口之一,它提供了限流的功能。通过调用Dapr API,应用程序可以配置限流策略,例如设置令牌桶的容量、令牌生成速率等参数。

总之,Dapr限流构建块可以帮助开发者在分布式系统中快速、准确地实现流量控制,保护系统免受过度请求的影响,提高系统的可用性和稳定性。