kubernetes:有状态服务,无状态服务

背景:
我们经常听到部署服务的时候是有状态的还是无状态的,那么到底这两种服务该怎么区分呢?具体怎么用呢?
知识点:
**无状态应用(Stateless Application)**是指应用不会在会话中保存下次会话所需要的客户端数据。每一个会话都像首次执行一样,不会依赖之前的数据进行响应。**有状态的应用(Stateful Application)**是指应用会在会话中保存客户端的数据,并在客户端下一次的请求中来使用那些数据。
无状态的服务器程序,最著名的就是WEB服务器。每次HTTP请求和以前都没有啥关系,只是获取目标URI。得到目标内容之后,这次连接就被杀死,没有任何痕迹。在后来的发展进程中,逐渐在无状态化的过程中,加入状态化的信息,比如COOKIE。服务端在响应客户端的请求的时候,会向客户端推送一个COOKIE,这个COOKIE记录服务端上面的一些信息。客户端在后续的请求中,可以携带这个COOKIE,服务端可以根据这个COOKIE判断这个请求的上下文关系。COOKIE的存在,是无状态化向状态化的一个过渡手段,他通过外部扩展手段,COOKIE来维护上下文关系。
在k8s集群上的用法
如果我们是专门仅仅讨论K8s的deployment和statefulset,那么和会话保持是没有什么关系的,我们完全可以创建一个web的deployment然后暴露为service的时候加上诸如sesionaffinity=clientip的方法来实现会话保持;又或者通过nginx ingeess来做暴露时的会话保持
我们也可以通过statefulset来实现
kubernetes:有状态服务,无状态服务