为了最好地描述这个问题,我将从以下场景开始:
假设我有一个扑克游戏: 玩家可以使用信用卡购买一些商品。
如果玩家同时执行两个采购订单(理论上),两个工人可以同时处理此请求并且可能存在完整性错误,因此应用程序必须确保只执行一个(或更少)订单在给定时间内为单个玩家。
只是为了确保方案清晰 - 可能有数百个订单同时执行 - 但对于不同的玩家
遵循12Factor指南,我应该能够扩展工人(实际处理采购订单)。
如何通过优雅的解决方案确保在给定时间内单个玩家仅执行一个(或更少)订单?
提前致谢, 埃里克。
答案 0 :(得分:1)
简短的免责声明: 我不是python专家,也不是数据库专家,但我认为我的解决方案是在正确的轨道上。用你的技能应用它,你就会得到你想要的结果。
这是实现你敢于说我敢说elegant
的几种方法之一:)。
我假设您拥有不同的设备,因此可以为一个特定客户进行多笔交易。
基于这个假设以及您对系统有某种Web服务的假设,我已经解决了这个问题:
在数据库中添加一个表,该表将记录当前正在处理的所有活动客户。 然后在与客户的交易开始之前再添加一个检查,以确保客户不在该活动交易表上,如果是,则拒绝新交易发生,否则继续。事先进行此检查将确保无论同时使用多少设备,任何时间任何特定客户只能进行一次交易。
以上只是一个例子。它是我目前如何处理它,它对我有用。
基本上是快速检查当前客户是否在activecustomers
数据库中的想法,如果是这样,您只需拒绝该客户,因为该客户已经在其他地方的会话中。客户完成该会话后,您将从该表中删除该条目。
答案 1 :(得分:0)
我们当前的解决方案涉及一个RabbitMQ独占队列(每个消耗锁定队列,直到任务完成),每个玩家和芹菜从队列中消耗任务。
您如何看待此提议的解决方案?
埃里克。