无状态服务指请求之间不在服务实例内存中保存会话上下文:每个请求都携带处理所需的全部信息,或所需状态统一放在外部存储(数据库、Redis、对象存储)里。

好处直接对应弹性与可运维性:任何实例都能处理任何请求,负载均衡可以随便调度;实例挂了直接替换,扩缩容就是加机器减机器,不需要迁移会话;发布与回滚也没有状态包袱。有状态的坏处正在于此——请求被“粘”在特定实例上,扩容要搬数据、缩容要优雅排空、故障意味着状态丢失;有状态服务还容易形成容量热点,弹性伸缩的自动化难度陡增。

实践中要注意:

  • 无状态不等于没有状态,而是状态外置;外置存储自身要有高可用方案。
  • 会话粘性(sticky session)只是过渡手段,掩盖而非解决问题。
  • 确实需要强局部状态的场景(实时长连接、流处理),应交给专门组件并配合分片与 checkpoint,而不是塞进普通 Web 实例。

追问方向:无状态与水平扩展、十二要素应用的关系。