详解分布式系统核心概念——CAP、CP和AP
最近研究Sykwalking,当调研 oap如何进行集群部署时发现:skywalking oap 之间本身不能搭建集群,需要一个集群管理器来组建集群,它支持nacos、zookeeper、Kubernetes、Consul、Etcd 五种集群管理器。我重点比较了nacos和zookeeper,发现二者最大的区别是Zookeeper采用了CP架构,nacos既支持CP架构又支持AP架构。关于CP 和AP属于CAP理论的东东,而CAP理论作为分布式系统的基石,所以在这里我对分布式系统和CAP理论做一个总结。
分布式系统
目前的互联网应用用户数量越来越多,产生的数据规模也越来越大,应用系统必须支持高并发访问和海量数据处理的需求,显然这是集中式架构无法解决的问题,于是分布式系统成为了主角,在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。
布式系统的核心是可扩展性,通过对服务、存储的扩展,来提高系统的处理能力,通过对多台服务器协同工作,来完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。另外不出现单点故障,单点不影响整体,也是分布式系统的设计目标之一。
由于分布式系统的特点,所以在分布式环境中更容易出现问题,例如节点之间通信失败、网络分区故障、多个副本的数据不一致等,为了更好地在分布式系统下进行开发,专家们提出了一系列的理论,其中具有代表性的就是 CAP 理论。
什么是CAP
CAP
CAP 理论可以表述为,一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三项中的两项。
在分布式中P是必须要有的,所以分布式有CP和AP两种模式。AP的就是可用性强,一致性弱;CP就是一致性强,可用性弱。我们可以把强弱理解成优缺点。
一致性
指“所有节点同时看到相同的数据”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,等同于所有节点拥有数据的最新版本。我们可以更深入的理解一致性,它是指任何的读写都应该看起来是“原子”的,或串行的,写后面的读一定能读到前面写的内容,所有的读写请求都好像被全局排序;
可用性
指“任何时候,读写都是成功的”,即服务一直可用,而且是正常响应时间。我们平时会看到一些公司的对外说自己系统稳定性已经做到 3 个 9、4 个 9,即 99.9%、99.99%,这里的 N 个 9 就是对可用性的一个描述,叫做 SLA,即服务水平协议。比如我们说年度 99.99% 的 SLA,则计算公式如下:
1年 = 365天 = 8760小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
是不是很牛逼,系统一年里只有52.6分钟不能提供服务。
分区容忍性
指“当部分节点出现消息丢失或者分区故障的时候,分布式系统仍然能够继续运行”,即系统容忍网络出现分区,并且在遇到某节点或网络分区之间网络不可达的情况下,仍然能够对外提供满足一致性和可用性的服务。
分区容忍性和可用性的区别
分区容忍性和可用性二者很像,在这里我们做一下简单的总结:
分区容错性:因为网络等硬件引起的问题,一台服务器崩溃了,保证能在其他服务器上也能顺利完成业务。
可用性:因为软件代码层面的问题,一台服务器上的服务崩溃了,保证能在其他服务器上完成该业务。
二者主要区别是:分区容错性更偏向于硬件引起的问题;可用性更偏向于软件代码层面的问题。
在分布式系统中,由于系统的各层拆分,P 是确定的,CAP 的应用模型就是 CP 架构和 AP 架构。分布式系统所关注的,就是在 Partition Tolerance 的前提下,如何实现更好的 A (系统可用性)和更稳定的 C(数据一致性)。
CP和AP的典型应用
CP典型应用就是电商的产品价格,商家修改价格后要实时生效。
AP的典型应用就是各大内容网站的点赞和评论功能,用户不太在意点赞和评论的实时性,更在意的时查看感兴趣内容的可访问性
原创不易,如果文章帮到了您,劳烦点赞转发!