文章目录
-
- 负载均衡背景
- 如何实现负载均衡呢 常见的负载均衡有三种
- 负载均衡的作用范围
-
负载均衡的的常用算法
负载均衡背景
在互联网的发展早期 由于用户量较少业务需求比较简单 对于软件应用来说 我们只需要一台高配的服务器既可以完成整个业务的支撑 这样的软件架构成为单体架构
随着用户量的增加服务器的请求量也在增加在这个过程中单体架构会产生两个问题
-
软件性能的逐步下降 访问延迟越来越高
-
单体架构容易出现单点故障 也就是说出现了一个问题导致整个应用不可用
为了解决整个问题,我们引用了集群话的部署架构 也就是说把一个软件应用同时部署于多台服务器上类似于
-
架构变化带来的问题
-
客服端请求如何均匀的分布在多台目标服务器上
-
如何检测目标服务器的健康状态使得客户端请求不向已经岩机的服务器发送请求?
负载均衡的核心就是让客户端的请求合理的均匀的分发到多台目标服务器上 由于请求被多个节点分发使服务器的的性能得到有效的提升
-
如何实现负载均衡呢 常见的负载均衡有三种
- 基于DNS实现负载均衡
只需要在DNS的服务器上针对某个域名做多个ip映射
- 工作原理
通过域名去访问某个网站的时候会通过DNS服务器进行域名解析得到ip地址
DNS服务器可以随机的分配一个ip地址进行访问
DNS还可以就近得到访问原则 从而缩短通信的距离 提升整个网站的请求效率
DNS的优点 缺点
-
缺点
由于DNS多级缓存的特性 当我们去修改的同时ip变更不及时 从而影响负载均衡的效果
-
优点
成本低 ,配置简单,不需要额外的开发和维护成本
-
基于硬件设备实现负载均衡
-
把他理解为一个网络设备 类似于网络交换机 性能比较好 可以每秒钟处理百万级别的请求 同时支持多个负载均衡算法 非常灵活的配置 不同的负载策略 还具有防火墙等安全功能 硬件设备室商业化的产品 他没有专门的售后来支持 企业不需要精力去维护 常见的硬件设备F5 由于硬件负载设备比较贵 一般应用大型的银行 政府 电信等产业
-
-
基于软件实现负载均衡
-
是通过一些开源的软件或者商业软件来完成 负载均衡 常见的软件负载均衡有Nginx. LVS.HAProxy等
现在有绝大多数的互联网使用 主要是因为免费 企业不需要投资较高的成本 , 开源 不同企业的需求有差异 可以在开源软件上进行二次开发 灵活性比较高
-
这三种方式没有好坏之分 只有是否合适 根据自己的需求来选择
负载均衡的作用范围
-
网络通信层面来实现请求的分发 而在网络架构中基于OSI的模型 又分为七层网络模型 我们可以在某些网络上去做请求的分发处理 因为可以根据这个特性 可以将负载均衡分为 二层负载 三层负载 四层负载以及 七层负载
-
二层负载 就是基于Mac地址来实现 请求分发 一般采用虚拟Mac的方式来实现服务器收到请求之后通过动态分配后端服务器的实际Mac地址去进行响应从而实现负载均衡
-
三级负载 是基于ip层的负载 是通过虚拟ip来实现通过访问虚拟ip服务器收到请求后根据获取到实际的ip地址去做分发
-
四层负载 是通过请求的报文中的目标地址和端口来进行负载
-
七层负载 是基于应用层的负载 服务器段可以根据http协议中的请求的报文信息来决定分发到那一台目标服务器上
负载均衡的的常用算法
轮训
多台服务器去按照顺序轮训的方式去进行逐一负载 这样的话每个服务器可以获取相同的请求次数
-
随机
根据随机算法 获得一个目标服务器地址 由于有随机性 每一台服务器获得的请求数量不一定均衡
-
一致性 hash
有时候会根据有着相同请求的hash码的请求永远发送到同一台目标节点上
-
最小连接数
根据服务器的请求数量来决定请求的分发权重 也就是说请求更少的结点将会获取更多的请求
-
加权轮询
可以根据加权的比例每台服务器上获取的请求数量 加权比例应该怎么算呢 比如有10个请求 服务器1号加权是60% 服务器2号加权是40% 在这个过程中我们可以采用随机算法我们取1-10之间的随机数 如果是在1-6中放到服务器1中 如果是6-10放到服务器2号