【问题标题】:Workflow engine with events带有事件的工作流引擎
【发布时间】:2022-07-29 02:39:18
【问题描述】:
我正在研究一个工作流引擎来组织一些系统流程。
作为研究的一部分,我想构建一个小型工作流 poc:
工作流应该监听一些事件然后开始(假设客户 A 创建了)
流程是:
- 为客户 A 发布工作消息
- 收到客户 A 的工作消息响应
- 为客户 A 发布第二条工作消息
- 收到客户 A 的第二条工作消息响应
- 结束工作流
假设同时存在多个工作流,我如何确保每个响应都进入正确的工作流?
我想到了一些解决方案(我认为都不够好)
- 在 Rabbit 中为每个工作流创建动态队列,并作为消息的一部分添加响应队列
- 使用 Kafka 并阅读每条消息,丢弃不相关的消息。
- 响应将发布到工作流引擎的 api。
我很想听听更好的建议。
【问题讨论】:
标签:
architecture
workflow
event-driven-design
【解决方案1】:
这是一个有趣的问题,但它非常通用,分析潜在解决方案的正确方法是考虑多个方面:
- 您要经营的规模是多少?
- 创建工作流的频率是多少?例如,这些消息类似于用户个人资料更新或与您的网站的一般用户交互?如果工作流每天触发一次,与工作流每秒触发一次相比,您需要一个完全不同的架构。
- 您希望系统是多租户的吗?如果是这种情况,您需要考虑一些隔离策略,以便一个客户的工作流程不会影响其他客户的工作流程。
我认为,就像在任何架构决策中一样,您的目标是在可扩展性和成本之间取得良好的平衡,我相信考虑以上几点将有助于您在权衡中导航。
为了成本效益,我相信如果您检查基于云的排队服务(例如 Amazon SQS)会有所帮助,因为您只需为数据传输付费,而不为队列本身付费。
您还可以查看Amazon Lambda 以了解无服务器计算,这对于事件处理来说同样具有成本效益,因为您无需为始终启动并运行的虚拟机付费。