gpt4 book ai didi

java - 无状态与有状态微服务

转载 作者:行者123 更新时间:2023-11-30 01:44:23 24 4
gpt4 key购买 nike

我正在阅读一些有关无状态微服务的信息。我的问题很简单。如果一个微服务拥有一些持久性存储,那么它就成为有状态的微服务,这是真的吗?这总是正确的吗?任何意见将不胜感激。

最佳答案

有状态和无状态通常与数据库持久性无关。另外,状态(完整)(较少)也有不同的级别,我将尝试列出一些示例:

如果微服务不在其内部存储中保存对服务客户端至关重要的信息,而是在外部存储中保存数据(可以是有状态的),我们可以说微服务是无状态的。一个好的思想实验是想象您的服务在每个请求之间在不同的节点上重新启动。如果服务能够以这种方式实现其目的,那么它通常可以被认为是无状态的。另一个例子是负载均衡器可以随机平衡请求,而无需对无状态服务使用粘性 session 。也就是说,如果您的服务将数据保存在本地存储(文件系统等)中,然后在另一个节点中重新启动,并且该数据对于正常运行至关重要,那么它就不是无状态的。因此,无状态性并不严格限于不在内存中保存数据。

有状态服务可以是在客户端访问之间保存状态的任何服务,并且如果该状态被破坏,某些请求将失败。

对于内部有状态但外部具有无状态 API 的应用程序,事情会变得复杂。例如,基于参与者的系统可以被称为有状态(服务彼此了解),但如果与持久参与者状态存储配合使用,自动故障转移(来自死节点的参与者迁移到 Activity 节点)可以保证可靠性。如您所见,整体服务是有状态的,但通过 API 进行的交互是无状态的。

比这些流行语更重要的是您的应用程序在某些边缘条件下的行为方式:

  • 在扩展期间处理现有进程/ session /请求(添加节点)
  • 处理服务或节点的意外重启或终止
  • 处理网络分区期间的请求
  • 还有更多类似的...

如果您的服务能够在这些条件下保持一致和高性能,那就一切顺利。

关于java - 无状态与有状态微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com