分布式系统

如果觉得还可以 记得关注一下公众号哦!一起交流学习!
在这里插入图片描述

  • 分布式系统是若干系统的集合

  • 从进程角度来说,两个程序分别运行在两个主机的两个进程上,他们互相协作完成同一个功能们也可以称作为分布式系统!

  • 微服务架构更偏向于业务,而分布式更偏向于机器!

  • 分布式虽然可扩展性强,但是也带来一系列的问题:

    • 典型的Session问题,单机环境下Session通常会存储在服务器里面,多台机器情况下,会导致用户一直重复登录,当然解决的方案也有很多:比如Redis为介质存储Session,或者Session同步都可以。
    • 多台服务器,势必会产生多个服务,如果想要更改配置文件,当服务多的时候,想更改配置文件会导致修改变的尤其的繁杂;同样解决方案也很简单,例如:使用disconf、diamond、doozer、etcd、zookeeper等来搭建一个配置中心!
    • 分布式事物问题:当多台机器完成一个操作时,比如商品下单,当多个人的情况下,就会哦出现超卖的情况!使用分布式锁可以解决这个问题,当用户获取锁之后才能对库存进行修改!
  • CAP:

    • C(一致性):更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性

    • A(可用性):即可用性,所有的节点都保持高可用性。注意,这里的高可用还包括不能出现延迟,比如如果节点B由于等待数据同步而阻塞请求,那么节点B就不满足高可用性。也就是说,任何没有发生故障的服务必须在有限的时间内返回合理的结果集。

    • P(分区容错性):即分区容忍性,这里的分区是指网络意义上的分区。由于网络是不可靠的,所有节点之间很可能出现无法通讯的情况,在节点不能通信时,要保证系统可以继续正常服务。

    • CAP原理说,一个数据分布式系统不可能同时满足C和A和P这3个条件。所以系统架构师在设计系统时,不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。由于网络的不可靠性质,大多数开源的分布式系统都会实现P,也就是分区容忍性,之后在C和A中做抉择。

    • 分析三个CAP的场景
      • 在保证C和P的情况下
        • 为了保证数据一致性,data1需要将数据复制给data2,即data1和data2需要进行通信。但是由于网络是不可靠的,我们系统有保证了分区容忍性,也就是说这个系统是可以容忍网络的不可靠的。这时候data2就不一定能及时的收到data1的数据复制消息,当有请求向data2访问number数据时,为了保证数据的一致性,data2只能阻塞等待数据真正同步完成后再返回,这时候就没办法保证高可用性了。所以,在保证C和P的情况下,是无法同时保证A的。

      • 在保证A和P的情况下

        • 为了保证高可用性,data1和data2都有在有限时间内返回。同样由于网络的不可靠,在有限时间内,data2有可能还没收到data1发来的数据更新消息,这时候返回给客户端的可能是旧的数据,和访问data1的数据是不一致的,也就是违法了C。也就是说,在保证A和P的情况下,是无法同时保证C的。

      • 在保证A和C的情况下

        • 如果要保证高可用和一致性,只有在网络情况良好且可靠的情况下才能实现。这样data1才能立即将更新消息发送给data2。但是我们都知道网络是不可靠的,是会存在丢包的情况的。所以要满足即时可靠更新,只有将data1和data2放到一个区内才可以,也就丧失了P这个保证。其实这时候整个系统也不能算是一个分布式系统了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值