软件架构-分布式系统,集群
再也不是我们熟悉的单体时代了!!!,单体时代,我很怀恋-_-
我们亲眼见证了很多组件都从单机走向了集群,比如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等
参考博客:软件架构概述

浙公网安备 33010602011771号