在微服务中使用会话是错误的吗?
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),您应该尽量避免存储会话信息。它还有助于避免“单点故障”。
【讨论】:
以上是关于在微服务中使用会话是错误的吗?的主要内容,如果未能解决你的问题,请参考以下文章