在java开发分布式系统当中,无论如何都绕不过cap理论,那你知道这是一个什么理论吗?它的原理是什么呢?下面跟我一起看看吧。
CAP理论
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。
CAP原理及定义
Consistency 一致性
一致性就是“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
分布式的一致性
对于一致性来说,可以从客户端与服务端两个不同的视角来看。以客户端看来,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端看,则是更新如何复制分布到整个系统,以保证数据最终一致。一致性是因为有并发读写才出现的问题,所以理解一致性相关问题时,需要注意结合考虑并发读写的场景。
客户端角度看来,多进程在并发访问时,已经更新过的数据在不同进程如何获取的不同策略,会决定不同的一致性。对关系型数据库,必须要求更新过的数据都能被后续的访问看到,这是强一致性。
如果你可以容忍后续的一部分或者干脆全部访问不到,就是弱一致性。如果需要经过一段时间才要求访问到更新后数据,则是最终一致性。
Availability可用性
可用性指的就是“Reads and writes always succeed”,也就是服务一直可用,并且是正常响应时间。
一个可用性的分布式系统,它的每一个非故障的节点都必须对每一个请求作出响应。也就是,这个系统使用的任何算法必须最终终止。当同时要求分区容忍性时,这是一个很强的定义:即使是严重的网络错误,每个请求必须终止。
好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。可用性通常情况下可用性和分布式数据冗余,负载均衡等有着很大的关联。
Partition Tolerance分区容错性
分区容错性指的就是“the system continues to operate despite arbitrary message loss or failure of part of the system”,也就是分布式系统在遇到某节点或网络分区故障的时候,依旧可以对外提供满足一致性和可用性的服务。
分区容错性和扩展性紧密相关。在分布式应用中,有可能会因为分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。
例:
现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔未独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性。
以上就是本文的所有内容了,更多java常见问答相关知识请持续关注我们了解吧。