漫话:如何给女友解释什么是负载均衡

周末晚上,和女友去电影院,准备看晚上的DC的海底动做冒险电影——海王。在入口处,人不少,有几个引导人员时不时的指挥观众从不一样的入口进入影院内。咱们站在队伍的尾端。算法

Load balancing,即负载均衡,是一种计算机技术,用来在多个计算机(计算机集群)、网络链接、CPU、磁盘驱动器或其余资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。浏览器

为何须要负载均衡

咱们在平常生活中常常免不了要去一些比较拥挤的地方,好比地铁站、火车站、电影院、银行等。其实,根据咱们的经验,不管是买票,仍是排队入场,这些场所通常都会设置多个服务点或者入口的。缓存

可是,若是没有人引导的话,大多数状况下,最近的入口会挤满人。而哪些距离较远的服务点或者入口就宽松不少。服务器

这种状况下,就会大大浪费资源,由于若是能够把这些排队的人很好的分散到各个入口的话会大大缩短排队时间。markdown

其实,网站的建设也是同样的。咱们在《如何给女友介绍什么是分布式》中提到过,为了提高网站的服务能力,不少网站采用集群部署,就像话剧院有多个入口同样。网络

而当用户集中访问网站的时候,若是没有任何机制来疏导用户的话,彻底随机或者就近原则的话,那么就会致使某些服务器的流量很大,而另一个服务器的qps很小。这不只严重的浪费了资源,并且还会致使拉长用户访问网站的RT,影响用户的体验。更严重的可能直接拖垮那些流量大的服务器。负载均衡

这时候,就须要一个协调者,来均衡的分配这些用户的请求,可让用户的能够均匀的分派到不一样的服务器上。分布式

《如何给女友介绍什么是分布式》中,咱们说过,为了提高饭店的服务能力,饭店可能会雇佣多个厨师,而这些厨师就组成了一个厨师集群。而当用户在店内点菜的时候,就须要一个专业人员可以把全部客户的菜单均匀的分配给店内的厨师。这样才能最大程度的提高饭店的服务能力。工具

什么是负载均衡

前面提到过了,为了提高网站的各方面能力,咱们通常会把多台机器组成一个集群对外提供服务。然而,咱们的网站对外提供的访问入口都是一个的,好比www.taobao.com。那么当用户在浏览器输入www.taobao.com的时候如何将用户的请求分发到集群中不一样的机器上呢,这就是负载均衡在作的事情。oop

负载均衡(Load Balance),意思是将负载(工做任务,访问请求)进行平衡、分摊到多个操做单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

负载均衡分类

想要实现负载均衡,其实有不少种作法,在深刻介绍负载均衡以前,要先介绍一个概念,那就是OSI七层模型。

OSI是一个开放性的通讯系统互连参考模型,他是一个定义得很是好的协议规范。

OSI模型有7层结构,每层均可以有几个子层。 OSI的7层从上到下分别是 七、应用层;六、表示层;五、会话层;四、传输层;三、网络层;二、数据链路层;一、物理层;

其中高层(即七、六、五、4层)定义了应用程序的功能,下面3层(即三、二、1层)主要面向经过网络的端到端的数据流。

在这七层模型种,高层次都是依赖于低层次的。层次越高,使用起来越方便。

咱们常常听到的一些和计算机网络有关的概念中:

telnet、HTTP、FTP、NFS、SMTP、DNS等属于第七层应用层的概念。

TCP、UDP、SPX等属于第四层传输层的概念。

IP、IPX等属于第三层网络层的概念。

ATM、FDDI等属于第二层数据链路层的概念。

了解了网络协议的七层模型之后,再来看看负载均衡。咱们能够很明确的一点是,负载均衡是要在网络传输中作文章的。而要在网络传输过程搞事情,那么这七层模型就势必躲不开。

因此,根据负载均衡技术实如今OSI七层模型的不一样层次,是能够给负载均衡分类的。

