在微服务中使用会话是错误的吗?

Posted

技术标签:

【中文标题】在微服务中使用会话是错误的吗?【英文标题】:Is it wrong to use sessions in Microservices? 【发布时间】:2018-03-29 22:09:05 【问题描述】:

我已经读过,会话是违反 RESTful 的概念的。

Do sessions really violate RESTfulness?

Session Management in microservices

RESTful Authentication

既然微服务不可避免地使用REST,这里也同样适用吗?如果是这样,那我们为什么要举办 Spring 会议?它甚至将“Spring Session 允许在标头中提供会话 ID 以使用 RESTful API”作为其功能之一。

【问题讨论】:

这将主要基于意见,但只要会话不是服务器本地状态的一部分(例如,您将 Spring Session 与Redis)。 【参考方案1】:

除了扩展作为微服务的优势之外,它还为您提供了选择多语言架构的灵活性,即(使用正确的编程语言、框架、数据库来完成正确的工作)。

如果您使用 spring 会话(它在课程外提供跨节点的会话复制),它在内部使用 Redis/gemfire/hazelcast 作为复制的会话存储,但您必须为所有服务坚持使用一种编程语言和框架即 Java 和 Spring resp。(当然,您可以用其他语言编写自己的实现以从会话存储中读取,但它重新发明了***)这将带走 Polyglot 架构的好处。

因此,通常在微服务架构中,您有一个令牌服务(它应该能够单独扩展)实现来生成用于每个服务中的身份验证和授权的令牌(又名 sessionId),您应该尽量避免存储会话信息。它还有助于避免“单点故障”。

【讨论】:

以上是关于在微服务中使用会话是错误的吗?的主要内容,如果未能解决你的问题,请参考以下文章

在微服务之间传输文件

使用 jwt 在微服务中进行身份验证

阿里大神分享API网关在微服务架构中的应用!

大佬分享:API网关在微服务架构中的应用

阿里大佬分享API网关在微服务架构中的应用

微服务架构的身份验证解决方案