Dapr 中的 Actor 编程模型详解
1. Actor 编程模型概述
Actor 编程模型是一种直观的模型,它将状态和操作封装为一个独立单元,这与熟悉面向对象编程(OOP)范式的人产生了很好的共鸣。然而,如果不注意该编程模型的微妙含义,可能会导致误用。
1.1 Actor 模型的误用
- 场景示例 :以用 Actor 模拟道路上的汽车为例,每辆车维护自己的状态(如行驶速度)。起初,Actor 模型似乎很合适,汽车启动时创建 Actor,速度变化时调用
ChangeSpeed(speed)
方法更新状态。但当需要创建所有行驶中汽车状态的快照时,若直接查询每个 Actor 并聚合数据,会产生以下问题:- 同时调用成百上千个 Actor 是缓慢且性能不佳的操作。
- 查询 Actor 状态会阻塞其他更新车辆速度的调用,暂停所有活跃的 Actor 实例。
- 另一种常见误用 :每个 Actor 保存大量数据。数据量越大,调用 Actor 的 I/O 操作完成所需时间越长,会导致 Actor 长时间锁定,造成瓶颈。
为避免这些问题,如果需要多个 Actor 数据的聚合视图,最好查询底层状态存储。若不可行,建议每个 Actor 将数据保存到外部数据库,以便查询和聚合。
2. Dapr 与 Actor
2.1 Dapr 的 Actor 模型特点
Dapr 提供了云原生、弹