假设您有1件库存商品,但在任何情况下都有100万个购买请求,您将如何设计一个系统来防止产品多次销售?
发布于 2021-10-13 20:34:25
这就是关系数据库ACIDity的用武之地。如果一个项目将被多次销售,则DB将进入不一致状态(例如,10个项目已售出,11个项目已购买),数据库的事务查询将根据ACID中的C(一致性)来防止这种情况。在这种情况下,一个事务将通过,而所有其他事务将被中止。
除此之外,您还可以在资源上实现锁定(乐观锁定与悲观锁定)。例如,您可以锁定特定的itemId。您可以在数据库层或应用程序层实现锁定。
在悲观锁定下,一个线程将锁定该物品,所有其他线程将被告知该物品已售出。
在乐观锁定中,所有线程都将锁定资源,并且第一个通过的线程(假设该项目的付款已完成)将标记该项目已售出,所有其他线程将在最后一刻被告知该项目已售出。
这是一个简短的答案,但希望它能给你一个想法。
发布于 2022-02-12 01:01:53
这个问题的答案取决于很多由业务和技术细节驱动的因素。关于这个话题here已经有了很好的讨论。
此外,如果你是从系统设计面试的角度来问这个问题,那么面试官更感兴趣的是进行之前分享的链接中提到的那种讨论,而不仅仅是期待一个“正确”的答案。
https://stackoverflow.com/questions/69431157
复制相似问题