【发布时间】:2019-01-26 03:53:24
【问题描述】:
假设我有这样的工作流程
(1) Check for latest commit in a GitHub repo
|
|
(2) Is new commit?
/ \
No / \ Yes
/ \
/ \
End \
\
\
(3) Download all files
/ | \
/ | \
(4i) Process file i . Process file N
\ . /
\ . /
\ . /
\ . /
\ . /
End
我想拥有以下微服务:
- (A) 提交检查器
- (B) 文件下载器
- (C) 文件处理器
我的问题是这些微服务中的每一个是否应该是顺序工作流中的一个链接,或者这些微服务是否应该只包含功能并且一个单独的“无所不知”微服务来执行工作流。
在第一种情况下,它可能看起来像
A: (1),(2) ====> B:(3) ====> C:(4i),(4ii),...,(4N)
每个链接在队列中写入一条消息,该消息被下一个链接接收。
因为 (2) 在 A 中,这意味着 A 正在决定是否调用 B。我想您可以说服务是紧密耦合的。
在我建议的其他实现中,将有一个单独的服务 X 来执行控制流并简单地将数据插入 A、B、C,这将执行单个任务,例如
A: Get latest commit
B: Download all files by commit
C: Process single file
然后 X 将拥有/执行的逻辑
- (2),即决定是终止工作流还是进行下一步
- 决定并行处理下载的文件
哪个实现更好?
我的另一个问题是关于存储的。 Is new commit? 部分意味着我保留了提交记录,以便我可以判断我检查的内容是否是我以前没有检查过的。 谁应该保存提交记录?应该考虑在 A 的存储中还是单独的“工作流存储”中?
【问题讨论】:
标签: design-patterns architecture workflow microservices soa