常见的实现方式中,主要能够在应用层、传输层、网络层和数据传输层作文章。因此,工做在应用层的负载均衡,咱们一般称之为七层负载均衡、工做在传输层的咱们称之为四层负载均衡。

大体能够分为如下几种,其中最经常使用的是四层和七层负载均衡:

二层负载均衡

负载均衡服务器对外依然提供一个VIP(虚IP),集群中不一样的机器采用相同IP地址,可是机器的MAC地址不同。当负载均衡服务器接受到请求以后,经过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。

三层负载均衡

和二层负载均衡相似,负载均衡服务器对外依然提供一个VIP(虚IP),可是集群中不一样的机器采用不一样的IP地址。当负载均衡服务器接受到请求以后,根据不一样的负载均衡算法,经过IP将请求转发至不一样的真实服务器。

四层负载均衡

四层负载均衡工做在OSI模型的传输层,因为在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP之外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,之后经过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

七层负载均衡

七层负载均衡工做在OSI模型的应用层,应用层协议较多,经常使用http、radius、dns等。七层负载就能够基于这些协议来负载。这些应用层协议中会包含不少有意义的内容。好比同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。

负载均衡工具

市面上有不少开源的负载均衡的工具或软件,基本都是基于前面提到的方案实现的,大多数是工做在第七层和第四层的。Nginx/LVS/HAProxy是目前使用最普遍的三种负载均衡软件。

LVS

LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。使用LVS技术要达到的目标是:经过LVS提供的负载均衡技术和Linux操做系统实现一个高性能、高可用的服务器群集,它具备良好可靠性、可扩展性和可操做性。从而以低廉的成本实现最优的服务性能。

LVS主要用来作四层负载均衡。

Nginx

Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议连接,以及一个负载均衡器和一个HTTP缓存。

Nginx主要用来作七层负载均衡。

HAProxy

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

HAProxy主要用来作七层负载均衡。

负载均衡服务器在决定将请求转发到具体哪台真实服务器的时候,是经过负载均衡算法来实现的。负载均衡算法,是一个负载均衡服务器的核心。

就像电影院门口的引导员同样,他根据什么把排队人员分配到具体的入口呢?是哪一个入口人少吗?仍是哪一个入口速度最快?仍是哪一个入口最近呢?若是来了一个VIP怎么办呢?

负载均衡算法能够分为两类:静态负载均衡算法和动态负载均衡算法。

静态负载均衡算法包括:轮询,比率,优先权

动态负载均衡算法包括: 最少链接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式。

  • 轮询(Round Robin):顺序循环将请求一次顺序循环地链接每一个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

  • 比率(Ratio):给每一个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每一个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。

  • 优先权(Priority):给全部服务器分组,给每一个组定义优先权,BIG-IP 用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中全部服务器出现故障,BIG-IP 才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。

  • 最少的链接方式(Least Connection):传递新的链接给那些进行最少链接处理的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。

  • 最快模式(Fastest):传递链接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

  • 观察模式(Observed):链接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

  • 预测模式(Predictive):BIG-IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。(被BIG-IP 进行检测)

  • 动态性能分配(Dynamic Ratio-APM):BIG-IP 收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。

  • 动态服务器补充(Dynamic Server Act.):当主服务器群中因故障致使数量减小时,动态地将备份服务器补充至主服务器群。

  • 服务质量(QoS):按不一样的优先级对数据流进行分配。

  • 服务类型(ToS): 按不一样的服务类型(在Type of Field中标识)负载均衡对数据流进行分配。

  • 规则模式:针对不一样的数据流设置导向规则,用户可自行。

以上,就是目前实现负载均衡的主流算法。不一样的负载均衡服务器会选择不一样的算法。就像电影院和火车站可能会选用不一样的引导策略同样。火车站可能会把行李少的旅客分配到一个专门的入口,可能给即将发车的旅客分派到特快入口,手持可扫描车票的用户单独分配到特殊入口等。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息