![](https://img-blog.csdnimg.cn/img_convert/6419c68c153565291c58521f9668dacf.jpeg)
百度百科:
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务.现代负载均衡技术通常操作于网络的第四层或第七层,这是针对网络应用的负载均衡技术,它完全脱离于交换机、服务器而成为独立的技术设
![](https://img-blog.csdnimg.cn/img_convert/a8b5bb9fc54a43cee03943e9aa7c53d1.png)
1.负载均衡有哪些种类
常见的负载均衡分三类:DNS负载均衡,硬件负载均衡,软件负载均衡
1)DNS负载均衡
DNS负载均衡本事就是DNS解析同给一个域名可以返回不同的IP地址, 比如访问百度www.baidu.com 北方用户解析后获取的地址是61.135.165.224(北京机房的IP) ,南方用户解析后获取的地址是14.215.177.38(深圳机房的IP)
![](https://img-blog.csdnimg.cn/img_convert/4db4795d1429c9913d2041e5a34e24cd.png)
(图片来自网络)
优点 | 缺点 |
|
|
2)硬件负载均衡
硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。
![](https://img-blog.csdnimg.cn/img_convert/5612df679659420ce2cfb36d455d31e7.png)
(图片来自网络)
优点 | 缺点 |
|
|
常用的有如下几种:
![]() | A10 | 基本都在100万元以上。 |
![]() | F5 | 最主流的硬负载均衡器。便宜的20万以上,贵的100多万。,性能是百万级,200万/秒-800万/秒都有 |
![]() | Redware | 几十万到上百万均有 |
![]() | 深信服 | 乞丐版低配12万元起价。 |
3)软件负载均衡
软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。
常用的有如下几种:
DNS:最原始的负载均衡方式,名字就已经说明了一切,不用细说了。
LVS:最常用的软件负载均衡。我见过的国内百万级用户的架构,基本都是靠它顶的。 性能是十万级,据说说能达到80万/秒
Nginx:也是现在流行的、常用的负载均衡方案之一。性能是万级 大概能到5W/秒
优点 | 缺点 |
基于特定环境 配置简单,使用灵活 成本低廉,可以满足一般的负载均衡需求。 |
|
2. 负载均衡的常见算法
轮询:最简单的策略,按照顺序轮流分配到服务器上,不会考虑服务器本身状态,比如性能等因素
SpringCloud 中的默认策略 RoundRobinRule就是一种轮询策略,工作方式如下:
声明一个计数器AtomicInteger
每次执行策略的时候计数器数量+1,并根据总服务实例数量取模,得到轮询的服务实例编号,算法是(当前数+1)%serverCount,如果有2个服务第一次(0+1)%2=1,第二次(1+1)%2=0
加权轮询:负载均衡系统根据服务器你权重进行任务分配,解决不同服务器处理能力有差异的问题
SpringClode 中的 WeightedResponseTimeRule 策略,可以理解为一种加权轮询,SpringClode启动一个30秒执行的定时任务,每个服务实力计算全重,然后通过权重值 来确定那台服务器得到更多的请求
负载最低优先:负载均衡系统将任务分配给当前负载最低的服务器,Ngnix用HTTP请求数来判断服务器状态
性能最优优先:负载最低优先算法是站在服务器的角度来进行分配,性能最优算法是站在客户端的角度来进行分配,优先分配到处理快的服务器,比如抽样统计部分任务的相应时间来判断服务器的处理速度
Hash类:源地址hash,将源于一个IP地址的任务分配到同一个服务器进行处理,适用于存在事务会话的业务