【发布时间】:2016-12-07 21:11:34
【问题描述】:
我正在开发一个具有微服务架构的应用程序。每个微服务都可以为自己而活,与系统中的其他微服务没有直接依赖关系。在每个微服务中,我们都使用 CQRS 和事件溯源来通知服务中的状态变化。如果其他服务有兴趣并能够更新其数据,则其他服务会收到这些事件的通知。
到目前为止,该系统运行良好。如果一个微服务出现故障,其他微服务仍在工作。被中断的服务重新启动后,它会接收在它不在时发生的所有事件,并根据这些事件更新自己的状态。
现在我们需要保护我们的服务,为此我们使用 IdentityServer。我们还有一个服务,我们的安全服务,它将被其他微服务调用以获取令牌。这是微服务第一次必须直接与另一个微服务通信。
我对这种方法的问题是,如果安全服务器宕机,整个系统就会宕机。
我正在考虑以下解决方案:
每个微服务都应该将用户数据保存在自己的数据库中。如果用户访问微服务,则用户在服务内部进行身份验证,而无需远程调用安全服务。我仍然应该有一个安全服务来管理用户。对用户的更改将再次引发事件,其他微服务可以更新其用户数据。当然,一切都使用 https。也许为了减少冗余代码以确保安全,我可以使用 nuget 包。
你认为这是一个合理的方法吗?
感谢您的建议
【问题讨论】: