lijian 4 лет назад
Родитель
Сommit
e9d7d52690

BIN
pkg/ruleEngine/assets/1614828236440.jpg


BIN
pkg/ruleEngine/assets/trans.jpg


+ 41 - 0
pkg/ruleEngine/readme.md

@@ -0,0 +1,41 @@
+# 规则引擎设计文档
+
+## 实现模型
+规则引擎底层实现基于actor模型设计
+
+Actor模型有两种任务调度方式:基于线程的调度、基于事件的调度
+
+基于线程的调度
+为每个Actor分配一个线程,在接收一个消息时,如果当前Actor的邮箱为空则会阻塞当前线程。基于线程的调度实现较为简单,但线程数量受到操作的限制,现在的Actor模型一般不采用这种方式。
+基于事件的调度
+
+事件可以理解为任务或消息的到来,而此时才会为Actor的任务分配线程并执行。
+
+因此,可以把系统中所有事物都抽象成为一个Actor:
+
+Actor的输入是接收到的消息
+
+Actor接收到消息后处理消息中定义的任务
+
+Actor处理完成任务后可以发送消息给其它Actor
+
+### actor模型原理图
+![avatar](assets/1614828236440.jpg)
+
+
+### 内部架构部件
+
+具体的消息流转过程见下图
+
+![avatar](assets/trans.jpg)
+
+
+基于以上理论,规则引擎抽象出了4类actor `AppActor`、`TenantActor`、`RuleChainActor`、`RuleNodeActor`,除AppActor之外, 其他Actor都有初始化它的父级Actor,因此它自身的生命周期全部由父级Actor管理。
+
+* 应用actor(AppActor):负责整个规则引擎核心事件的调度,属于服务级别的actor,对外与消息中间件(内部目前实现了基于rabbitmq的消息队列)通信,对内则根据消息内的元数据,路
+由到相应的租户Actor。
+* 租户Actor(TenantActor):由AppActor初始化时创建,平台上每个厂商会映射到这里的TenantActor中,AppActor初始化时会查询平台上所有的厂商并为每个厂商创建一个TenantActor,
+标识为TenantId(对应平台中的VendorId),租户Actor的主要作用是起到规则链隔离,可以支持单独厂商的规则链控制。TenantActor初始化时会查询当前厂商所有启用的规则链,并创建对应的RuleChainActor。
+* 规则链Actor(RuleChainActor): 由TenantActor创建,负责管理一个规则链的行为,自身初始化时,会创建当前链上所有规则节点的Actor。同时管理规则节点Actor的生命周期。
+* 节点Actor(RuleNodeActor):由RuleChainActor创建,负责某类规则节点的消息处理。对应当前规则链上的节点。
+