集群小结

原本互不相关的n(n > 1)台计算机,以某种方式被组织起来,协同地去完成一些任务,这一“组”机器即为一个集群。

LB(Load Balancing)集群:负载均衡集群

当用单台机器对外提供服务时,随着客户量的不断增加,其所具备的资源将有可能无法满足客户的需求。一旦大量客户并发地请求服务,后端的计算,存储,网络等资源将会吃紧。这种情况下,对客户的服务质量将大大下降(响应变慢),或者根本无法再为用户提供服务。

要解决这个问题,努力方向主要有两个:一是为这台机器增加资源(或换机器),让它变得更强大;二是增加更多的机器,组织成集群,来分担压力。第一种方法叫”scale on”,即:向上扩展,着眼于机器本身,在垂直方向上做文章;第二是”scale out”,即:向外扩展,自己不变,多找几个帮手。

scale on是容易想到的做法,在软件层面不需要做改变。只要增加或升级内存,cpu,磁盘这些硬件即可。问题是:1. 硬件不可能无限制的增加,总是有一个极限存在;2. 随着硬件个数的增加,耗费在协调上的资源也会相应增加,整个机器的能力未必就会随着硬件水平的提升而线性提升;3. 从第二点可以看出,若花费n倍的价钱去提升机器硬件,未必就能获得n倍的能力提升,因为有相当一部分能力被用在了协调上,这部分损耗会随着加入硬件数目的增加而变大。

可以看出,scale on所做的扩展是有上限的,而客户的并发请求是没有上限的。因此,这种方式只能解决某一范围内的问题,并非长久之计。


一台机器尽其所能也无法完成的工作,可以找其它机器过来帮忙,把压力分散出去。工作量大就加机器,工作量再大,就再加机器,就这样加下去,没有上限。通过增加或减少机器来提升或降低对外提供服务的能力。

容易想到,此时需要一个机构来组织协调这些机器,让他们来一起应对客户的请求。该机构最基本的功能就是将客户的请求分发给各个机器去处理。这个功能就是所谓的LB(Load Balancing,负载均衡),此类集群则叫做负载均衡集群。

HA(High Availability)集群:高可用集群

以LB集群为例,负载均衡节点显然是十分关键的,若该节点不能工作,整个服务将不可用。要保证服务的可用性,必须要为这些关键节点准备好后备力量,一旦主力节点不可用,后备节点要能及时发现并进行接管。

main节点在工作的时候,substitution处于待命状态,以某种方式(如心跳)监控main节点的健康状态,一旦确认main挂掉了,就将main的工作接手过来。当然,实际的处理过程要比这里所描述的复杂的多。

HP(High Performance)/HPC(High Performance Computing)高性能集群/高性能计算集群

考虑一下,若要用单台机器在本地对海量(TB,PB级)数据进行处理,该怎么做?

这些待处理的数据要被输入到磁盘中进行存储,程序若要加工处理这些数据,必须从磁盘中读取这些数据,即:将数据载入内存。

若要完成数据的存储,此机器当然要有海量的存储能力。从磁盘加载数据到内存,超大的内存量是必须的。除此之外,存储设备必须要有极高的I/O性能,否则,存储或读取数据所耗费的时间将是难以忍受的。当一切就绪,程序开始加工数据时,则需要数量够多,性能够强的cpu,除非对处理结果没有时效性要求,能够长时间等待(做数据处理,通常就是为了要了解当前客户的需求状况,基于处理结果来调整相应的策略以满足客户,如果基于半年前的结果来调整策略以应对当前的客户,显然是不科学的,所以,长时间等来的一个结果,其意义可能就不大了)。

如此强大的单机,即使可以做出来,其费用也是非常高昂的。解决办法是”scale on”,找更多的机器一起来做这件事。将整体数据进行分割,每台机器负责(存储、计算)一部分数据,最后将处理结果整合起来。

manager负责调度其它节点,我们向manager节点存储数据,实际上并不会存到manager节点自身的存储设备中。而是由它调度,将数据切割分布到其管控的节点之中,这种方式叫做“分布式存储 ”。数据存储完毕,我们要对数据进行加工处理的话,其处理过程也不是在manager节点上进行的。manager会调度相应节点去启动处理进程,处理该节点上存放的数据,处理结果由manager汇总,这种方式叫做”分布式计算“。

该类集群得以成形的两大关键是:1. 分布式文件系统;2. 计算任务拆分机制。Hadoop的HDFS和Map/Reduce框架就对应于这两点。

由于关注的问题点不同,产生了上述所谓的LB、HA、HP集群

LB用于应对高并发,HA则侧重于服务的可用性,HP用于海量计算场景。其实,对一个业务量很大的后台系统来说,高并发是肯定要面对的问题,负载均衡是必须的。业务量很大,可以理解为,一旦服务不可用,会损失很大,那么高可用也是要做的。最后,由于业务量很大,产生的数据自然很多,要从这些数据中获得有价值的信息,就需要对它们进行加工处理,这个时候就需要HP集群了。