系统架构师 百分网手机站

系统架构师知识:负载均衡

时间:2017-06-13 19:01:21 系统架构师 我要投稿

系统架构师知识:负载均衡

  负载均衡(Load Balance),顾名思义,是把服务的并发请求均衡地负载到后端多个具有相同能力的服务进行处理分担,以廉价有效透明的方式扩展网络设备或服务的带宽,增加吞吐量,增强服务的整体处理能力,提供服务的灵活性和可用性。

系统架构师知识:负载均衡

  1、什么是负载均衡?

  常见的典型的负载均衡应用场景:

  (1)、web集群:将大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间。

  (2)、MapReduce:单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给⽤户,系统处理能⼒得到大幅度提高。

  2、负载均衡算法

  负载均衡算法是负载均衡设备(包括虚拟设备或相关软件)在执行负载均衡调度,选择具体处理的后端服务的时候使用的调度和分发的逻辑。

  负载均衡的算法只是规定了调度和分发的逻辑,在不同的负载均衡方案中都可能使用相同和(或)类似的算法,它只是负载均衡方案的一部分。

  常见的主流负载均衡算法包括:

  (1)、轮询算法:Round Robin/Weight Round Robin Scheduling

  轮询算法通过依次轮叫的方式依次将请求调度不同的.后端服务器(Real Server)。通常可以分为普通轮询和加权轮询两种方式。算法的优点是简洁且无状态。

  算法简单表示为:i = ( i + 1 ) mod n

  (2)、Hash算法: 随机数Hash,Sources Hashing Scheduling

  Hash算法,又叫取余算法。一般是对请求报文中的某项数据(key,一般常用客户端来源IP)计算Hash值,然后按机器数量(n)取模。

  算法简单表示为:idx = Hash(key) % n

  Hash算法中,Key的选择常用实践如下:

  a、请求时间或随机数

  特点是简单,具有一定分散性,但不稳定,一般用于要求不高的负载均衡场景。

  b、来源IP

  特点是简单。如果客户的分布比较广,这种方式分散性较好。但如果较多的客户请求来源于同一IP(公司网络通过路由器上网),分散效果较差。

  大多负载均衡设备都支持这种算法,著名的nginx和LVS等软件也支持。

  (3)、一致性Hash算法:Consistency Hash Scheduling

  一致性Hash算法最常用于分布式缓存(如memcached、redis等)的定位,但同时也可以在系统或程序中用于负载均衡,该算法本来的意义就在于分散负载和快速定位。

  推荐阅读:截至目前看过的一致性Hash算法最佳介绍请猛击这里。

  (4)、最少连接或请求数: (Weight)Least Connection/Request Scheduling

  最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。

  算法主要逻辑是,调度设备或服务记录后端服务器接受请求的计数,每次请求总是发给计数最小的服务器处理。

  (5)、最大空闲:Most idle First(基于监控CPU,内存,带宽等综合评估)

  (6)、平均最快响应:平均最快响应

  (7)、最少流量:Least Traffic Scheduling

  还有一种常见的就是基于会话的负载实现,但是严格来说Session(一般用于WEB)不能算是算法。Session实现负载均衡的主要过程为:首次请求记录用户的SessionID,然后再通过轮询等算法选择后端服务器,如果用户后续使用同一SessionID发起请求,则无需再选择服务器,直接转发给前面根据SessionID找到的对应的后端服务器。

  3、负载均衡模式

  负载均衡模式主要是指在整体方案中选择从服务网络的哪个层次或哪个产品来实现负载均衡方案。

  (1)、外部模式(RR-DNS)

  RR-DNS,即DNS轮询模式,它的原理是利用DNS服务器支持同一域名配置多个独立IP指向,然后轮询解析指向IP实现多次访问的调度和分发,实现负载均衡。

  它的主要特点为:

  a、负载均衡实现与后端服务完全没有关系,有DNS在本地解析指向实现轮询调度。这个方面来看性能最佳效率最高。

  b、DNS服务无法检测到后端服务器是否正常,在TTL失效前,会一直指向失效的服务器,这就要求在实践生成中,必须解决后端服务器的高可用问题。

  c、一般的第三方DNS服务提供商都支持该功能,但如果更新频率高或附带更新逻辑,一般会在系统内自键DNS服务,然后在注册为公共DNS服务。

  (2)、应用层模式

  a、什么是正向和反向代理?

  正向代理:用户通过代理服务访问internet, 把internet返回的数据转发给用户。正向代理对于整个网络请求,它的角色实际是客户端,代理客户对外的访问请求。

  反向代理:接受internet上用户的请求,转发给内部的多台服务器处理,完成后转发后端服务器的返回给对应的用户。反向代理对于整个网络请求,它的角色实际是服务器,代理接受(accept)所有用户的请求。

  b、反向代理应用模式

  常见的反向代理应用模式,比如通过 Apache, nginx等Web服务器软件实现WEB应用的负载均衡和高可用。

  利用反向代理软件实现负载均衡是性价比较高的模式。

  (3)、网络层模式

  a、IP转换

  IP转换模式的负载均衡一般是在网络的IP层实现,通过报文改写的方式实现VIP到多个内部IP的转发调度,以达到负载均衡的效果。

  它的主要特点包括:

  网络层方案,效率较高,稳定性较好;可与操作系统内核结合;工业级模式和方案;大部分商业设备和产品都以该方式为主;LVS的基本原理也类同。

  b、IP转换之LVS

  LVS(Linux Virtual Server),是中国人(98年)写的工业级的负载平衡调度解决方案,章文嵩博士是该开源软件创始人。也是目前业界最流行的软件方式实现负载均衡的模式之一。LVS也是利用IP转发的原理实现大多数有商业产品实现的能力,并做了部分优化,主要有三种模式的应用。

  (a)、通过NAT(Network Address Translation)实现虚拟服务器(VS/NAT)

  (b)、通过IP隧道实现虚拟服务器(VS/TUN)

  (c)、通过直接路由实现虚拟服务器(VS/DR)

  关于LVS的介绍文章非常多,这里就不再详细介绍了,推荐参考阅读<<构建高性能web站点>>和<<大型网站技术架构>>这两本书中关于负载均衡的部分章节。

  c、IP转换之负载均衡设备

  F5等负载均衡设备同样是在网络层实现负载均衡,但一般而言造价较为昂贵,性价比较低。