2

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

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

应用程序 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

应用程序 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 并行处理这些作业(一次 5 个作业,因为在 App 2 中运行了 5 个 Sneakers 进程)。每个运动鞋流程都需要不同的时间来提交。所以最后,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 进程时,就不会出现这个问题。

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

4

0 回答 0