当前位置: 首页 > 科技观察

分布式系统架构之一就是Master-Workers架构

时间:2023-03-17 11:26:46 科技观察

本文转载自微信公众号《木鸟杂记》,作者Munio。转载本文请联系木鸟杂记公众号。分布式系统中有很多经典的套路,就是设计模式。每一种设计模式都可以解决一类经典问题。积累多了,就可以稍作改动,做出取舍,设计出符合自己需求的架构组织。不过好像大家在这方面分享的经验不多,所以打算在以后总结一些工作和学习的经验,不只是备忘,也希望对大家有所帮助。篇幅有限,能力有限,难以面面俱到,或不准确。欢迎指正。每篇文章将分别进行分析,包括概述背景、架构模块和摘要扩展。本文为第一篇文章:Master-WorkersArchitecture。概述Master-Workers架构(粗略翻译为主从架构)是分布式系统中常见的一种组织方式,如GFS中的Master和ChunkServers;MapReduce中的Master和Worker。面对分布式系统中一堆相互分离的机器资源,主从架构是最自然、最直接的组织方式——就像一群人,有一个领导说了算,组织协调为了最大化群体。人的输出能力。这也是计算机系统中普遍存在的分而治之思想的体现。即把一个复杂的系统拆解成若干个相对高内聚、低耦合的子模块,并明确定义其功能边界和交互接口,使系统易于理解、维护和扩展。对于主从架构,主(Master)通常维护集群元信息,然后依赖这些元信息进行调度,从(Workers)通常负责读写具体的数据切片(存储系统)或者作为子任务(计算系统)的执行单元。架构模块的主从架构体系通常由单个Master和多个Worker组成。说句题外话,这里的英文翻译之所以没有使用Slave,是因为我觉得Worker比较中性。当然,单个Master会存在性能瓶颈和可用性问题,通常会有多种解决方案,后面会详细介绍。但是单Master的好处是显而易见的:Master作为控制节点,不需要处理多副本带来的一致性问题,大大降低了实现难度。以我比较熟悉的存储系统架构为例,它的架构图通常是这样的。在master-worker架构中,除了系统内部的Master和Worker外,还有使用系统的外部用户。我们通常称之为**客户端(Client),**Client通过系统暴露的接口(如RPC、HTTP)与系统进行交互。MasterMaster通常存储系统的元信息。什么是元信息?可以理解为集群组织信息在Master大脑中的反映,或者说是一个视图(View):比如集群中有多少个worker,每个worker剩余多少容量,负载是多少,workers存放了哪些哪些数据等等。元信息是如何收集的?主要有两种情况:配置。可以理解为集群静态信息,比如系统初始的worker数量、worker的物理拓扑结构、每个worker的容量等,master在启动时会加载这些配置信息。报告。主要是集群动态信息。Worker在运行时,会主动向Master报告自己的状态,比如Worker是否存活、Worker负载信息、Worker存储了哪些数据等等。系统运行时,Worker会定时通过心跳(Heartbeat)等方式向Master汇报。有了这些元信息,Master就可以掌握整个集群的情况,从而做出一系列的决策,举几个例子:调度(Schedule)。当有新的写数据请求来时,应该分配给哪个Worker呢?通常,会选择负载较小的。平衡。随着工作人员的变化和数据的添加或删除,数据可能不会均匀分布在不同的机器上。在某些机器上形成读写热点,而在另一些机器上造成资源浪费,影响系统的整体性能。因此,需要实时监控和及时迁移。路由(定位/路由)。读写请求来了,不知道找哪个Worker?Master会查询元信息,并给Worker数据对应的信息。Master的可用性可以看出整个系统的可用性都是Master的问题。业界也有很多解决方案,比如:使用主备。也就是做一个master的clone,备份master的所有元数据都要和master的master时刻保持一致。一旦master挂了,分身就会马上跟进。Hadoop后来做了这个。使用共识算法。简单来说,一个委员会是由一堆Master机器组成的,每一次状态的改变都要通过一定的算法达成共识。Google的Spanner就是这样做的。无主。系统中不再有Master,人人平等,然后通过一定的策略,比如一致性哈希(consistenthash),来分工。亚马逊的Dynamo就是这样做的。每个攻略都是一个比较大的话题,以后可以单独开一篇文章。本文限于篇幅,不再展开。Workers在存储系统中,Workers会存储实际的数据,并对外提供数据IO服务。从单机的角度来看,Worker需要设计一个单机的引擎来满足业务需求,高效存储数据。单机引擎设计也是一个大话题,这里简单介绍一下:索引设计:如B+树、LSM-tree、哈希索引等底层系统:是用裸盘还是文件系统。存储介质:使用持久内存、固态硬盘或机械硬盘。从多台机器来看,随着机器数量的增加,系统中单台机器出现故障的概率会大大增加。为了应对此类正常故障,需要自动化运维。机器不可用后应该会自动淘汰,维修后应该方便上线。数据冗余。机器故障后数据不能丢失,所以每份数据必须多份存储,EC算法用于冗余。总结Master-Workers架构是分布式系统中最常用的组织方式。这种架构类似于人类社区的组织。系统的职责被分解。Master收集元信息并根据它安排任务;Workers负责实际的工作量,需要设计一个高效的单机引擎,配合全局冗余。.该架构简单明了,但功能强大。