Fab*_*eco 5 architecture sql-server distributed message-queue distributed-caching
我正在重构一个将进行大量计算的分析系统,我需要一些关于可能的架构设计的想法,以解决我面临的数据一致性问题.
当前架构
我有一个基于队列的系统,其中不同的请求应用程序创建最终由工作者使用的消息.
每个" 请求应用程序 "将大型计算细分为较小的部分,这些部分将被发送到队列并由工作人员处理.
当所有部分都完成后,原始的"请求应用程序"将合并结果.
此外,工作者使用来自集中式数据库(SQL Server)的信息来处理请求(重要:工作人员不会更改数据库上的任何数据,只会消耗它).

问题
好.到现在为止还挺好.当我们包含更新数据库信息的Web服务时,就会出现问题.这可能在任何时候发生,但至关重要的是,源自相同"请求应用程序"的每个"大计算"在数据库上看到相同的数据.
例如:
我不能让工人W2使用数据库的状态S1.为了使整个计算保持一致,它应该使用先前的S0状态.
思考
一种锁定模式,用于防止Web服务器在工作者消耗数据时更改数据库.
在数据库和worker(通过req.app控制db缓存的服务器)之间创建新层
我正在等待第二个解决方案,但对此并不十分自信.
有什么好主意吗?我设计错了,还是错过了什么?
OBS:
谢谢大家的帮助。
因为我相信这个问题在其他场景中可能很常见,所以我想分享我们选择的解决方案。
更彻底地思考这个问题,我明白了它的本质。
现在计算已经发展为分布式,我只需要将我的缓存也发展为分布式即可。
为了做到这一点,我们选择使用内存数据库(哈希值),部署为单独的服务器。(在本例中是 Redis)。
现在,每次我开始一项工作时,我都会为该工作创建一个 ID 并将其传递给他们的消息
当每个工作人员想要从数据库中获取一些信息时,它会:
在作业结束时,我清除与作业 ID 关联的所有哈希值。