运动鞋并行处理

时间:2018-05-14 04:56:27

标签: ruby-on-rails rabbitmq sneakers

我有两个应用程序App 1和App 2.两个都是Rails应用程序。应用程序1从用户收集数据,这些收集的数据需要同步到应用程序2.我使用RabbitMQ和Sneakers(带有5个工作进程)进行应用程序之间的同步过程。每当App 1中有更新时,作业就会排队到RabbitMQ服务器。从那里,Sneakers处理这些作业并将数据存储在App 2数据库中。

用于在两个应用程序中存储数据的架构如下。

App 1

作者有很多书。

作者表:

id  name
1   Kruze
2   Jiht
3   Rama

书桌:

id  name    author_id
1   Book A  1
2   Book B  2
3   Book C  1

App 2

作者表:

id  name    original_id books
1   Kruze   1           {'1':{'id':1, 'name':'Book A'}, '3':{'id':3, 'name':'Book C'}}
2   Rama    3           {}
3   Jiht    2           {'2':{'id':2, 'name':'Book B'}}

此处original_id列是App 1作者记录ID,books列是包含作者所有书籍信息的哈希。

我在这里面临的问题是,当多个用户同时在同一作者的书籍(创建或更新)上进行多次更新时,有多个作业进入RabbitMQ服务器。在App 2中,Sneakers并行处理这些工作(因为在App 2中运行了五个运动鞋流程,所以一次完成五个工作)。每个运动鞋过程都需要不同的时间才能完成。所以最后,App 2中存在错误的数据。

Enqueue Order   Commit Order    Process
1               1               1
2               2               2
3               5               5
4               6               1
5               4               4
6               3               3
7               7               2
8               10              5
9               9               4
10              8               3

但是当只有一个Sneakers流程时,不会发生此问题。

我的问题:有没有办法克服这个不正确的数据问题?

0 个答案:

没有答案