Dapr分布式应用运行时核心功能详解
Dapr分布式应用运行时核心功能详解
Dapr是一个优秀的分布式应用运行时,它提供了多种功能来解决微服务架构中的常见问题。本文将详细介绍Dapr的几个核心功能,包括发布与订阅、服务调用、状态管理、绑定和计算单元。
发布与订阅
在微服务架构中,一些对实时性要求不高的场景可以采用发布与订阅的方式来实现异步通信。Dapr初始化安装的Redis很容易就能实现简单的队列功能,不过对于小型项目来说还可以使用,如果是大吞吐量的高并发系统还是选用更专业的RabbitMQ或者Kafka来做消息队列。
服务调用
微服务之间实时调用的场景Dapr提供了Service Invocation功能来满足。 Dapr支持使用HTTP或者gRPC来调用,我们一起来看看当ServiceA通过Service Invocation来调用ServiceB会发生哪些事情?
- Service A发起调用,调用将转向到Dapr的本地边车进程。
- Dapr通过命名解析组件来获取ServiceB的地址。
- Dapr将消息转发至B的边车进程。
- B的边车进程转发消息至特定方法,然后B执行业务逻辑代码。
- B回复响应至B的边车。
- Dapr转发响应至A。
- A获取响应。
状态管理
在分布式微服务框架中共享一致的数据是很重要的功能。Dapr通过State Management提供了对一致数据的读写功能。比如一些实际案例中的购物车信息,用户状态会话信息等。
绑定
使用这个功能Dapr允许微服务接受第三方系统的消息以及主动与第三方系统交互。官方给的Demo是微服务接收一个Cron表达式来驱动任务按照表达式来定时执行。
计算单元
计算单元理解起来有点困难,我们先来看看官方给的解释:
The actor pattern describes actors as the lowest-level “unit of computation”. In other words, you write your code in a self-contained unit (called an actor) that receives messages and processes them one at a time, without any kind of concurrency or threading.
While your code processes a message, it can send one or more messages to other actors, or create new actors. An underlying runtime manages how, when and where each actor runs, and also routes messages between actors.
A large number of actors can execute simultaneously, and actors execute independently from each other.
参与者模式将参与者描述为最低级别的“计算单元”。换句话说,您在一个独立的单元(称为参与者)中编写代码,该单元接收消息并一次处理一条消息,而无需任何类型的并发或线程。
当您的代码处理一条消息时,它可以向其他参与者发送一条或多条消息,或创建新的参与者。底层运行时管理每个参与者的运行方式、时间和地点,并在参与者之间路由消息。大量参与者可以同时执行,并且参与者彼此独立执行。
以下场景适合应用计算单元:
- 功能涉及大量(数千或更多)小型、独立且孤立的状态和逻辑单元,比如聊天室
- 希望使用不需要外部组件进行大量交互的单线程对象,包括跨一组参与者查询状态
- 参与者实例不会通过发出 I/O 操作来阻止具有不可预测延迟的调用者