分布式系统CAP原理个人理解

单体系统与分布式系统区别

在分布式系统中,服务之间通常是分离 的,对于单体系统而言,一处启动相当于各个服务都启动,分布式系统的服务往往是各自管各自的。比如电商系统,有商品服务订单服务积分服务,单体系统是启动过后三个服务都可以用,但是一旦系统崩了或者系统关机了,三个服务就都不可以用了。分布式系统商品服务启动了,则用户只能看商品,没法看自己买过什么(查看订单),也没法看自己有多少积分,某个服务挂了,并不影响其他服务的正常运行。

有时,为了解决数据库压力,比如电商系统,浏览商品多,而下单少,当下单时时,难免出现锁的发生,读写本应该并行发生,结果可能会出现先写后读的情况,而我们可以将数据库分为读库写库写操作只发生在写库读操作只发生在读库,每当写操作后,都会把写入的数据同步给读库,已达到各司其职,分担压力的效果。

一致性 (Consistency)

系统在执行过某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读到最新的值,这样的系统被认为是具有强一致性的。 等同于所有节点访问同一份最新的数据副本

白话:系统中存在A服务与B服务,A与B各有1个节点,也就是A与B共有2个节点。数据库存在Num一值为0,有U1和U2两个用户,当U1通过A服务修改了Num为1后,则U2通过B服务立即访问Num的数据,B服务应该返回给U2的数据应该为1而不是其他。

可用性 (Availability)

每一个操作总是能够在一定的时间内返回结果,这里需要注意的是"一定时间内"和"返回结果"。一定时间指的是,在可以容忍的范围内返回结果,结果可以是成功或者失败。 对数据更新具备高可用性

白话:系统中存在A服务与B服务,A与B各有1个节点,也就是A与B共有2个节点。数据库存在Num一值为0,有U1和U2两个用户,当U1通过A服务修改了Num为1后,则U2通过B服务立即访问Num的数据,B服务返回给U2的数据要么是1要么是查询错误(熔断或降级),而不是没响应。

分区容忍性(Partition-tolerance)

理解为在存在网络分区的情况下,仍然可以接受请求(满足一致性和可用性)。这里的网络分区是指由于某种原因,网络被分成若干个孤立的区域,而区域之间互不相通。还有一些人将分区容错性理解为系统对节点动态加入和离开的能力,因为节点的加入和离开可以认为是集群内部的网络分区

白话:系统中存在A服务与B服务,A与B各有1个节点,也就是A与B共有2个节点。数据库存在Num一值为0,有U1和U2两个用户,当U1通过A服务修改了Num为1后,则U2通过B服务立即访问Num的数据,AP情况下,没有发生分区问题则B服务返回给U2显示正常数据,若发生分区问题则B服务是返回个旧数据或者返回个提示(等待服务器之间同步数据)。CP情况下,没有发生分区问题则B服务返回给U2显示正常数据,若发生分区问题则B服务是无响应状态或者返回个提示(等待同步时间过长导致的熔断或降级)。

CAP选择组合

一般来讲,一个分布式系统中无法顾全三者,比如某个系统为集群部署,集群内有节点{A,B},用户1在节点A将某个数据从ONE改成TWO,然后用户2在节点B读取改数据,此时如果发生分区问题,则节点A的数据暂时无法到达节点B,那么节点B有两个选择,要么给用户2个旧数据也就是ONE,要么等待节点A把数据传过来,这种情况可以证明可用性与一致性在分区情况下无法顾全。
而如果不保证分区容忍性的话,则系统就不是分布式系统,因为假如系统有多个节点,如果一个节点发生分区问题其他节点也都不能用的话,这个系统其实就相当于是个单体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值