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