负载均衡分类
负载均衡可以理解为任务的分配。当整个后台服务要处理很多任务,那么该选择用哪个机器去处理任务,这往往需要我们做决策,这也即是负载均衡的决策
常见负载均衡系统分类有三类:
- DNS负载均衡
- 硬件负载均衡(负载粒度更大,通常为集群级别)
- 软件负载均衡(负载粒度更小,通常为机器级别)
DNS负载均衡
如上图所示,DNS负载均衡主要用来帮助用户选择最近的服务器进行响应。比如同样一个请求www.baidu.com的请求,DNS负载均衡就可以根据你的地域选择最近的服务器,比如你在广东,就给你选华南地区的服务器进行处理。如果你在东北,就给你选华北服务器进行处理。
优点:实现简单,直接交给DNS服务器处理就好了,可以提升访问速度,因为选择最近的服务器处理嘛
缺点:DNS有缓存,并且有效时间也不短,就算DNS配置更新后,由于缓存原因也会访问到之前的IP,导致负载均衡失败
硬件负载均衡系统
常见的硬件负载均衡设备有:
- A10
- F5
可以理解为是一个挡在一些集群前的一个任务分发器或者路由器
优点:功能强大,可以实现各种负载均衡算法,可支持的并发能力也比较强,软件负载均衡并发量级在十万,那么硬件负载均衡可以到百万级。安全性也高,支持防火墙等
缺点:就是贵(但这其实是我们的缺点),扩展性一般,没办法根据某些场景定制化
软件负载均衡
常见的有:
- LVS(四层架构,即在传输层,(ip+端口)进行负载均衡,TCP/UDP负载均衡),适用性高,基本所有的协议上层协议都是基于传输层的
- Nginx(七层架构,在应用层,基于应用层协议负载均衡,http和https等,你可以看到nginx配置文件配置的时候都要写完成的url,协议+ip+端口)
总的来说都是对任务的分发,不过实现的架构中角色种类和职责不同。
优点:便宜,随便一台服务器都可以做Nginx或者lvs负载均衡服务器。部署较为简单,配置也比较灵活。
缺点:性能不高,并且安全性一般,没有防火墙功能。
最后:
三种负载均衡系统可以一起使用:
- DNS服务器做为第一层负载均衡,负载均衡到最近的服务器(地域级别)
- 硬件负载均衡粒度更大,可以作为第二层级负载均衡,负载均衡某一个集群上(集群级别)
- 集群内通过Nginx也可以进行负载均衡(机器级别)
ps:上述讲的是架构层面上的负载均衡选型。更细一点来说:无论是dns负载均衡,还是软硬件负载均衡,低层实现分派任务肯定要根据某个算法来做的:常见的有轮训,加权轮训,Hash,最小负载(就是根据服务器的cpu负载,io负载,连接数等选择比较小的机器,然后发任务)等等