集群(Cluster)
指一组计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信,实现分布式计算。在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。
集群技术的分类
- 高可用集群(High Availability,HA):高可用的含义是最大限度地可以使用。从集群的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。
- 负载均衡集群:分为前端负载调度和后端服务两个部分。负载调度部分负责把客户端的请求按照不同的策略分配给后端服务节点,而后端节点是真正提供应用程序服务的部分。与高可用集群不同的是,负载均衡集群中,所有的后端节点都处于活动动态,它们都对外提供服务,分摊系统的工作负载。
- 科学计算集群(High Performance Computing,HPC):高性能计算集群。这类集群致力于提供单个计算机所不能提供的强大计算能力,包括数值计算和数据处理,并且倾向于追求综合性能。HPC 与超级计算类似,但是又有不同,计算速度是超级计算追求的第一目标。最快的速度、最大的存储、最庞大的体积、最昂贵的价格代表了超级计算的特点。
负载均衡(Load Balance)
负载均衡建立在现有网络结构之上,它提供了一种廉价、有效、透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
主要的负载均衡的技术有如下这些:
- DNS 负载均衡:它是最早的负载均衡技术,通过 DNS 来实现,在 DNS 中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中某一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。DNS 负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。
- 代理服务器负载均衡:使用代理服务器,可以将请求转发给内部的服务器,使用这种加速模式显然可以提升静态网页的访问速度。然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台服务器,从而达到负载均衡的目的。
- 地址转换网关负载均衡:支持负载均衡的地址转换网关,可以将一个外部 IP 地址映射为多个内部 IP 地址,对每次 TCP 连接请求动态使用其中一个内部地址,达到负载均衡的目的。
- 协议内部支持负载均衡:除了这三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如 HTTP 协议中的重定向能力等,HTTP 运行于 TCP 连接的最高层。
- 反向代理负载均衡:普通代理方式是代理内部网络用户访问 internet 上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到 internet 上服务器的连接请求发送给代理服务器处理。反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
- 混合型负载均衡:在有些大型网络,由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。
负载均衡从应用的地理结构上又分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance)。
- 本地负载均衡:能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给集群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到集群中,而不需改变现有网络结构、停止现有的服务。 它关注一个地理位置上的设备群,是微观的。
- 全局负载均衡:主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个 IP 地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度。它关注的是一个网络的整体,是对放在不同位置、为完成同一个任务的设备群体做负载均衡,是宏观的。全局负载均衡有以下的特点:
- 实现地理位置无关性,能够远距离为用户提供完全的透明服务
- 除了能避免服务器、数据中心等的单点失效,也能避免由于 ISP 专线故障引起的单点失效
- 解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量
负载均衡又分为硬件均衡服务器和软件均衡服务器:
- 硬件服务器:就是直接购买独立的服务器作为负载均衡服务器,硬件负载均衡效率高,但是价格贵,例如,阿里云已经提供。
- 软件服务器:使用具有代理功能的软件作为转发服务器,比如 Nginx,HAProxy,LVS 等等,软件负载均衡系统价格较低或者免费,效率较硬件负载均衡系统低。
负载均衡的应用(以 IPTV 业务为例)
华灯初上的时候,打开电视机,点播一个你爱看的电影,电影顷刻间就开演了!你可否想过,和你一样点播电视节目的有千家万户,为什么每家每户想看的节目都能及时送到眼前呢?这是怎么做到的呢?
在电视上点播节目是一种 IPTV 业务,被点播的电影、电视剧等节目我们称为内容。向众多用户提供内容是由一个专门的网络完成的,这个网络我们叫它内容分发网络(CDN),我们将这个分发网络上负责给电视传送内容的服务器叫做 CDN 节点(CDN node)。
在网络建设之初、IPTV 用户还较少的时候,这个网络并不庞大,可能一台设备就能轻松处理完全部用户的要求。然而随着业务的发展,用户量和业务量与日俱增,一台设备已经招架不住了。这时我们就需要给这台设备找些帮手。于是我们为这台设备“克隆”一些兄弟,然后将用户的要求分摊给所有兄弟,大家一起共同面对。对于这个网络来说,大家要完成的任务即是负载,如此多队员的合作以及团队运作,即是负载均衡。
大家合作,处理业务的能力是够了,但是任务来了后究竟由谁来处理呢?队员们会不会都不知道应该做什么?会不会都抢着做而打起来?因此必须要有一个领队(CDN Manager)来管理他们,指挥他们谁应该做什么、要达到什么样的目的。在向各队员发出指示之前,领队需要首先统一接收任务,然后分析并分解任务、挑选合适的队员(CDN node)来执行任务,再将任务安排下去由合适的队员具体来执行。在领队的合理安排下,队员们都有条不紊地执行任务,不会出现有的太闲而有的过忙的现象,“CDN 团队”融洽高效地完成了任务。
那么领队如何决定把某个任务或子任务分给哪个队员呢?领队的决定可不是随意做出的,而是相当谨慎且科学的。领队是依据一些策略来做出决定的。这些策略包括用户的网络地址、用户的分组、先到先得规则等。根据这些策略,领队可以把一个大任务分解成多个子任务,让每个队员执行其中一个小任务,大家完成后由领队汇总,达到完成大任务的目的,这样这个任务就会执行得很快(如分布式计算);领队也可以把一批任务中的每一个任务分散到每个队员去分头执行,由队员直接完成这些任务,这样这批任务也会执行得很快。大规模的 CDN 网络通常是一级一级、一层一层的,我们叫它分布式网络,相邻的层级之间形成依赖和备份关系。而你点播的节目最终通常由最靠近你的CDN 节点送达你的电视机,这就是为什么节目总是那么及时地开演。当最靠近你的 CDN 节点出现故障或者服务能力无法提供服务时,领队能够根据依赖和备份策略选取其他合适的节点提供服务。
说到这里,大家应该明白了,负载均衡就是团队运作。为了一个共同的团队目标,位于不同位置上“队员”们在领队的统一调度下,协同工作,将大的任务相对平均地分担起来,把任务完成的更快、更好!在整个网络这个大范围内的负载均衡是全局负载均衡,局部的小范围内的负载均衡是本地负载均衡。
单兵作战到团队作战:
全局负载均衡分布式架构(网络规模大):
大规模网络中,局部的本地负载均衡: