Warm tip: This article is reproduced from serverfault.com, please click

amazon web services-实时查看订阅状态

(amazon web services - Checking subscription status realtime)

发布于 2021-01-04 03:45:40

考虑用户购买每月/每年订阅(如 Amazon Prime 等订阅)的示例聊天应用程序。

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

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

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

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

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

另一个解决方案是(后端) - 我在后端有一个表存储订阅详细信息,如订阅 ID、用户 ID、订阅结束日期。所以在任何“发送消息”操作之前,查询订阅表并比较日期,然后继续/取消进一步的操作。

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

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

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

Questioner
Yusuf
Viewed
11
sourabh1024 2021-01-04 15:50:24

让我尝试分解答案并发表我的意见。我还要提一下,此类问题的解决方案是由规模和各种权衡决定的。

Q1-

如果发送消息有负面影响,你永远不应该仅仅依赖前端解决方案,因为它很容易绕过它们。你可以使用混合来确保后端的负载不会很高。

在此处输入图片说明

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

在队列之前添加一个服务,验证用户订阅是否已过期,增加了一层安全性。如果用户订阅有效,则将消息推送到队列,否则会引发错误。这样,任何不良行为者也不会滥用系统。

Q2-

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

何时需要单独的微服务?

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

什么时候有单独的桌子?在其他情况下,你觉得添加服务会过大。你可以将数据分开保存在不同的表/数据库中,这样你就可以灵活地更改订阅,甚至在将来轻松提取它。