快速理解高性能HTTP服务端的负载均衡技术原理

一、前言

在一个典型的高并发、大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是做为高性能系统优化环节中必不可少的方案。HTTP负载均衡的本质上是将Web用户流量进行均衡减压,所以在互联网的大流量项目中,其重要性不言而喻。php

本文将以简洁通俗的文字,为你讲解主流的HTTP服务端实现负载均衡的常见方案,以及具体到方案中的负载均衡算法的实现原理。理解和掌握这些方案、算法原理,有助于您从此的互联网项的技术选型和架构设计,由于没有哪种方案和算法能解决全部问题,只有针对特定的场景使用合适的方案和算法才是最明智的选择。html

即时通信网注:本文中所说起的HTTP负载均衡方案和算法,并不彻底适用IM即时通信Socket长链接的负载均衡,由于IM长链接、有状态的特性,跟HTTP这种短链接、无状态的特征是矛盾的,因此请勿盲目套用。但,一个完整的IM系统是由HTTP短链接+IM长链接组成,于是本文内容虽不能套用于IM长链接的负载均衡方案,但能够用于您IM的高并发、大用户量的HTTP短链接的方案设计。前端

(本文同步发布于:http://www.52im.net/thread-1950-1-1.html算法

二、相关文章

深刻阅读如下文章,有助于您更好地理解本篇内容:数据库

腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面后端

以微博类应用场景为例,总结海量社交系统的架构设计步骤缓存

IM开发基础知识补课(四):正确理解HTTP短链接中的Cookie、Session和Token安全

三、什么是负载均衡?

早期的互联网应用,因为用户流量比较小,业务逻辑也比较简单,每每一个单服务器就能知足负载需求。随着如今互联网的流量愈来愈大,稍微好一点的系统,访问量就很是大了,而且系统功能也愈来愈复杂,那么单台服务器就算将性能优化得再好,也不能支撑这么大用户量的访问压力了,这个时候就须要使用多台机器,设计高性能的集群来应对。性能优化

那么,多台服务器是如何去均衡流量、如何组成高性能的集群的呢?服务器

此时就须要请出 「负载均衡器」 入场了。

负载均衡(Load Balancer)是指把用户访问的流量,经过「负载均衡器」,根据某种转发的策略,均匀的分发到后端多台服务器上,后端的服务器能够独立的响应和处理请求,从而实现分散负载的效果。负载均衡技术提升了系统的服务能力,加强了应用的可用性。

负载均衡的基本原理就像下图这样:

四、主流负载均衡方案有几种?

目前市面上最多见的负载均衡技术方案主要有三种:

1)基于DNS负载均衡;

2)基于硬件负载均衡:好比F5

3)基于软件负载均衡:好比Nginx、Squid。

三种方案各有优劣,DNS负载均衡能够实如今地域上的流量均衡,硬件负载均衡主要用于大型服务器集群中的负载需求,而软件负载均衡大可能是基于机器层面的流量均衡。在实际场景中,这三种是能够组合在一块儿使用。

下面分别来详细讲讲这些方案。

4.1 基于DNS负载均衡

基于DNS来作负载均衡实际上是一种最简单的实现方案,经过在DNS服务器上作一个简单配置便可。

其原理就是:当用户访问域名的时候,会先向DNS服务器去解析域名对应的IP地址,这个时候咱们可让DNS服务器根据不一样地理位置的用户返回不一样的IP。好比南方的用户就返回咱们在广州业务服务器的IP,北方的用户来访问的话,我就返回北京业务服务器所在的IP。

在这个模式下,用户就至关于实现了按照「就近原则」将请求分流了,既减轻了单个集群的负载压力,也提高了用户的访问速度。

使用DNS作负载均衡的方案,自然的优点就是配置简单,实现成本很是低,无需额外的开发和维护工做。

可是它也有一个明显的缺点:当配置修改后,生效不及时。这个是因为DNS的特性致使的,DNS通常会有多级缓存,因此当咱们修改了DNS配置以后,因为缓存的缘由,会致使IP变动不及时,从而影响负载均衡的效果。

另外,使用DNS作负载均衡的话,大可能是基于地域或者干脆直接作IP轮询,没有更高级的路由策略,因此这也是DNS方案的局限所在。

4.2 基于硬件负载均衡

硬件的负载均衡那就比较牛逼了,好比大名鼎鼎的 F5 Network Big-IP,也就是咱们常说的 F5,它是一个网络设备,你能够简单的理解成相似于网络交换机的东西,彻底经过硬件来抗压力,性能是很是的好,每秒能处理的请求数达到百万级,即 几百万/秒 的负载,固然价格也就很是很是贵了,十几万到上百万人民币都有。

由于这类设备通常用在大型互联网公司的流量入口最前端,以及政府、国企等不缺钱企业会去使用。通常的中小公司是不舍得用的。

采用 F5 这类硬件作负载均衡的话,主要就是省心省事,买一台就搞定,性能强大,通常的业务不在话下。并且在负载均衡的算法方面还支持不少灵活的策略,同时还具备一些防火墙等安全功能。可是缺点也很明显,一个字:贵。

4.3 基于软件负载均衡

软件负载均衡是指使用软件的方式来分发和均衡流量。软件负载均衡分为7层协议 和 4层协议。

网络协议有七层,基于第四层传输层来作流量分发的方案称为4层负载均衡,例如 LVS;而基于第七层应用层来作流量分发的称为7层负载均衡,例如 Nginx。这两种在性能和灵活性上是有些区别的。

基于4层的负载均衡性能要高一些,通常能达到 几十万/秒 的处理量,而基于7层的负载均衡处理量通常只在 几万/秒 。

