我们正在开发一个应该“运行”的系统。分布式系统上的工作。
当接受作业时,他们需要先经过管道才能在终端系统上执行。
我们已经决定采用微服务架构,但有一件事困扰着我,我不确定什么是最佳做法。
当一个作业被接受时,它将首先被保存到一个数据库中,然后 - 管道中的每个微服务都会做一些额外的工作来准备执行作业。
我希望在管道中的每个此类工作站上更新持久化数据,以反映作业的实际状态或其在管道中的状态。
此外,在终端系统上执行作业时 - 其状态也应该更新。
在每个电台更新数据库(工作状态)方面的最佳做法是什么:
管道中的每个此类站点(微服务)直接访问数据库并更新作业状态
还有另一个公开数据(REST)并作为DAL的微服务,管道中的每个微服务都通过此服务更新作业的状态
其他?....
帮助/建议将受到高度赞赏。
Thanx很多!!
答案 0 :(得分:1)
添加@Anunay和@Mohamed Abdul Jawad所说的内容
我会考虑将管道中的工作单元中的状态写入视图(表/缓存(仅插入)),您可以使用消息传递或只是在该视图中插入一行并拥有该状态的读者根据某些逻辑(日期或状态或复合键)获取正确的状态。由于此视图并非真正归任何域名服务所有,因此任何读者都可以使用它(只读)来使用...
答案 1 :(得分:1)
还要考虑SAGA模式
Saga是一系列本地事务,其中每个事务都在单个服务中更新数据。第一个事务由对应于系统操作的外部请求启动,然后每个后续步骤由前一个事件完成触发。
http://microservices.io/patterns/data/saga.html
https://dzone.com/articles/saga-pattern-how-to-implement-business-transaction
https://medium.com/@tomasz_96685/saga-pattern-and-microservices-architecture-d4b46071afcf
答案 2 :(得分:1)
如果您想对工作流程进行编码:
Micorservice A接受作业和命令以更新作业 Micorservice B为作业提供阅读模型
基于JobCreatedEvents使用一些消息传递队列并处理并通过队列管道更新作业,并通过管道中的每个节点继续更新JobStatus。
我假设您了解队列和消费者的事情。
我自己是Camunda(工作流程引擎)的新手,可能用得不完全确定
答案 3 :(得分:0)
不建议访问数据库的多个微服务。在这里,您需要触发每个服务,然后更新数据,然后调用下一个服务。
您确实需要一种机制来协调服务。工作流引擎可能符合要求。
但我建议使用事件驱动系统。我可能会对您拥有的数据知之甚少。有一个服务可以为您提供基本的数据和其他具有更改数据逻辑的服务(我现在想问一下为什么您希望不同的服务来改变状态,如果它是一个商业需求,它的罚款)一次你得到写的数据只是创建一个服务可以订阅并对其作出反应的事件。
这将允许您以后轻松地向管道添加更多状态。 您将需要一项服务来管理事件队列。
就记录事件的状态而言,可以通过记录事件轻松完成。
如果您选择工作流程路线,您可以使用Amazon SWF或Camunda,或者那里有很多选项。 如果要参加活动路线,您需要查看mciroservies中的事件驱动系统。
答案 4 :(得分:0)
非常不推荐在微服务之间访问某些共享数据库,因为这会违反微服务架构的基本规则。
微服务必须是自治的并保持自己的逻辑和数据
还要实现一个良好的微服务设计,你应该迷失你的微服务