软件架构-分布式系统,集群

    再也不是我们熟悉的单体时代了!!!,单体时代,我很怀恋-_-

  我们亲眼见证了很多组件都从单机走向了集群,比如Redis,rabbitmq,kafka, elasticsearch, Mysql等。趋势就是技术会演变地越来越复杂,相应地提供的服务越来越好。

  和单体服务相对应的就是集群,或者分布式系统。在一些文档中,经常出现distributed system, cluster,两个词意思上大差不差,但使用多了,就有一些语义山的区分。

集群是一种物理形态,把服务放在一起提供服务,不管里面具体怎么实现。分布式是一种设计架构。通常来说,集群是多个节点做同一件事,比如tomcat集群,分布式是过个节点做不同的事。类似于水平扩展和垂直扩展。

  集群和分布式都有很多概念和理论。最基本的就是高可用(A),一致性(C),分区容错(P),合称CAP理论。

  何为分布式?各个节点通过网络通信,对外提供服务。在分布式系统中,网络和节点是核心概念。并且它们都是有可能出现故障的,那我们如何让系统提供尽可能好的服务呢?这里的"好"是可以细分为不同的指标,不同用户需求一样。这就引出了CAP理论。

  其中,CA很好理解,P如何理解呢?Patition Tolerance,意思就是当网络(节点)出现故障时,节点(子网络)无法通信时,出现分区,系统还能继续提供服务。这基本要求我们在设计系统时,不能因为节点间无法通信,整个系统就不提供服务,通俗来说就是鸡蛋不能装在一个篮子中,也即不能一损俱损,从这点看,P很重要,绝大多数分布式系统都要满足,也即数据要有副本。可以说P是分布式设计的基本出发点,其他两个则是衍生的问题

  总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。这就是redis,rabbitmq,kafka虽然都推荐使用集群,但是我们仍然可以使用单机版, 单机版就是集群的退化,其满足CP,不满足A。当服务不挂掉,我们希望提供的服务能尽可能的好,这时就需要在A和C中选择了,其实就是可用和可靠的问题。

  在设计分布式系统时,我们一个基本原则就是数据要有副本,并存储在不同的节点上,保证P。那么剩下就是A和C了。

  由CAP又可以引申出BASE理论,这里不细究了。

  软件架构,听的最多的是微服务架构,还有什么pass,saas,iaas等

 

 

 

 

参考博客:软件架构概述

     CAP定理的含义 

     CAP理论该怎么理解,AP,CP问题

posted @ 2020-12-22 14:46  懂得了才能做一些改变  阅读(229)  评论(0)    收藏  举报