我们在学习分布式事务的时候,经常会看到各种博客、博文介绍CAP原理。但是感觉讲述的并不是那么清晰,于是自己查询了各种资料自己综合写了一篇博客,以抒发自己的观点。
- 一致性(Consistency):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
- 可用性(Availability):每一个操作总是能够在确定的时间内返回,而不是一直等待响应。也就是系统随时都是可用的。
- 分区容忍性(Tolerance of network Partition):在出现网络分区(比如断网)的情况下,分离的系统也能正常运行。
CAP原理的意思是,一个分布式系统不能同时满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
我们对一致性都有很好的理解,所有节点数据都一致吗!但是对于可用性和分区容忍型这两个完全就是众说纷纭,甚至二者的概念很多人分不清。如果说我们的服务器做了集群,拥有了多个节点,然后其中几个节点宕机了,剩下还有机器可以维持正常的服务,那么这个到底是可用性,还是分区容忍型呢?
其实我觉得可以理解为这几个节点与其它正常的节点失去联系了,也就是出现了网络分区,按照定义,这属于分区容忍性的范畴。而可用性,则是整个系统访问能够快速返回,并不是一直在阻塞中,一直在类似转菊花的等待。
- CA组合:传统的单节点应用。当我们访问这个应用的的时候,如果应用没有崩溃,网络没有异常,我们的系统也没有过多的性能问题,数据库事务隔离级别防止脏读。那么数据怎么查询都是一致的,而且基本上都是秒响应。但是因为是单节点,如果宕机了就没了,可以说是没有容忍型。
- CP组合:我们对系统和数据库做出集群。假设是一主多从,而且是必须要主从彻底一致时才能响应。那么当集群的节点越多,容忍型就越高,但是数据同步的时间会越来越长,同时响应的时间就会越来越长。这样就直接导致了可用性越来越差。
- AP组合:我们访问系统的任意一个节点,都会秒响应,但是不同的系统响应的数据可能会出现不一致。
综上所述,我们如果想要一套分布式系统,那么肯定是追求AP而去牺牲C,达到最终一致性。而如何达到最终一致性,那么就是分布式事务要做的事了。