分布式状态

136 阅读2分钟

状态是什么

状态保存着程序一些数据或者上下文

image.png

无状态Stateless

无状态表示服务本身不存储任何数据和信息,但是可以借助外部存储数据(redis,mysql,session),但是会增加网络开销。在分布式架构上可以随意增加或删除节点,对系统不会造成影响。

image.png

有状态Stateful

和无状态的特点截然相反,数据本地化把数据和状态本地存储,减少延时,对数据密集型程序来说,速度更快。高可用和强一致符合CAP机制的A和C。

image.png

CAP机制

Consistency一致性:多个节点访问的数据是一致的 Availability可用性:即使节点挂掉了,系统仍然能对请求作出响应,不会返回错误或超时 Partition Tolerance分区容忍性:即使部分节点出现网络连接失败,系统依然能正常运行

这三个特性只能满足两个,无法同时满足三个

  • CP(牺牲可用性)
  • AP(牺牲一致性)
  • CA(牺牲分区容忍)

CP保证节点数据一致,即使部分节点不可用,常用金融系统 AP保证系统可用,数据存在短时间不一致,常用社交网络 CA分布式系统中不现实

Sticky Session

有状态服务对于客户端的请求,必须保证落在同一个实例。

实现Sticy Session

  • 长连接会带来节点负载和数据不均问题,连接上了就不会断开。反向压力(当一个节点压力过大时,它会通过限流、排队、降级或拒绝部分请求的方式来减少负载,让请求流向其他负载较小的节点,而不是直接断开连接。)的做法会带来一些问题。 如果要变的均匀,用一个元数据索引映射后端服务实例和请求关系,用一个路由节点会根据元数据索引路由,元数据索引表会根据服务的压力重新映射。

  • Gossop协议通过 Gossip 协议在各个节点之间同步元数据,可以使得节点的增加和减少变得更加容易,且能够帮助集群内部进行负载均衡和资源重新分配

服务容错设计

在分布式系统下,我们已经在运行时进行多节点复制,避免挂掉,把数据持久化到硬盘,这个硬盘可以是挂载到本地硬盘的一个外部分布式的文件卷。当一个节点挂掉了以后,另外一台机器可以启动一个新的实例,把之前的文件系统挂载过来。在启动的过程中就装载好了大多数数据,那么从其他节点上同步少量的数据就可以快速恢复和提供服务。