实时查看订阅状态

Checking subscription status realtime

考虑用户购买 monthly/annual 订阅(Amazon Prime 等订阅)的示例聊天应用程序。

一旦订阅到期,用户将无法在应用中发送消息。

用户可以在原订阅结束日期之前结束订阅。

我想到的一个解决方案(前端)——在应用程序中缓存结束日期,并在每次“发送消息”操作之前,比较结束日期​​和当前日期。

但问题是 - 如果用户提前结束订阅,用户仍然可以发送消息。

如何推送更新缓存中的新订阅结束日期。

另一个解决方案是(后端)——我在后端有一个 table 存储订阅详细信息,例如 subscription_id、user_id、subscription_enddate。因此,在任何“发送消息”操作之前,查询订阅 table 并比较日期,然后 continue/cancel 进一步操作。

Q1。我应该使用后端解决方案还是可以分享一些前端方法的改进或这种情况下的任何最佳实践?

Q2。也将订阅详细信息存储在单独的 table 最佳实践或任何好的设计中。 ?

PS- 示例聊天应用程序基于 AWS Amplify Datastore

让我尝试分解答案并给出我的意见。我还想提一下,此类问题的解决方案取决于规模和各种权衡。

Q1-

如果发送消息有不利影响,你不应该只依赖前端解决方案,因为它很容易绕过它们。可以混合使用,保证后端负载不是很高

为订阅添加前端缓存将确保您能够在缓存未被篡改的情况下过滤前端的大部分消息。

在队列之前添加一项服务,验证用户订阅是否已过期,增加了一层安全性。如果用户订阅有效,它会将消息推送到队列,否则会抛出错误。这样任何坏人也不能滥用系统。

Q2-

根据用例和负载,您可以为订阅本身提供单独的 table 或单独的微服务。

什么时候有一个单独的微服务?

当您的系统中的多个应用程序需要订阅数据并且需要具有独立于其他应用程序的可扩展性时,拥有一个单独的微服务可能是有益的。

什么时候有单独的table? 在其他情况下,您会觉得添加一项服务有些矫枉过正。您可以将数据分开保存在不同的 table/DB 中,这样您就可以灵活地更改订阅,甚至在将来轻松提取它。