电子商务平台并发请求的系统设计

system design for concurrent requests on a ecommerce platform

假设您有 1 件库存商品,但在任何情况下都有 100 万个购买该产品的请求,您将如何设计一个系统来防止多次销售产品?

这就是关系数据库的 ACIDity 发挥作用的地方。如果一件物品将被多次出售,那么数据库将进入不一致状态(例如,售出 10 件物品,购买 11 件物品)并且数据库的事务查询将根据 ACID 中的 C(一致性)来防止这种情况。在这种情况下,一项交易将完成,而所有其他交易将被中止。

除此之外,您还可以对资源实施锁定(乐观与悲观锁定)。例如,您可以锁定特定的 itemId。您可以在数据库层或应用程序层实现锁定。

在悲观锁定下,一个线程将锁定该物品,所有其他线程将被告知该物品已售出。

在乐观锁定中,所有线程都将锁定资源,第一个通过的线程(假设该项目已付款)将标记该项目已售出,所有其他线程将被告知该项目在最后售出时刻.

这是一个简短的回答,但希望这能给您一个想法。

这个问题的答案取决于许多由业务和技术细节驱动的因素。 关于这个话题已经有很好的讨论 here

此外,如果您是从系统设计面试的角度提出这个问题,那么面试官更有兴趣讨论 link 之前分享的那种讨论,而不是仅仅期待“正确”回答。