Architecture 设计一个;“商品库存警报”;建筑学

Architecture 设计一个;“商品库存警报”;建筑学,architecture,queue,alert,scaling,Architecture,Queue,Alert,Scaling,我正在努力构建一个销售应用程序,买家可以在该应用程序上注册物品补货警报。这对于用户少、项目少的小型应用程序来说可能非常简单,但是让我们假设以下场景: 该应用程序拥有约100多万用户(亚马逊、易趣、AliExpress等) 所有的用户都想买香蕉,但它已经脱销了 每个用户创建一个重新进货警报 香蕉重新进货 对于每个物品的重新进货,必须迭代并相应地发送重新进货警报列表(电子邮件、推送等) 这些系统是如何设计的?哪种数据库、工具等?用户通知系统通常基于队列。到底什么样的数据库支持库存管理系统并不重要 您

我正在努力构建一个销售应用程序,买家可以在该应用程序上注册物品补货警报。这对于用户少、项目少的小型应用程序来说可能非常简单,但是让我们假设以下场景:

  • 该应用程序拥有约100多万用户(亚马逊、易趣、AliExpress等)

  • 所有的用户都想买香蕉,但它已经脱销了

  • 每个用户创建一个重新进货警报

  • 香蕉重新进货

  • 对于每个物品的重新进货,必须迭代并相应地发送重新进货警报列表(电子邮件、推送等)


    这些系统是如何设计的?哪种数据库、工具等?

    用户通知系统通常基于队列。到底什么样的数据库支持库存管理系统并不重要

    您需要两个队列,其流如下所示:

  • 0
    >0
    (或任何补货)的库存更新将项目添加到补货警报队列

  • DB worker使用重新进货警报队列中的项目,应用业务逻辑,并将用户推送到通知队列

  • Notification worker使用通知队列中的用户,并呈现/发送电子邮件、推送、短信等

  • 这种设计的优点:

    • 推送到重新进货警报队列可以通过多种方式实现:SQL DB触发器或存储过程、加载过程中的逻辑,甚至是扫描DB的chron作业

    • 一个单独的重新进货警报工作人员将库存数据库加载过程必须完成的额外工作量降至最低。最多只能将项目添加到队列中

    • 将重新进货警报工作程序与通知工作程序分离可以隔离定义重新进货警报的业务逻辑,从而允许与现有通知队列集成

    这种设计的缺点:

    • 需要两个队列和两名工人
    一些需要考虑的事情

    • 通知延迟有多重要?有人在竞价吗 某物他们是否需要在这一分钟知道它在库存中,或者 知道今天就足够了吗
    • 是否应该对通知进行批处理?用户将设置多少重新进货警报?是否有人在同一天收到两封不同邮件,或者这会很烦人