因此,我返回了另一个关于设计我的微服务项目应用程序的问题。
假设我们有这两个微服务:
user-management(存储user_id +其他关于用户的内容)
posts-management(存储用户的帖子,显然需要user_id的副本/引用)
我的问题是,我没有想到基本上存储在JWT中的user_id,并利用这一个。这将完美地工作时,用户创建一个职位,但有一个问题。当管理员删除该用户的帐户会发生什么?该用户的jwt可能仍然可用(即使我使用像15分钟这样的短暂的jwts),他可能能够在posts-service中创建新的帖子,尽管不再有帐户。
我想到的另一件事是(我还是个新手,所以我不确定哪一个是最好的方法)是每次我们发出一个post请求,我们只是在post-service中创建post而不立即检查,但是尝试异步发送一个事件到user-service,这将“验证”用户的存在。如果user-service什么都不返回,那么一切都好,但是如果它返回类似UserDoesNotNotNotNotListEvent的东西,我们将从post-service中删除所有posts。(即使他们是不稳定的)我必须使他们每一次新的职位是创建。这是确定的吗?它是否会通过创建帖子而使用户服务和帖子服务过载,然后很快删除?
我该怎么办?
我希望这是非常有效的,但这毕竟只是一个最后一年的项目,所以它不像是一个我会赚钱的产品,但我想尽可能多地学习关于微服务的良好实践和权衡。
**编辑!**好的,所以实际上已经想到了一些东西,并希望听到你的意见。如果当我删除一个用户和用户服务发送一个事件到后服务,我不删除该用户的帖子,而是存储我想删除的用户的所有user_id。我可以有某种计划任务来删除那些“users_to_be_deleted”每一个小时左右,我认为这将有点修复我以前的问题,但当然用户仍然可以张贴的东西,直到他们的jwt到期。
2条答案
按热度按时间j2cgzkjk1#
最简单的方法就是在每个帖子上检查
user
服务。用户服务可以返回用户的存在和任何权限。如果用户被授权发布,你就让他们发布。如果他们不存在,或者没有被授权发布,user
服务应该缓存请求,然后在用户被删除时该高速缓存崩溃。像这样在每个请求上调用auth服务是相当标准的,通常也会实现在API中间件中。llew8vvj2#
每次都检查用户是否有效是多余的。你的第二个想法更好。
然而,对此可以有替代方法。
1.您可以在显示帖子时检查用户的有效性,而不是限制用户发布。即使用户成功创建了多个帖子,您也可以选择不在您的应用程序/网站上显示它们。或者您可以将它们与用户状态一起显示沿着(目前大多数应用程序/网站都这样做)
1.使令牌无效。在这里详细解释:https://dev.to/webjose/how-to-invalidate-jwt-tokens-without-collecting-tokens-47pk
1.再想想,这是一个需要解决的问题吗?可能听起来很讽刺,但有时它可能不是有害的。会有频繁的用户删除吗?如果是的,那么需要删除用户的不同情况是什么?如果新用户最普遍,那么你可能想要限制他们发布任何东西,直到他们被验证。
这个问题可以有各种各样的解决方案。然而,最终,你必须在解决这个问题时寻找风险与回报