alun-chen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

定义

    负载均衡,通俗一点说是各种网络请求负载时,机器间要均衡地处理。即负载的时候要均衡。

    负载均衡一般用于处理高并发的场景。试想象一下,我们以前一直都在部署单应用,如果请求量达到临界点,机器出现负载,则需要做负载均衡来解决。

所以负载均衡一方面是应对高并发的网络请求,解决机器负载问题;另一方面提供均衡的算法,来达到机器平衡处理的目的。

 

负载均衡种类

    负载均衡有多种类型,这里从不同设备的角度来区分。

网络类型负载均衡器                                  

    网络类型负载均衡只有一种,也叫IP负载均衡。

    IP负载均衡其实原理跟CDN差不多,旨在处理不同用户的IP请求,返回就近IP的机器到用户。

 

如下图所示,我们部署了IP负载均衡器,在广州、北京、上海都有相应的机器。用户IP在深圳,直接返回广州的资源到用户。

负载均衡-IP

 

总结

    IP负载均衡提现的是就近原则,哪个机房的IP与用户最近,就返回哪个IP的机器资源。

    所以,IP负载均衡器应用场景一般是部署大型应用时,需要不同地域的快速返回。如微信IM为何那么快,应当在上面部署了一层IP负载均衡器。

    再说在云上,例如国内占比最大的阿里云。如果你想部署应用,需要解决不同地域访问的问题,例如上海与北京。你需要在云为上海上建立VM,再在北京上建立VM。然后在上面部署一层IP的负载均衡器指向北京与上海的VM,问题解决了。

 

 

软件型负载均衡器                                   

    软件型负载均衡器是我们用得最多的,也是包含算法最多的负载均衡器。常见的软件型负载均衡器有Nginx、LVS、HAProxy。

    软件型负载均衡器,是用户来部署软件,来达到负载均衡的目的。

 

为何使用负载均衡器?

    在负载均衡器出来之前,以前的应用一直都是使用单体应用部署方式。

    如下,用户访问网络,然后直接访问机器。

软件负载均衡器发展轨迹-单体应用

 

    那么,如果机器达到瓶颈呢?一般是数据达到瓶颈,去扩展数据层。先抛开这个不讨论,以为我们这里主要讨论负载均衡器。当然,你可以加大机器的配置来增加处理速度,如加强CPU,加大内存。单个机器也有它的瓶颈,再加上加大机器配置到某个临界值时,费用很高。

    这时候,负载均衡器是你的好帮手。

    如下图,用户访问网络,首先经过负载均衡器,负载均衡器在选择特定的服务器到用户。这样,即提高了服务器的处理速度,也在某个程度来说减少了服务器费用。但是更重要的一点,这样可以无限的横向扩展,不断的添加服务器D、E、F.....

软件负载均衡器发展轨迹-多个服务器

 

    很好奇一点,负载均衡器究竟是通过怎么样的算法来访问不同的服务器A、B、C,并且让他们均衡?

    下面,介绍一下负载均很器的算法。

 

负载均衡器算法 - 轮询

    轮询的算法是最简单的,有几种,分别为:顺序、反序、随机轮询。

    循序轮询,顾名思义是首先访问服务器A,再访问B,最后访问C,依次顺序访问。一次访问完全部的服务器叫一个回合。

    反序轮询这里不介绍,跟顺序反过来。

    乱序轮询,是随机访问服务器,访问完所有的服务器为一回合。

    所以,轮询算法是最简单的,只需要在负载均衡器中存储访问过的机器id即可。但是缺点是配套无状态API服务器,不能使用有状态。

 

负载均衡器算法 - hash

    试想一下,如果程序写得简单一点,我们使用session的时候,session都保存在服务器。如果像上面,轮询地访问服务器,第一次session保存在服务器A,第二次session不见了,就出现问题。所以这种办法使用hash。

    hash算法能保证用户访问的服务器永远都是那一台,除非服务器挂了。hash算法可以使用求余算法。公式是:

    用户访问的服务器 = 用户id或用户id的hash值 % 机器数量

    这种算法有一种明显的缺点就是,得到的服务器随着机器数量而改变。即中途服务器数量改变了,用户访问的机器会发生改变。

    所以,这种算法优点是用户的访问永远落在一个服务器中,并且不需要负载均衡的服务器保存任何信息。缺点是随着服务器数量的变化用户访问的服务器也变化。

负载均衡器算法 - 最优服务器

    顾名思义,是选择最优的服务器。选择最优服务器也有2种不同的算法,第一种是返回计算速度最快的服务器,第二种是返回最少请求量的服务器。

    这两种算法都需要把请求服务器的信息保存起来,然后统计出最优的服务器。下次用户访问的时候,落到相应的服务器上。

    所以,这种算法的优点是符合常规思想,放回‘最快’的服务器。但是缺点摆在那里,需要统计服务器的访问量、访问时间,并且做计算。

 

硬件类型负载均衡器                  

    硬件类型的负载均衡器没什么说的,就是购买一个硬件,然后挂在到网络上,分发到不同的服务器。硬件类型是最快,常见有F5。达到几百万/秒的请求。

 

可以关注本人的公众号,多年经验的原创文章共享给大家。

posted on 2018-10-23 13:49  alun-chen  阅读(372)  评论(0编辑  收藏  举报