负载均衡

一、负载均衡架构演进

       一台标准化的服务器所能承受的并发量是有限的。在业务发展初期,单台服务器即可满足业务要求,但是随着业务的发展,用户群体越来越大,服务所承受的并发量也会越来越来大,当超过单台服务器所承受的并发极限时,如何解决大并发量问题?目前业界通用的解决方案是用多台服务器处理,即集群技术。

      如何将流量均衡分布到集群?本文将介绍从一百个并发到亿级并发情况下如何将流量负载到服务器集群方案演进。

1.1 单机处理流程及并发极限计算

1.1.1 单机处理流程

       在业务初期,用户量和服务访问量都很低,在不考虑容灾的情况下,一台服务器即可满足业务场景需要。搭建一台单机服务器,我们需要定义一个域名,在DNS服务器配置域名和服务器IP的映射关系,并在服务器上部署应用程序。

       当用户通过访问域名请求服务时,首先会请求DNS服务器,得到域名对应的服务器ip,然后通过ip地址找到后端应用服务器,经后端服务器处理,后端服务器将请求结果返回给用户。

                                                                      单机架构处理流程

1.1.2  单机并发量计算

并发数定义:1s种处理的请求数。

场景定义:假如服务的处理时间为30ms,其中CPU处理时间10ms,IO等待时间为20ms,采用4核8G服务器。

最佳线程数=\frac{任务执行时间}{任务执行时间-IO时间} *CPU核数

在上述场景中,最佳线程数为12。

对于大于7.X版本的tomcat(支持NIO),当线程数为12时,此时的并发量最大,因为此时CPU没有因为等待io导致空闲,也没有不合理的线程切换导致的CPU损耗。

假设忽略线程切换导致的cpu开销,1s内单核可处理\frac{1s}{10ms} =100个请求,4核8G服务器可支持400并发量请求。

1.2 nginx负载均衡

       当服务并发量超过400时,单台服务器已无法满足需求,此时需要多台服务器进行处理。如何将流量分发到多台服务器?此时需要用到负载均衡组件。这里nginx负载均衡组件。

1.2.1 niginx负载均衡处理流程

       当用户请求后端服务时,请求首先会到达nginx服务器,nginx服务器将请求分发到后端服务器,后端处理完后将数据返回给nginx服务器,nginx服务器将结果数据返回给用户。

                                                                    nginx负载均衡处理流程


1.2.2 nginx原理

          nginx是一个七层负载均衡组件,nginx由一个master进程和多个worker进程构成,主线程用于创建和管理work进程的功能。当work进程创建监听socket以后,会fork对个子进程,子进程可对nginx服务器的请求进行监听。

          work进程接受到nginx请求后,根据特定负载均衡策略,选择目标服务器,将请求转发到目标服务器进行处理,目标服务器处理完后,将结果返回至work进程,然后由work进程将结果返回给用户。


          nginx采用的是epllo多路复用模型(NIO模型),nginx几乎不处理业务相关的逻辑,仅仅只做请求的转发。所以cpu处理时间极短,这也是nginx可支持高并发的根本原因。假设处理时间为0.1ms,对于一个4核8G的机器来说,1s内可处理的请求数为4W。

1.3 LVS负载均衡

        LVS是工作两层到四层的负载均衡器,由章文嵩博士发明,是国内最早出现的自由软件项目之一。

1.3.1 LVS负载均衡架构处理流程

        当请求进入LVS服务器时,在传输层(四层)或数据链路层(两层),将报文的ip地址或mac地址更改位目标服务器的IP地址或mac地址,请求处理完后,将结果返回给用户。

1.3.2 LVS负载均衡原理

NAT模式(网络地址转换)

原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!




DR模式(直接路由模式)

原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上


TUN模式(IP隧道模式)

原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。


LVS在数据链路层(二层)进行传输层(四层)进行负载均衡,相比于nginx在应用层(七层)的负载均衡,少了拆包逻辑和序列化操作,并且没有业务逻辑,所以CPU占用很低。此外LVS负载均衡不用建立连接,不用创建socket资源,,不用创建用户态进程和线程,仅仅对请求进行转发,所以内存占用基地。

LVS的瓶颈主要在CPU软中断,网卡性能和ipvs内核模块的限制。一台普通机器部署LVS可抗住20w左右的并发。


1.4 硬件负载均衡

硬件负载均衡是通过专门的负载均衡设备,对流量进行分发,目前应用比较广泛的有F5负载均衡器。

处理流程如下:

1、客户发出服务请求到VIP

2、BIGIP接收到请求,将数据包中目的IP地址改为选中的后台服务器IP地址,然后将数据包发出到后台选定的服务器

3、后台服务器收到后,将应答包按照其路由发回到BIGIP

4、BIGIP收到应答包后将其中的源地址改回成VIP的地址,发回客户端,由此就完成了一个标准的服务器负载平衡的流程。

相比于普通计算机,硬件负载均衡设备做了很多定制化处理,使其能承受更大的并发量。但是价格也比较昂贵,目前一台F5负载均衡器报价30W左右。




1.5 DNS轮询负载均衡

当有亿级并发,已超越单台硬件负载均衡极限时,此时可以采用多机房部署,一个域名申请多个公网ip,每个ip对应一个机房。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容