CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
数据一致性,及系统只读到最新写入的数据,如:单点串行化的方式,就能达到一致性效果。
单机架构保持一致性:
分布式架构数据同步失败,无法保持数据一致性:
举个栗子:你去租房的时候都会去找地产中介(某链),你找到了A小区的门店发现没有需要的房源,然后去B小区的门店发现有个房源很适合你,这就可以理解为两个门店信息不一致,及不满足一致性要求,但实际上你会遇到这种情况,你去A小区门店询问的时候,有你需要的房源,然后他们会去B小区的门店拿钥匙,这是因为房东把房源交给了B小区门店,然后A小区的门店同样同步的B门店的房源,这样就满足一致性的要求。
如果每运行100个时间单位,有1个时间单位不可用,则说系统的可用性是99%。
如上图服务A可能由于网络原因导致不可用,但是B、C还是可以继续服务的,但是在反向代理那个位置发生了故障那系统都不可用了,它不是高可用的。
举个栗子:还是以租房为例,你去租房的时候发现A小区的门店今天关门了,然后直接去了B小区的门店发现他们正常工作的,这就满足了可用性的要求,如果去B小区或其他门店都没有正常工作,那这家地产商可能倒闭了,没法对客户提供可用性的服务了。
分布式系统,大多都是很大个节点,第个节点节点之前都不是完全独立的,需要相互通信,当发生节点无法连通时,系统如何进行容错处理,是需要考虑的。
举个栗子:C小区新增加了一个门店,装修啥的都弄好了,就是没拉网线,没有连通性,等于就是个孤立的门店,店员只能大眼瞪小眼,没得事做。那你去A门店找房源,那里的人可能都不知道有C小区这个门店,所以A直接带你去了C小区看房子了。
一致性,可用性,分区容忍性三者只能取其二,常见的最佳工程架构实践是什么呢? 最常见的实践是这样的: