负载均衡(Load Balance)
把任务分摊到多个操作单元上进行执行。
分类:
1.软/硬件负载均衡
软件:是直接通过软件来进行负载均衡,比如nginx或者caddy里面都可以直接配置反代来实现负载均衡,
还有一些专门的工具,比如DNS Load Balance等,linux上IPVS也有这个功能。好处是方便简单,
坏处是均衡软件本身也会消耗一定的资源(常见的有DNS/反向代理/NAT(VIP))。
硬件:则是直接买相关硬件设备(负载均衡器),安装在服务器和外部网络之间,成本高,但是效果好。
2.本地/全局负载均衡
本地负载均衡是针对本地范围内的服务器群做负载均衡,全局负载均衡是针对不同地理位置,不同网络结构的服务器做负载均衡,
基本使用的swarm或者k8s这种集群控制软件,可以理解接成本地负载均衡,而那种类似CDN加速的那种均衡方式可以理解成是全局的负载均衡,
全局负载均衡要解决全球用户同一个域名或者IP地址就能访问到离自己最近的服务器获得最快的访问速度,通常多区域都有自己的服务器站点。
部署方式:路由模式、桥接模式、服务直接返回模式
1.路由模式:
服务器的网关必须设置成负载均衡机LAN口地址,且与WAN口分属不同的逻辑网络。所有返回的流量也经过负载均衡。对网络的改动小。
2.桥接模式:
配置简单,直接负载均衡WAN口和LAN口分别连接上行设备和下行服务器,所有服务器与负载均衡在同一逻辑网络中。
3.服务直接返回模式:
WAN口与服务器在同一个网络中,客户端访问负载均衡虚拟IP(VIP),虚拟IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,
服务器直接相应客户端的请求,因此对于客户端而言,相应的IP不是负载均衡的虚拟IP,而是服务器的自身IP。也就是说返回的流量是不经过负载均衡的。
这种方式需要服务器的宽带要足够大。
均衡算法
均衡的策略算法非常多,整体上分为两类,一类是静态的,另一类是动态的。
静态的典型的就是轮训,一个一个按照顺序轮,动态的典型的就是最小连接法,每次都找一个连接数最小的,给他派任务。拆分出很多算法的原因是
每种算法的优缺点并不同,比如轮训就会导致不管是重要还是不重要的都一样排队执行(还有个叫WRR的权重轮训处理这种问题),而最小连接是每次把
任务派给连接数最少的那个,连接数少并不意味着工作压力少,要看每个连接对应多大的工作量是A*B的关系。所以说如果真要手动配置算法,就要结合
实际应用场景来选。