[zookeeper]zookeeper系列四:分布式系统的理解

分布式系统集群的特点

  • 集群中所有节点维护的数据要一致
  • 所有节点都可以提供相同的业务功能(不一定是在同一时刻提供)
  • 集群需要保障系统的高可用,某个节点宕机不会影响服务

集群环境下如何保障数据一致性

集群环境下有两张方式可以保障数据一致性:数据复制和集中存储。

  • 数据复制:先向单节点写入,再复制到其他节点,zookeeper就是这样实现的;或者多节点同时写入,但只适合多节点写入的数据不是相同数据的应用场景。

  • 集中存储:借助可靠性较高的集中存储,比如NAS存储,分布式缓存(redis)等。

分布式系统之sharding

对于业务系统来说,就是业务拆分,不同的子模块单独是一个的集群,整体业务系统是个大分布式系统。

对于数据系统(比如mongodb)来说,就是数据的拆分,如下图所示的mongodb部署架构图:

[zookeeper]zookeeper系列四:分布式系统的理解
图中有四个分片(shard),每个分片是一个由若干台机器组成的副本集(replica set),每个副本集内所有机器的数据都是一样的。从每个副本集各取出一部分数据最后才能够组成一份完整的数据。

zookeeper集群

  • zookeeper集群是一种对等集群,所有节点(机器)数据都一样;
  • 集群节点之间靠心跳感知彼此的存在;
  • 所有写操作都在主节点,其他节点只能读,虽然也可以接收写请求,但是内部会把写操作转给主节点;
  • 通过选举机制选出主节点,从而保障了主节点的高可用,这样主节点就不是固定的,万一主节点宕机还可以重新选举出主节点;
  • 至少需要三个节点,而且节点个数必须是基数;
  • 当一半以上的数据写入成功后,则返回写入成功,是最终一致性策略;

如下图所示的zookeeper集群架构:
[zookeeper]zookeeper系列四:分布式系统的理解
client发送到follow的写请求转发给leader,由leader执行完写操作后再同步到follow。

分布式系统之CAP理论

CAP的定义

C是一致性(Consistency)、A是可用性(Availability)、P是分区容忍性(Partition tolerance)。

CAP的定义:一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个要求,只能满足其中两项。

CAP的理解

  • 一致性:分布式环境下,一致性主要是指数据在多个副本之间是否保持一致;
  • 可用性:是指系统提供的服务必须一直处于可用状态,对用户的请求总是能够在有限的时间内返回结果,有限的时间强调的是用户能够接受的时间;
  • 分区容忍性:集群出现网络割裂时,集群还能继续提供一定的可用性和一致性,除非整个网络不可用;
  • 只能满足其中两项并不是说另外一项就完全没有,而是要求没有那么严格;
  • 分区容忍性是分布式系统必须有的特性,因为网络不可靠,所以只能在C和A之间权衡;

note:可用性与常说的高可用性的可用性不是一个概念,即如果服务访问不到,不属于没有可用性。

放弃CAP定理

  • 放弃分区容忍性( P ):即集群如果出现网络割裂的话,整个集群无法提供可用性和一致性服务,这种情况要么集群节点无状态(没理解????),要么是把所有数据放在一个节点上,这样就失去了扩展性,也不能叫分布式系统了,所以,单机应用因为放弃了P,得到很好的CA;
  • 放弃可用性(A):放弃可用性,并不是完全没有可用性,是指允许响应超时的时间可以更长,比如报表可以运行10分钟左右,甚至在某些情况下允许超时错误;
  • 放弃一致性( C ):放弃一致性是放弃数据得强一致性,而保留数据的最终一致性,即数据最终是完全一致的,但有一个时间窗口的问题,这需要根据不同的业务来定义。比如新浪微博的内容,时间窗口可以超过10分钟,而交易订单只允许几秒钟。

分布式系统之base理论

BASE是Basically Available(基本可用)、Soft State(软状态)和Eventually Consistent(最终一致性)三个短语得简写,它是对CAP中的一致性和可用性权衡的结果。

BASE的核心思想是即使无法做到强一致性,但是每个应用可以根据自身的业务特点,采取适当的方式达到最终一致性,同时获取到系统可用性。

BASE之基本可用体现在两个方面:

  • 响应时间上的损失:比如有些请求1秒内给出响应,有些请求可能会在5秒内给出响应;
  • 功能上的损失:例如对于电商系统来说,某些区域可能不能购买某些商品,又或者大促时,部分消费者被引流到降级页面;

BASE之弱状态:

  • 也称为软状态,是指允许系统中的数据存在中间状态,并认为该状态不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间存在一定的延时;例如在双11在淘宝购物时,但系统提示还是待付款;

BASE之最终一致性:

  • 系统中的数据副本在经过一段时间同步后,最终能够达到一个一致的状态。