其意思就是分摊到多个操做单元上进行执,操做单元能够是web服务器、ftp服务器、企业关键应用服务器等.前端
不能理解成平均分配到每一个操做单元上,由于每台服务器的承载能力不尽相同,硬件配置、网络带宽等差别,因此并不能平均的分配,须要参考的因素不少.nginx
当http代理(好比浏览器)向web服务器请求某个URL后,web服务器能够经过http响应头信息中的Location标记来返回一个新的URL.web
这意味着HTTP代理须要继续请求这个新的URL,完成自动跳转.
算法
DNS 负责提供域名解析服务,当访问某个站点时,实际上首先须要经过该站点域名的DNS服务器来获取域名指向的IP地址,
在这一过程当中,DNS服务器完成了域名到IP地址的映射,一样,这样映射也能够是一对多的,这时候,DNS服务器便充当了负载均衡调度器,
它就像http重定向转换策略同样,将用户的请求分散到多台服务器上,可是它的实现机制彻底不一样。apache
一、能够根据用户IP来进行智能解析.DNS服务器能够在全部可用的A记录中寻找离用记最近的一台服务器。后端
二、动态DNS:在每次IP地址变动时,及时更新DNS服务器.固然由于缓存,必定的延迟不可避免.
浏览器
几乎全部主流的Web服务器都热衷于支持基于反向代理的负载均衡.它的核心工做就是转发HTTP请求.
相比前面的HTTP重定向和DNS解析,反向代理的调度器扮演的是用户和实际服务器中间人的角色:缓存
一、任何对于实际服务器的HTTP请求都必须通过调度器服务器
二、调度器必须等待实际服务器的HTTP响应,并将它反馈给用户(前两种方式不须要通过调度反馈,是实际服务器直接发送给用户)
网络
一、调度策略丰富.例如能够为不一样的实际服务器设置不一样的权重,以达到能者多劳的效果.
二、对反向代理服务器的并发处理能力要求高,由于它工做在HTTP层面.
三、反向代理服务器进行转发操做自己是须要必定开销的,好比建立线程、与后端服务器创建TCP链接、接收后端服务器返回的处理结果、
分析HTTP头部信息、用户空间和内核空间的频繁切换等,虽然这部分时间并不长,可是当后端服务器处理请求的时间很是短时,
转发的开销就显得尤其突出.例如请求静态文件,更适合使用前面介绍的基于DNS的负载均衡方式。
四、反向代理服务器能够监控后端服务器,好比系统负载、响应时间、是否可用、TCP链接数、流量等,从而根据这些数据调整负载均衡的策略。
五、反向代理服务器可让用户在一次会话周期内的全部请求始终转发到一台特定的后端服务器上(粘滞会话),
这样的好处一是保持session的本地访问,二是防止后端服务器的动态内存缓存的资源浪费。
由于反向代理服务器工做在HTTP层,其自己的开销就已经严重制约了可扩展性,从而也限制了它的性能极限.那可否在HTTP层面如下实现负载均衡呢?
NAT服务器:它工做在传输层,它能够修改发送来的IP数据包,将数据包的目标地址修改成实际服务器地址.
NAT是工做在网络分层模型的传输层(第四层),而直接路由是工做在数据链路层(第二层),貌似更屌些。
它经过修改数据包的目标MAC地址(没有修改目标IP),将数据包转发到实际服务器上,不一样的是,实际服务器的响应数据包将直接发送给客户羰,而不通过调度器。
基于IP隧道的请求转发机制:将调度器收到的IP数据包封装在一个新的IP数据包中,转交给实际服务器,
而后实际服务器的响应数据包能够直接到达用户端。目前Linux大多支持,能够用LVS来实现,称为LVS-TUN,与LVS-DR不一样的是,
实际服务器能够和调度器不在同一个WANt网段,调度器经过 IP隧道技术来转发请求到实际服务器,因此实际服务器也必须拥有合法的IP地址。
负载均衡有硬件和软件两种.
硬件层的比较牛逼,将4-7层负载均衡功能作到一个硬件里面,如F5,梭子鱼.
目前主流的软件负载均衡分为四层和七层
LVS属于四层负载均衡,工做在tcp/ip协议栈上,经过修改网络包的ip地址和端口来转发, 因为效率比七层高,通常放在架构的前端.
七层的负载均衡有nginx, haproxy, apache等, 工做在应用层,所以能够将HTTP请求等应用数据发送到具体的应用服务器,
如将图片请求转发到特定的服务器上,总之能够作到更智能的负载均衡,这些功能在四层负载均衡上很差实现,通常放在架构的后面位置,布置在应用服务器前面.
一、轮询(Round Robin)
二、加权轮询(Weighted Round Robin)
三、动态轮询
四、随机
五、最快算法(最快算法基于全部服务器中的最快响应时间分配链接)
六、最少链接(系统把新链接分配给当前链接数目最少的服务器)
服务器集群就是指将不少服务器集中起来一块儿进行同一种服务,在客户端看来就像是只有一个服务器.集群能够利用多个计算机进行并行计算从而得到很高的计算速度,也能够用多个计算机作备份,从而使得任何一个机器坏了整个系统仍是能正常运行.
是将不一样地点的,或具备不一样功能的,或拥有不一样数据的多台计算机经过通讯网络链接起来,在控制系统的统一管理控制下,协调地完成大规模信息处理任务的计算机系统
分布式:一个复杂业务分拆多个子业务,部署在不一样的服务器上. 集群:同一个业务,部署在多个服务器上. 集群是个物理形态,分布式是个工做方式 集群通常是物理集中、统一管理的,而分布式系统则不强调这一点.