一、负载均衡的产生背景
互联网早期用户量较少,业务需求比较简单,因此支撑整个软件业务也只需要一个高配的服务器 即可,这种软件架构也就被称为“单体架构”。如下图:
但是随着用户的增加与请求量增加,单体架构会有两个问题!
1.软件性能会下降,访问延迟越来越高;
2.容易出现单点故障,出现一个问题之后会导致整个应用不可用;
为了解决这个问题呢,我们引用了集群化的部署架构,就是把一个软件同时部署在多个服务器上。如下图:
但是架构变化带来了两个问题:
1.请求如何均匀的分发到多台目标服务器上?
2.如何检测目标服务器是否宕机,如果宕机则不向宕机服务器发起请求?
因此为了解决这两个问题,我们才引入了负载均衡的设计。
负载均衡的目的是为了让客户的请求合理的分发到多台服务器上。由于请求被多个节点的分发,使得服务器新能得到提升。
二、如何去实现负载均衡?
1.基于DNS实现负载均衡
如下图:
DNS(域名系统)
实现方式:在DNS服务器上针对某个域名做多个IP映射;
工作原理:用户会访问DNS服务器解析域名,得到一个IP地址(随机),再进行对应访问;
优点:配置简单,成本低,无需额外开发与维护;
缺点:多级缓存,去修改DNS配置时,会因为缓存而导致IP变更不及时,从而影响负载均衡效果;
2.基于硬件实现负载均衡
硬件负载是商业化的产品,一般用于大型银行、政府、电信等企业。一般不接触,这里就不多讲了。
3.软件负载均衡
常见的软件负载均衡技术有Nginx、LVS、HAProxy等,目前互联网企业绝大部分采用的都是软件负载均衡,主要的原因是:1.免费,企业不需要投入较高的硬件成本。2.开源,企业可以基于自己对负载均衡的需求做二次开发,提高灵活性。
三、负载均衡作用范围
负载均衡作用再网络通信层面,来实现网络分发,我们可以再网络层上去做请求分发处理,根据分层的特性,基于OSI七层参考模型还可以分为:
二层负载:mac地址进行负载
三层负载:IP地址进行负载
四层负载:软件进行负载,比如Nginx
七层负载:http等进行负载
四、负载均衡常用算法
1.轮询算法。如下图:
2.随机算法
就如同古时候皇上翻牌,都是随机。
3.hash算法
对具有相同的hash码的请求,永远发送到同一台目标节点上。
4.最小连接数算法
根据请求少的节点,将会获得更多的求情。
--------以上就是我给大家简单梳理的负载均衡啦❤--------