【问题标题】:system design for concurrent requests on a ecommerce platform电子商务平台并发请求的系统设计
【发布时间】:2021-11-24 14:15:09
【问题描述】:

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

【问题讨论】:

    标签: database backend system system-design


    【解决方案1】:

    这就是关系数据库的 ACIDity 出现的地方。如果一件商品被多次售出,则 DB 将进入不一致状态(例如,售出 10 件商品,购买 11 件商品),数据库的事务查询将根据 ACID 中的 C(一致性)阻止这种情况。在这种情况下,一个事务将通过,而所有其他事务将被中止。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      另外,如果您是从系统设计面试的角度提出这个问题,那么面试官更感兴趣的是讨论之前分享的链接中提到的那种类型,而不是仅仅期待一个“正确”的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-29
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 2017-04-06
        • 1970-01-01
        • 2019-07-03
        • 2010-11-21
        相关资源
        最近更新 更多