1.负载均衡产生的被警告
在互联网的发展早期,由于业务量较少,业务需求也比较简单,对于软件应用来说,我们只需要一台高配的服务器即可完成整个业务的支撑,这样的软件架构,我们称之为单位架构。
随着用户量的增加,服务器的请求量也随着增加,那么在这个过程中,单体架构会产生两个问题,第一个是软件的性能逐步下降,访问延迟越来越高,第二个单体架构容易出现单点故障,也就是说出现一个问题导致整个应用不可用,为了解决这个问题,我们引入了集群化的部署架构,也就是说,把一个软件应用部署在多台服务器上、
架构的变化带来两个问题,第一个是客户端请求如何均匀的分发到多台目标服务器上?第二个是如何检测目标服务器的健康状态使得客户端请求不向已经宕机的服务器发送请求?
为了解决这两个问题,引入了负载均衡这样的一个设计,简单来说负载均衡核心的目的是让客户端的请求合理的均匀的分发到多台目标服务器上,由于请求被多个节点分发,使得服务器的性能,得到有效提升
2.负载均衡的实现技术
基于DNS实现负载均衡
只需要在DNS服务器上针对某个域名做多个ip映射就行,工作原理 当用户通过域名访问某个网站时,会先通过DNS服务器进行域名解析,得到IP地址,DNS服务器可以随机的分配一个ip地址进行访问,这样就可以实现目标服务集群的一个请求分发,除此之外,DNS还可以根据不同的地域,分配就近的机房IP,比如说长沙的小伙伴,可以得到湖南就近的机房IP,优点是配置简单,实现成本低,无需要额外的开发和维护成本,缺点由于DNS多级缓存的特性,当我们修改DNS配置,会因为缓存导致IP变更不及时,从而影响负载均衡的效率
基于硬件实现负载均衡
类似于网络交换机,性能比较好,支持多种负载均衡算法,可以非常灵活配置不同的负载策略,具有防火墙的安全功能,硬件负载是商业化的产品,有专门的售后来支持,所以企业不需要花精力来维护,F5这样的设备是比较常见的硬件负载设备,硬件负载设备的价格比较贵,一般会应用到大型银行、政府、电信等企业
基于软件实现负载均衡
通过一些开源的软件,或者商业软件来完成负载均衡的功能,常见的是nginx LVS HAProxy等,目前互联网企业绝大部分使用的是软件负载均衡,主要原因是第一个免费,企业不需要投入较高的硬件成本,第二个开源,不通过的企业对于不同的负载均衡的需求有差异,可以基于开源软件去做二次开发,第三个灵活性比较高
3.负载均衡的作用范围
作用在网络通信层来实现请求的分发,在网络架构中基于OSI模型,又分为七层网络模型
意味着,我们可以在网络某些分层上去做请求分发处理,这样可以根据一个特性,对于负载均衡的作用范围,又可以分为二层负载,三层负载和四层负载七层负载,二层负载基于,MAC地址来实现的请求分发,一般采用虚拟MAC的方式来实现,服务器收到请求后,通过动态分配后端服务器的实际MAC地址,去进行响应从而实现负载均衡,三层负载时基于IP层负载,一般是通过虚拟IP的方式,外部请求通过访问虚拟IP 服务器收到请求后根据获得实际IP地址去做分发,四层负载根据通过请求报文中的目标地址和端口进行负载, Nginx F5 LVS可以实现四层负载,7层负载是基于应用层的负载,也就是说服务器端根据HTTP协议请求的报文信息,来决定请求分发到哪一台服务器上
比如说可以根据cookie 消息体 RequestHeader等这样一些信息去做分发
4。负载均衡常用的算法
决定当前客户端请求匹配到目标服务器集群中哪一个节点,常见的负载均衡算法有,
轮训,多台服务器按照顺序轮训的方式去逐一进行负载,这样每一个服务器都可以获得相同的请求次数
随机, 根据随机算法,获得一个目标服务器地址,
一致性Hash 有时候对于具有相同的hash码的请求,永远发送到同一台目标节点上,
最小连接数 根据目标服务器的请求数量来决定请求的分发权重,目标服务器集群中,请求更少的节点将会获得更多的请求,这是一种负载均衡比较好的策略,真正能够实现负载均衡