引言
我们知道,分布式系统就是将具有独立计算能力的系统单元,部署在不同的机器上。那么,如何有效的管理这些机器之间的协同工作,就是一个很大的难题。目前,大体有两种典型的分布式系统架构:集中式与非集中式。
集中式架构
我们可以将分布式系统中的每一个节点比作操作系统中进程或者线程的概念。操作系统诞生的原因之一就是为了解决如何高效、合理的运行用户的多个任务请求。所以,操作系统对我们的任务请求抽象成一个个进程,然后将我们的CPU、内存等资源公平、合理的分配给每一个进程;并且为了最大化硬件资源的使用,操作系统提供了多种进程调度算法。我们看到,操作系统类似所有进程的“老大”,我们在分布式系统中也同样需要这样一个角色,用来协调和管理集群中的每一个节点,我们它称为 “Master” ,而把它管理的小弟们称为 “Slave”或者"worker" 。我们把它称为集中式架构。注意,这里的集中式并不代表我们传统的将所有服务或者数据部署到一台机器上的那种单机架构。集中式架构如图所示:
这种架构的应用场景有很多。其中一种表现形式是 MySQL 、 Redis 的读写分离策略,主负责写,从负责读, master 定期将数据同步给 slave ;而另外一种表现形式则是,系统内所有的业务也先由 master 处理,多个 slave 与 master 连接,并将自己的信息汇报给 master ,由 master 统一进行资源和任务调度并存储集群节点的状态,然后 master 根据这些信息,将任务下达给 slave ;slave 执行任务,并将结果反馈给 master 。比如 nginx 与 php-fpm 的 master-worker 机制,以及集群中的 Borg 、Kubernetes 的集群管理机制都是这样。上一篇文章中的分布式互斥中的协调者也是一种实现方式。也是下面我们以 Kubernetes 为例,看一下集中式架构的一种代表实现。
集中式架构的代表 — Kubernetes
Kubernetes 是用于自动部署、扩展和管理容器化应用程序的开源系统。在集群的节点上运行的容器化应用,可以进行自动化容器操作,包括自动化部署、调度和在节点间弹性伸缩等,大大降低了服务运维的成本。