Dapr&&Actor说明文档
本文档对Dapr下Actor的概念、特性、使用方法做出说明。
1 Dapr概念
Dapr是跨语言的、使用 sidecar 架构、事件驱动的、可以与service mesh共存、专注于提供构建基块(服务调用、网络安全和分布式跟踪等功)、使得开发人员更容易构建微服务的、可运行在云平台或边缘计算中的开发框架。
1.1 Sidecar架构:
Dapr以 Sidecar架构的方式公开其API,可以是容器,也可以是进程,不需要应用代码包含任何 Dapr 运行时代码。 这使得 Dapr 与其他运行时的集成变得容易,在应用逻辑层面做了隔离处理,提高了可扩展性。
应用程序与其他所有中间件(例如MySQL、Redis、Kafka)的交互、分布式的追踪等一系列与非业务功能的代码均集成在Sidecar当中,业务代码只需要与Sidecar沟通,而上述功能的具体实现完全又Sidecar实现,使得业务代码与基础设施代码完全解耦。无论是上云还是其他平台(win->linux or linux ->win),只需要修改对应的Sidecar,而业务代码完全不需要修改即可轻松实现。
2 Actor概念
Actors 为最低级别的“计算单元”,该单元接收消息并一次处理消息,而不进行任何类型的并行或线程处理。当代码处理一条消息时,它可以向其他参与者发送一条或多条消息,或者创建新的 Actors。 底层 运行时(Dapr)将管理每个 actor 的运行方式、时机和位置,并在 Actors 之间传递消息。
2.1 使用场景
- 问题空间涉及大量(数千或更多) 的独立和孤立的小单位和逻辑。
-
要处理单线程对象,这些对象不需要外部组件的大量交互,例如在一组 Actors 之间查询状态。
-
Actor 实例不会通过发出I/O操作来阻塞调用方。
2.2 特性
- 大量 Actors 可以同时执行且相互独立执行
对持有不同ActorId的Actor在执行时相对独立、互不影响。
- 单个Actor是单线程执行
对持有相同ActorId的Actor在执行时严格按照单线程执行,相当于再执行前拿了一把分布式锁。
2.3 工作原理
Dapr启动app时,Sidecar调用Actors获取配置信息,之后Sidecar将Actors的信息发送到 安置服务(Placement Service),安置服务会将不同的Actor类型根据其Id和Actor类型分区,并将Actor信息广播到所有dapr实例。
在客户端调用某个Actor时,安置服务会根据其Id和Actor类型,找到其所在的dapr实例,并执行其方法。
### 2.4 Actor生命周期
Actor不需要显式创建或销毁。 Dapr Actors 运行时在第一次接收到该 actor ID 的请求时自动激活 actor。 如果 actor 在一段时间内未被使用,那么 Dapr Actors 运行时将回收内存对象。 如果以后需要重新启动,它还将保持对 actor 的一切原有数据。
2.5 使用
Http方式调用Actor方法
POST/GET/PUT/DELETE http://localhost:3500/v1.0/actors/<actorType>/<actorId>/method/<method>
参数解释如下:
参数名 | 描述 |
---|---|
actorType | 执行组件类型 |
actorId | 要调用的特定参与者的id |
method | 要调用actor的方法 |
在使用上需要注意:单个Actor实例一次不能处理多个请求
附录:
Dapr环境搭建
Centos7下k8s集群里初始化Dapr:https://blog.csdn.net/qicaixiao/article/details/126402108
Actor代码demo案例
1、Actor for Java 官网demo:https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/actors
2、Actor for .net官网demo:https://github.com/dapr/dotnet-sdk/tree/master/examples/Actor
3、Actor for .net第三方demo:https://www.tnblog.net/hb/article/details/6725
k8sYAM
Lannotations规范:https://docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-annotations/
k8s集群能力要求
k8s集群能力要求:https://docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-production/