Notifications 面向多用户应用的通知系统设计

Notifications 面向多用户应用的通知系统设计,notifications,messaging,system-design,Notifications,Messaging,System Design,我需要为多用户(约1000个用户)应用程序设计一个通知系统,以下是高级需求 在特定操作上触发系统事件 在事件触发时,为所有(或有时仅为相关)用户生成单个通知并存储在数据库中 当用户登录时,他所有未读的通知都将被拉入并显示在ui中 当用户读取通知时,我们捕获读取状态 后台的计划程序会逐出所有过时的通知 这似乎是一个非常典型的用例,直接用数据库实现 但我的疑问是,我们有没有办法用基于队列的消息传递系统取代数据库?我之所以这样认为是因为,我使用的用例在本质上似乎是异步的(比如事件、通知和消息的及时收回

我需要为多用户(约1000个用户)应用程序设计一个通知系统,以下是高级需求

  • 在特定操作上触发系统事件
  • 在事件触发时,为所有(或有时仅为相关)用户生成单个通知并存储在数据库中
  • 当用户登录时,他所有未读的通知都将被拉入并显示在ui中
  • 当用户读取通知时,我们捕获读取状态
  • 后台的计划程序会逐出所有过时的通知
  • 这似乎是一个非常典型的用例,直接用数据库实现

    但我的疑问是,我们有没有办法用基于队列的消息传递系统取代数据库?我之所以这样认为是因为,我使用的用例在本质上似乎是异步的(比如事件、通知和消息的及时收回)

    虽然我将数据库替换为队列,但上面的前2点很合适,但在后面的部分我有一些疑问-

  • 通常,队列是否能够灵活地根据用户ID存储和查询通知

  • 考虑这个场景-通知生成并存储在队列中,而用户未登录,处理消费者消息的最佳方式是什么

    a。消费者是否应该持续监听消息?如果是,消息是否应该存储在应用程序内存中(这似乎不是一个好的选择)

    b。或者应该在用户登录时为每个用户动态创建使用者?这是一种规律吗

  • 还有其他推荐的方法吗


    谢谢

    您的用例适用于数据库,而不是消息队列。虽然在概念上与用例类似,但消息队列用于极短时间的存储(即缓冲在运行进程之间移动的数据)。由于您无法控制用户何时登录,因此这些通知可能会存储数分钟、数小时甚至数周。您需要一个持久性存储机制。

    谢谢,这会让您更加清晰。