分布式架构的形式

分布式架构形式

简介

如今服务端的架构,开口必提分布式,那么分布式的架构是否有通用的模型或者有一般的规律?
有。分布式系统是有几个通用的模型的,一个是集群类型,一个是服务类型。
两个都叫分布式,基本也涵盖了绝大多数的分布式架构。我们可以深入了解他们的特点。

集群类型的组成

为什么叫做集群类型,因为这种类型的分布式系统中,每个节点都是相同的,他们拥有相同的功能,提供相同的服务。
服务节点:整个分布式体系就是多个功能节点的聚集,可以叫这些节点为服务节点。
控制节点:顺势而为得,你可以想到,这些节点是需要一个管理者,就像一个班级的学生,需要一个老师来管理。这个老师节点可以叫做控制节点。
然而单个控制节点是不可靠的。没错,控制节点通常都是以主备的形式出现的。

切换节点:有时候(并不是全部)这种架构下还会有一个不太被注意到的角色,这个角色位于集群之外,通常是一个100%可用的(绝对可靠的)设备或者服务。
为什么需要这么个设备呢? 假想,主控制器crash,于是备用控制器生效,这个时候有两种方式可以完成备用控制器的生效,
一种是client事先缓存了主备控制节点的列表,在主控失效后,client就直接连接备控;
另一种方案是,借助公司内部一个绝对可用的设备或者服务,该设备感知到主控失效,就把地址切换到备控。
这里第二种方案种,就会存在一个这样的角色,可以叫他为切换节点。采用这种方案好处是不用把主备控制节点都暴露给客户端。

所以一个集群的组成包括成千上万的服务节点+两个控制节点+可能一个切换节点
system composition

集群类型的案例

集群类型的典型案例是HDFS,这是个分布式文件系统,服务节点是提供文件存储服务,控制节点管理服务节点,并且对外提供目录服务,而主备的切换需要自己增加切换节点,比如利用zookeeper。
这个图是hdfs写文件时的流程图,client首先访问控制节点(图中NN),随后根据返回信息再去访问某个或某几个服务节点(图中DN)。这也是所有集群类型的分布式架构运作的基本流程。而图中Switch起切换NN的功能。
HDFS write flow
(图片来自网络,如果作者希望删除请告知)

服务类型的组成

服务类型的架构比较常见的是SOA和微服务,简单点说就是重型服务和轻型服务,两者的差别是,SOA定义了一些规范,包括基于XML以及通过WSDL来描述服务接口。
微服务则强调轻量,小而简单,不限定你的服务调用方式,restful,rpc,只要你喜欢就好,而服务也是比较推荐拆成独立而简单的小服务。
这样的系统中,每个角色都是一个服务,一个对外提供某种调用方式的服务。就像一个优秀的班级,没有班主任,只有学生,每个学生承担班级运营的一部分责任。
所以服务类型的系统组成是N个独立的服务(提供服务注册和发布功能的本身也可以看做是一个服务)。

服务类型的案例

下面这个是一个打车系统的微服务架构,整个系统包含8个服务,服务通过restful形式发布,
dache micro service
(图片来自网络,如果作者希望删除请告知)

集群类型和服务类型的关系

集群类型和服务类型是两种架构形式,两个有很大差别,但是他们却是可以共存的,共存的形式是嵌套。
比如一个集群类型的架构中,每个节点内部的功能通过微服务的架构来实现。
比如一个微服务架构的系统中,某个微服务背后隐藏的一个集群,可是一个集群还叫微服务吗,这样确实比较少见,不过这样子未尝不可,毕竟这也是一个无法拆分下去的功能了。

分布式服务的优点

集群类型架构
扩展性,通过加服务节点就可以大量的增加服务能力。
可靠性,由于服务节点有互为备份的关系,整个系统的服务可靠性是非常强的。
服务类型架构
扩展性,可以灵活增减服务到这个系统中,灵活给服务分配不同的资源。
可靠性,单个服务的异常被隔离在该服务本身。
独立性,单个服务可以独立部署和测试。