SRE随笔---无状态服务

MongoDB文档
• 阅读 64

高可用最重要的原则就是“消除单点故障”, 对应的方法是集群部署。同一个服务部署多个节点,即便某些节点故障,业务系统依然可以对外提供服务。但将单节点服务拓展为集群的关键是避免将服务的状态和机器绑定,即服务必须是无状态化的。

状态:

状态是指在调用服务时必须依赖的数据。例如,用户登录某个购物网站,登录信息会保存在服务端节点的session数据中(状态),用户再次发送请求给服务端时,服务端会依赖session数据来决定如何响应用户
(服务端会从session提取用户信息,判断用户是否有权限获取资源等)

无状态服务:

服务节点不存储或不绑定相关状态数据的服务被成为无状态服务
通常无状态服务所需的状态数据都存储在第三方,集群中的任一节点均可访问。集群中的节点没有任何差别,可随意增加或删除。
SRE随笔---无状态服务

如图所示,上图有三个auth节点组成了auth服务集群,状态数据存储在第三方redis上,无论访问哪个auth节点,获得的结果都是一样的。通俗来说集群节点“只干活,不记事”

有状态服务:

服务节点存储或绑定相关状态数据的服务被成为有状态服务。典型的如mysql数据库,数据必须存在节点集群磁盘上。要实现高可用需要备份冗余,主从复制等机制。

SRE随笔---无状态服务

如上图所示这是典型的有状态服务,服务器节点存储了session信息,而且每个节点存储的信息可能不一样。访问不同的web节点得到的结果也不同。例如用户第一次访问了web服务的a节点,注册并登录,此时服务端a节点将用户信息存储到session中。用户再次发起请求访问了web服务的b节点,但是b节点上session是空的,所以b节点认为用户没有登录过,于是返回信息让用户再登录一次....

无状态服务设计要点

无状态服务不存储任何数据,只是个无情的业务逻辑处理机器,所以它可以任意拓展而不影响用户。为了把服务的状态和具体节点解耦,通常要把数据保存再其他地方,例如不太重要的数据保存再redis,重要的可以放在mysql或其他分布式存储。

设计要点:
1)保证冗余部署的多个节点(进程)完全平等
2)请求提交到冗余部署的任意节点,处理结果完全一致
3)冗余节点不存储业务的上下文信息
4)仅根据每次请求携带的数据进行相应的业务逻辑处理。

点赞
收藏
评论区
推荐文章
计算存储分离在京东云消息中间件JCQ上的应用
作者:田寄远JCQ全名JDCloudMessageQueue,是京东云自研、具有CloudNative特性的分布式消息中间件。JCQ设计初衷即为适应云特性的消息中间件;具有高可用、数据可靠性、副本物理隔离、服务自治、健康状态汇报、少运维或无运维、容器部署、
Stella981 Stella981
3年前
Kubernetes学习之路(三)之Mater节点二进制部署
K8SMater节点部署1、部署KubernetesAPI服务部署apiserver提供集群管理的RESTAPI接口,包括认证授权、数据校验以及集群状态变更等。只有APIServer才能直接操作etcd;其他模块通过APIServer查
Stella981 Stella981
3年前
Keepalived+Nginx实现高可用和双主节点负载均衡
简介Nginx可以实现高并发反向代理,lvs集群可以实现负载均衡,但是他们都有一个共同的弊端,就是Nginx,lvs架构中Director是单点故障,有没有一个好的方案解决这个问题呢?答案是有。通过Keepalived就可以实现,前端Nginx,lvs中Director服务器的高可用和负载均衡,通过shell命令或者脚本可以实现对服务器状态和服务的监控!
Stella981 Stella981
3年前
CentOS 7下 部署Redis
redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redis高可用、可扩展等问题,redis集群提供了以下两个好处:1)将数据自动切分(split)到多个节点2)当集群中的某一个节点故障时,redis还可以继续处理客户端的请求一个Redis集群包含16384个哈希槽(hashslot
Wesley13 Wesley13
3年前
mongo同步至ES数据
启动服务查看所有记录状态GET\_search{"query":{"match\_all":{}}}查看集群健康状态GET\_cat/health查看节点状态GET\_cat/nodes查看索引状态GET\_cat/indices查看总记录数get\_cat/
Wesley13 Wesley13
3年前
2.ZStack的伸缩性秘密武器:无状态服务
_每个ZStack服务都是无状态的,让服务高可用以及横向拓展(scaleout)可以很简单,只需要启动剩余的服务实例,然后进行负载均衡即可。此外,ZStack将所有的服务打包到名为管理节点(managementnode)的单个进程,它让部署和管理变得超级简单。_动机在ZStack的伸缩性秘密武器——一、异步架构(ZStack'sScala
Stella981 Stella981
3年前
Linux之Redis
1、Sentinel哨兵    Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
Wesley13 Wesley13
3年前
001.SQLServer高可用简介
一SQLServer高可用集群相关概念1.1Windows故障转移群集Windows故障转移群集是由多个服务器组成的共同提供某高可用服务,该服务用于防止单台服务器故障导致服务失效。故障转移群集是一种高可用性的基础结构层,由多台计算机组成,每台计算机相当于一个冗余节点,整个群集系统允许某部分节点掉线
Stella981 Stella981
3年前
Mongodb集群节点故障恢复场景分析(转)
一个适当配置的Mongodb分片集群是没有单点故障。本文描述了分片集群中存在的几种不同的潜在的节点故障场景,以及Mongodb对这些节点故障是怎么处理的。1、Mongos节点宕机一个Mongos进程应该运行在每一个应用程序服务器上,这个服务器应该独占这个Mongos进程,并且通过它与分片集群来通讯。Mongos进程不是持久化的,相反,
DevOpSec DevOpSec
2年前
自建k8s集群之负载均衡使用
自建k8s而非云环境,组件mysql类(部分有状态服务)部署在虚机里也即集群外,业务服务部署在k8s集群内。需求:集群内、集群外,业务服务和组件相互间通过负载均衡、高可用的形式连通。此需求拆解成两个问题进行解决,接着往下看。集群内:k8s集群集群外:k8s集群外的应用部署在虚拟机或物理机环境
广告在线模型系统负载均衡策略实践
一、背景简介1.1、现状•实际生产环境中,复杂业务系统对分布式服务集群架构的依赖。•服务集群异质化节点的容器化部署,机器性能超卖现象不可避免、性能不均情况时有发生。•服务集群各硬件组件出错率不可避免•集群内负载不均,整体资源利用率低。•单节点过载容易触发集