zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【愚公系列】2022年12月 Dapr分布式应用运行时-Dapr的简介

2023-02-19 12:19:44 时间

文章目录

一、Dapr的简介

Dapr官网:https://dapr.io/

1.Dapr的概念

Dapr 是一个可移植的事件驱动运行时,使任何开发人员都可以轻松构建可复原的、 在云和边缘上运行的无状态和有状态应用程序,并包含 语言和开发人员框架。利用挎斗架构的优势,Dapr 帮助 您可以应对构建微服务带来的挑战,并使代码平台不可知。

2.Dapr的功能

从上图我们可以看到,使用Dapr开发的微服务应用理论上可以部署到任意的云提供商、边缘设备、虚拟机、Service Fabric集群、Kubernetes集群里面。

并且在如下方面(称之为Building Block)进行外部依赖的抽象:

  • 服务调用:Dapr 服务调用构建块处理 FineCollectionService 和 VehicleRegistrationService 之间的请求/响应通信。因为该调用是检索完成操作所需数据的查询,所以此处可以接受同步调用。 服务调用构建基块提供服务发现。 FineCollection服务不再需要知道 VehicleRegistration 服务所在的位置。 如果 VehicleRegistration 服务脱机,它还会实现自动重试。
  • 发布 & 订阅:发布和订阅构建基块可处理异步消息传送,以便将 TrafficControl 服务中的超速违规信息发送到FineCollectionService。 此实现能分离 TrafficControl 和 FineCollection 服务。 如果FineCollectionService 暂时不可用,数据会在队列中累积,并在稍后恢复处理。 RabbitMQ是当前的消息代理,用于将消息从生成方传输到使用方。 因为 Dapr 发布/订阅构建基块将消息代理抽象化,所以开发人员无需了解RabbitMQ 客户端库的详细信息。 切换到另一个消息代理时,不需要更改代码,只需完成配置。
  • 状态管理:TrafficControl 服务使用状态管理构建基块将车辆状态持久保存服务之外的 Redis 缓存中。与发布/订阅一样,开发人员无需了解 Redis 特定的 API。 切换到另一个数据存储时,不需要更改代码。
  • 输出绑定:FineCollection 服务通过电子邮件将罚款信息发送给超速车辆的车主。 SMTP 的 Dapr 输出绑定使用 SMTP协议将电子邮件传输抽象化。
  • 输入绑定:CameraSimulation 使用 MQTT 协议将包含模拟车辆信息的消息发送至 TrafficControl 服务。它使用 .NET MQTT 库将消息发送到 Mosquitto,Mosquitto 是轻量型的 MQTT 代理。TrafficControl 服务使用 MQTT 的 Dapr 输入绑定来订阅 MQTT 代理并接收消息。
  • 机密管理:FineCollectionService 需要用于连接到 SMTP 服务器的凭据以及内部使用的罚款计算器组件的许可证密钥。它使用机密管理构建基块来获取凭据和许可证密钥。
  • 执行组件:TrafficControlService 具有基于 Dapr 执行组件的替代实现。 在此实现中,TrafficControl 服务会针对入口摄像头记录的每个车辆创建一个新的执行组件。 车辆的牌照号码构成唯一的执行组件 ID。执行组件封装车辆状态,并将其持久保存在 Redis 缓存中。 当出口摄像头记录到车辆时,会调用该执行组件。 执行组件随后会计算平均车速,并可能得出超速违规结果。