分布式高可用架构之道
上QQ阅读APP看书,第一时间看更新

1.3.2 分布式架构

分布式架构可以简单分为集中式架构和非集中式架构。

1.集中式架构

在很多场景下,我们的请求都会汇总到一台服务器上,由这台服务器统一协调我们的请求和其他服务器之间的关系。这种由一台服务器统一管理其他服务器的方式就是分布式体系结构中的集中式架构(也称为Master/Slave架构),如图1-7所示,其中统一管理其他服务器的服务器是主,其他服务器是从。

图1-7 集中式架构

系统内所有的业务都先由Master处理,多个Slave与Master连接,并将自己的信息汇报给Master,由Master统一进行资源和任务调度并存储集群节点的状态,然后Master根据这些信息将任务下达给Slave。Slave执行任务并将结果反馈给Master。

集中式结构最大的特点就是部署结构简单。这是因为集中式系统的中央服务器往往是多个具有较强计算能力和存储能力的计算机,为此中央服务器进行统一管理和任务调度时,无须考虑对任务的多节点部署,而节点服务器之间无须通信和协作,只要与中央服务器通信协作即可。

集中式架构的应用场景非常多,比如SVN、Borg、Kubernetes的集群管理机制都是这样的。

下面介绍Kubernates的集群管理机制。

Kubernetes(常简称为k8s)是用于自动部署、扩展和管理容器化(Containerized)应用程序的开源系统,它旨在提供跨主机集群的自动部署、扩展以及运行应用程序容器的平台,支持一系列容器工具,包括Docker等。Kubernetes架构如图1-8所示。

图1-8 Kubernetes集中式架构

Kubernetes也是典型的集中式结构,一个Kubernetes集群主要由Master节点和Worker节点组成,以及客户端命令行工具Kubectl和其他附加项。

2.非集中式架构

集中式结构对中心服务器性能的要求很高,而且存在单点瓶颈和单点故障问题。为了解决这个问题,分布式领域中又出现了另一个经典的系统结构,即非集中式结构,也叫作分布式结构,如图1-9所示。

图1-9 非集中式架构

在非集中式结构中,没有中央服务器和节点服务器之分,所有的服务器地位都是平等(对等)的。相比于集中式结构,非集中式结构降低了某一个或者某一簇计算机集群的压力,在解决了单点瓶颈和单点故障问题的同时,还提升了系统的并发度,比较适合大规模集群的管理。

比较典型的非集中式架构系统有Akka集群、Redis集群和Cassandra集群等。Redis集群在后续的章节会深入讲解,这里我们讲一下Cassandra集群架构。

Cassandra的名称来源于希腊神话,是特洛伊的一位悲剧性的女先知的名字,因此项目的Logo是一只放光的眼睛。

Cassandra的系统架构是基于一致性哈希的完全P2P架构,每行数据通过哈希来决定应该存在哪个或哪些节点中。集群没有Master的概念,所有节点都是同样的角色,彻底避免了整个系统的单点问题导致的不稳定性,集群间的状态同步通过Gossip协议来进行P2P的通信。每个节点都把数据存储在本地,每个节点都接受来自客户端的请求。每次客户端随机选择集群中的一个节点来请求数据,对应接受请求的节点将对应的key在一致性哈希的环上定位由哪些节点存储这个数据,将请求转发到对应的节点上,并将对应若干节点的查询反馈返回给客户端,具体如图1-10所示。

图1-10 Cassandra系统架构图