【架构师从入门到进阶】第六章服务集群优化——第五节信息一致节点集群信息共享节点集群和信息一致节点集群的区别分布式一致性的问题CAP定理简述分区容错性提高分区容忍性的办法总结本篇我们来学习信息一致节点集群。信息共享节点集群和信息一致节点集群的区别我们前面所讲的信息共享节点集群其运算能力是分散到各个系统节点上的我们的服务运算的能力可以通过服务节点的扩张来提高但是我们的存储能力却集中在了信息池当中就成为了我们的单点故障和性能瓶颈。信息一致节点集群它就是为了解决单点故障和性能瓶颈由于存储信息池引起的单点故障和性能瓶颈而产生的一种新的模式。这两个服务节点之间的数据是要做同步的我们前面的服务节点其实数据都是在一起的而信息一致的这种集群模式它的数据不在一起他们之间自己去做信息的同步。有人将这种方式叫做分布式系统可以这么说但是不完全对。其实大部分的分布式系统中的节点是异构的或者说他们之间的数据有可能是不相同的还有可能是他们的数据结构根本就不同或者说这些结点从属于不同的服务模块。而现在我们的信息一致方案中这些节点只是为了分担我们整体高并发带来的压力也就是说我们前面的这个模式中是那个数据量越来越大请求越来越多当它成为我们瓶颈的时候我们可以采用下面的信息一致这种方式。这种方式它要面临的一个问题就是分布式一致性的问题也就是说怎么保证它们里面数据是一致的。分布式一致性的问题分布式一致性要求用户在分布式系统中某个节点上进行了变更并经过一段时间能够从系统的其他节点上读到。我们来看一下举一个例子。比如说这边有一个用户来请求A节点把数据从1变成了2也就说但是当他读取的时候他去B节点这个服务去读从这个服务里一读然后结果发现这边还是1并没有变2也就是说A节点的数据并没有给B节点同步过来这样的话就出错了。只要节点间的信息不同步或存在同步延时的情况便会出现这种不满足数据一致性的问题。关于数据一致性我们说在一定的时间后能读取到的变更我们可以根据经过多长时间才让两个节点之间数据变成一致可以将一致性分为两大类一个是强一致性一个是弱一致性或者说叫做最终一致性。提到分布式架构就一定绕不开一致性的问题而涉及到一致性的问题就绕不开CAP定它可以用在中间件的设计也可以用在我们业务系统的设计上。在这里简单的把CAP定理描述一下下一篇文章我们再详细的说这个CAP定理。CAP定理简述分区容错性就是说在一个分布式系统里面节点组成的网络应该是连通的就是说我们有很多个节点它们之间都是互通的都能互相访问。然而可能因为一些故障使得这些节点之间不连通了整个网络就分成了几块区域比如说两个节点属于移动的网另外两个节点属于电信的网。可能由于某些原因左边两个和右边两个之间的网络不通了这样的话网络就被分成了几块区域。数据散布在了这些不连通的区域中这个叫做分区。CAP中的P是分区容错性当你的一个数据只在一个节点中保存并没有在其他的三个节点里面那么出现分区后和这个节点不连通的部分就访问不到这个数据这个时候的分区是无法容忍的。也就是说你的系统中如果说他不能把数据同步给其他的地方当产生网络分区的时候因为有的用户会把请求发到其他服务上然后他从其他服务上去获取数据而你修改的数据在这个节点之上并没有给它进行同步那么用户从这个节点上获取的数就是错误的那么这个时候就是无法容忍的。提高分区容忍性的办法基于这个无法容忍的问题提高分区容忍性的一个办法就是将一个数据项复制到多个结点上那么当出现分区之后这一数据项可能分布到各个分区里了容忍性就提高了。然而要把数据复制到多个节点上就会带来一致性的问题就是说多个节点上面的数据可能是不一致的。要保证一致也就是说每次写操作都要等待全部节点写成功而这等待又会带来可用性的问题。什么意思呢就是说当我要从a结点这里同步到b结点的时候我们要把b节点锁住不让任何人来访问。因为在数据同步的过程中如果说b节点还允许别人访问的话那么别人很有可能从b节点拿到的还是老的值所以说我们要把b锁住不让人来访问。这个时候虽然我们为了保证一致性通过a将数据同步到b但是把b锁住了然后有的请求到达b的时候因为b被锁了就无法提供服务这个时候就会影响到可用性。总结总的来说数据存在的节点越多分区容忍性就越高因为你的数据在多个节点当中存储当网络被切断之后那么数据是不是就有更大的概率存在于不同的分区中那么这种情况下容忍性就会越高。但是节点越多要复制更新的数据就越多现在只有四个如果是四十个呢都需要把变动的数据同步到这四十个节点这会带来更严重的一些可用性的问题。如果那些请求你要保证它的可用性那么你的一致性就会受到阻碍。如果说要保证一致性那么这个数据更新所有节点所需要的时间就会更长意味着要锁住其他节点的时间也就更长这样的话可用性又会降低。