如何在非阻塞系统中处理货币交易?

时间:2019-06-27 13:58:01

标签: concurrency blocking

我正在做一个广告服务器(某种形式的RTB),有些广告商为推广他们的广告系列而付费。

当用户观看广告时,我想向广告客户收费。

广告系列应参加拍卖而不受阻碍,这意味着他可以同时竞标多个广告请求。由于必须封住广告客户的余额,因此很难立即向广告客户收费。

另一种方法是不立即对他收费,而是在每N秒一次的单独过程中收费,并希望他没有购买超出其承受能力的印象数。我可以做出某种阈值信用,他应该参加拍卖,这可以消除大部分超支,但是如果退出流程并且广告商没有被收取费用并且超支很多,那会是个问题。

有人可以建议我通常如何处理这些事情,或者可以推荐一些有关该主题的书/文章?

1 个答案:

答案 0 :(得分:2)

如果这是异步编程的问题,则意味着您担心当出价人一次放置太多展示出价时会给出价人超额收费。然后,我建议使用mutex(即锁定系统)。您可以在任何给定时间为投标人在系统中可以拥有的锁数设置阈值。该阈值可以等于出价者愿意为展示支付的最高金额。当投标人要求投标时,应将其帐户上该投标的锁定发送到您的服务器。当服务器以确定的响应响应已创建锁时,则可以进行投标。在服务器释放锁定之前,该出价一直有效。这样一来,服务器就可以跟踪所有出价,并对所有出价进行锁定。如果投标人的投标门槛为10,而他试图对11投标,则服务器不会释放对投标人的锁定以进行此投标。此外,如果您使用的是微服务架构,建议您提供transaction manager服务来处理所有这些请求,甚至在服务器故障的情况下甚至使用基于Saga的事务来进行功能回滚。

profile for Dalton at Stack Overflow, Q&A for professional and enthusiast programmers