终于把服务器负载均衡和客户端负载均衡讲清楚了
负载均衡概念
是指单台服务器性能达到极限时通过服务器集来横向增加系统的吞吐量和性能。⼀说负载均衡我们想到的就是Ngnix,不和否认,Ngnix是负载均衡分⼚棒的实现⽅式,之⼀!但是⾯试的时候⾯试官往往希望能够通过⼀个螺丝钉能够牵连出整个车间,如果单单回复Ngnix,想通过⾯试可能还⽋些⽕候。
服务器负载均衡
服务器负载均衡就是我们平时说的负载均衡,是指在服务器上游做服务分发,常⽤的⽅式有⼀下⼏种:
DNS域名解析负载均衡;假设我们的域名指向了多个IP地址,当⼀个域名请求来时,DNS服务器机进⾏域名解析将域名转换为IP地址是,在1:N的映射转换中实现负载均衡。DNS服务器提供简单的负载均衡算法,但当其中某台服务器出现故障时,通知DNS服务器移除当前故障IP。
反向代理负载均衡;反向代理只值对服务器的代理,代理服务器接受请求,通过负载均衡算法,将请求转发给后端服务器,后端服务返回给代理服务器然后代理服务器返回到客户端。反向代理服务器的优点是隔离后端服务器和客户端,使⽤双⽹卡屏蔽真实服务器⽹络,安全性更好,相⽐较于DNS域名解决负载均衡,反向代理在故障处理⽅⾯更灵活,⽀持负载均衡算法的横向扩展。⽬前使⽤⾮常⼴泛。当然反向代理也需要考虑很多问题,⽐如单点故障,集部署等。
负载均衡服务器有哪些IP负载均衡;我们都知道反向代理⼯作到HTTP层,本⾝开销相对⼤⼀些,对性能有⼀定影响,LVS-NAT是⼀种卫浴传输层的负载均衡,它通过修改接受的数据包⽬标地址的⽅式实现负载均衡。Linux2.6.x以后版本内置了IPVS,专注⽤于实现IP负载均衡,故⽽在Linux上IP负载均衡使⽤⾮常⼴泛。LVS-DR⼯作在数据链路层,⽐LVS-NAT更霸道的时候它直接修改数据包的MAC地址。LVS-TUN ——基于IP隧道的请求转发机制,将调度器收到的IP数据包进⾏封装,转交给服务器,然后服务器返回数据,通过调度器实现负载均衡。这种⽅式⽀持跨⽹段调度。总结⼀下,LVS-DR和LVS-TUN都适合响应和请
求不对称的Web服务器,如何从它们中做出选择,取决于你的⽹络部署需要,因为LVS-TUN可具有跨地域性,有类似这种需求的,就应该选择LVS-TUN。
客户端负载均衡
相⽐较服务器负载均衡⽽⾔,客户端负载均衡是⼀个⾮常⼩众的概念,但是⾯试在问道负载均衡相关知识的时候却会刻意了解候选⼈的知识⼴度。客户端负载均衡是在spring-cloud分布式框架组件Ribbon中定义的。我们在使⽤spring-cloud分布式框架时,同⼀个service⼤概率同时启动多个,当⼀个请求奔过
来时,那么这多个service,Ribbon通过策略决定本次请求使⽤哪个service的⽅式就是客户端负载均衡。在spring-cloud分布式框架中客户端负载均衡对开发者是透明的,添加@LoadBalanced注解就可以了。客户端负载均衡和服务器负载均衡的核⼼差异在服务列表本⾝,客户端负载均衡服务列表在通过客户端维护,服务器负载均衡服务列表由中间服务单独维护。
通过对以上知识的理解,⼤家能够对负载均衡有的较为全⾯的认识,下来我再简单的和⾯试官聊⼀聊常见的负载均衡算法:
随机,通过随机选择服务进⾏执⾏,⼀般这种⽅式使⽤较少;
轮训,负载均衡默认实现⽅式,请求来之后排队处理;
加权轮训,通过对服务器性能的分型,给⾼配置,低负载的服务器分配更⾼的权重,均衡各个服务器的压⼒;
地址Hash,通过客户端请求的地址的HASH值取模映射进⾏服务器调度。
最⼩链接数;即使请求均衡了,压⼒不⼀定会均衡,最⼩连接数法就是根据服务器的情况,⽐如请求积压数等参数,将请求分配到当前压⼒最⼩的服务器上。
其他若⼲⽅式。