首页 > 解决方案 > 竞争条件:竞争外部资源

问题描述

一、问题背景

我正在开发一个在后台运行三个实例的项目。他们都在争夺外部资源。为了更具体,假设每个实例代表一个library。他们正在争夺资源book。三个进程在三个不同的主机上运行。没有可用的共享变量或全局锁。该项目的目的是维护预订过程。

1.1library实体

1.2book实体

1.3Reservation

2.比赛条件

多个图书馆实例可能会尝试同时预订一本书。由于book实体没有提供可靠的方法来检查一本书是否被保留,library因此必须处理竞争条件。

3. 提出的解决方案

3.1 在library侧边添加一个新表

一个简单而幼稚的解决方案是在library旁边创建一个新表。主键是book_id. 只有当新表中library不存在时,实例才能将一本书分配给预订记录。book_id

3.2 乐观锁

我们可以直接将图书分配到预订记录中。然后查询数据库,得到一个相同的预订记录列表book_id。只有属性最早的人才能date_modified赢得比赛并获得书籍。其他相同的预留记录book_id必须回滚操作。

4. 最佳实践?

非常感谢更好的解决方案!

标签: amazon-dynamodbrace-conditiondistributed-system

解决方案


推荐阅读