基于软件的负载均衡的特色也很明显,便宜。在正常的服务器上部署便可,无需额外采购,就是投入一点技术去优化优化便可,所以这种方式是互联网公司中用得最多的一种方式。

五、经常使用的均衡算法有哪些?

上面讲完了常见的负载均衡技术方案,那么接下来我们看一下,在实际方案应用中,通常可使用哪些均衡算法?

主要的均衡算法有:

1)轮询策略;

2)负载度策略;

3)响应策略;

4)哈希策略。

下面来分别介绍一下这几种均衡算法/策略的特色。

5.1 轮询策略

轮询策略其实很好理解,就是当用户请求来了以后,「负载均衡器」将请求轮流的转发到后端不一样的业务服务器上。这个策略在DNS方案中用的比较多,无需关注后端服务的状态,只药有请求,就日后端轮流转发,很是的简单、实用。

在实际应用中,轮询也会有多种方式,有按顺序轮询的、有随机轮询的、还有按照权重来轮询的。前两种比较好理解,第三种按照权重来轮询,是指给每台后端服务设定一个权重值,好比性能高的服务器权重高一些,性能低的服务器给的权重低一些,这样设置的话,分配流量的时候,给权重高的更多流量,能够充分的发挥出后端机器的性能。

5.2 负载度策略

负载度策略是指当「负载均衡器」日后端转发流量的时候,会先去评估后端每台服务器的负载压力状况,对于压力比较大的后端服务器转发的请求就少一些,对于压力比较小的后端服务器能够多转发一些请求给它。

这种方式就充分的结合了后端服务器的运行状态,来动态的分配流量了,比轮询的方式更为科学一些。

可是这种方式也带来了一些弊端,由于须要动态的评估后端服务器的负载压力,那这个「负载均衡器」除了转发请求之外,还要作不少额外的工做,好比采集 链接数、请求数、CPU负载指标、IO负载指标等等,经过对这些指标进行计算和对比,判断出哪一台后端服务器的负载压力较大。

所以这种方式带来了效果优点的同时,也增长了「负载均衡器」的实现难度和维护成本。

5.3 响应策略

响应策略是指,当用户请求过来的时候,「负载均衡器」会优先将请求转发给当前时刻响应最快的后端服务器。

也就是说,无论后端服务器负载高不高,也无论配置如何,只要以为这个服务器在当前时刻能最快的响应用户的请求,那么就优先把请求转发给它,这样的话,对于用户而言,体验也最好。

那「负载均衡器」是怎么知道哪一台后端服务在当前时刻响应能力最佳呢?

这就须要「负载均衡器」不停的去统计每一台后端服务器对请求的处理速度了,好比一分钟统计一次,生成一个后端服务器处理速度的排行榜。而后「负载均衡器」根据这个排行榜去转发服务。

那么这里的问题就是统计的成本了,不停的作这些统计运算自己也会消耗一些性能,同时也会增长「负载均衡器」的实现难度和维护成本。

5.4 哈希策略

Hash策略也比较好理解,就是将请求中的某个信息进行hash计算,而后根据后端服务器台数取模,获得一个值,算出相同值的请求就被转发到同一台后端服务器中。

常见的用法是对用户的IP或者ID进行这个策略,而后「负载均衡器」就能保证同一个IP来源或者同一个用户永远会被送到同一个后端服务器上了,通常用于处理缓存、会话等功能的时候特别好用。

六、本文小结

基于运营成本的考虑,目前在互联网项目中,HTTP服务端的负载均衡的具体解决方案,用的最多的仍是Nginx(及其分支,好比淘宝的Tengin),若是有时间,建议能够把Nginx下载下来,仔细研究研究它的负载均衡原理,以及它所提供的几种负载均衡算法,理论联系实际来学习就更能促进你对相关知识的理解和掌握了。

得益于Nginx这种开源免费的高性能方案,它们间接地促进了互联网的繁荣,感谢这些伟大开源方案背后的无私贡献者们!

附录:更多架构设计方案的文章精选

浅谈IM系统的架构设计

简述移动端IM开发的那些坑:架构设计、通讯协议和客户端

一套海量在线用户的移动端IM架构设计实践分享(含详细图文)

一套原创分布式即时通信(IM)系统理论架构方案

从零到卓越:京东客服即时通信系统的技术架构演进历程

蘑菇街即时通信/IM服务器开发之架构选择

腾讯QQ1.4亿在线用户的技术挑战和架构演进之路PPT

微信后台基于时间序的海量数据冷热分级架构设计实践

微信技术总监谈架构:微信之道——大道至简(演讲全文)

如何解读《微信技术总监谈架构:微信之道——大道至简》

快速裂变:见证微信强大后台架构从0到1的演进历程(一)

17年的实践:腾讯海量产品的技术方法论

移动端IM中大规模群消息的推送如何保证效率、实时性?

现代IM系统中聊天消息的同步和存储方案探讨

IM开发基础知识补课(二):如何设计大量图片文件的服务端存储架构?

IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议

IM开发基础知识补课(四):正确理解HTTP短链接中的Cookie、Session和Token

WhatsApp技术实践分享:32人工程团队创造的技术神话

微信朋友圈千亿访问量背后的技术挑战和实践总结

王者荣耀2亿用户量的背后:产品定位、技术架构、网络方案等

IM系统的MQ消息中间件选型:Kafka仍是RabbitMQ?

腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面

以微博类应用场景为例,总结海量社交系统的架构设计步骤

快速理解高性能HTTP服务端的负载均衡技术原理

>> 更多同类文章 ……

(本文同步发布于:http://www.52im.net/thread-1950-1-1.html

相关文章
相关标签/搜索