文章插图
高性能负载均衡
分类及架构
高性能集群的复杂度主要体现在需要增加一个任务分配器,以及为任务选择一个合适的任务分配算法,负载均衡不只是为了计算单元的负载达到均衡状态
负载均衡分类
DNS负载均衡
是最简单也是最常见的负载均衡方式,一般用来实现地理级别的均衡
优点
简单、成本低:负载均衡工作交给DNS服务器处理,无须自己开发或者维护负载均衡设备
就近访问,提升访问速度:DNS解析时可以根据请求来源IP,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能
缺点
更新不及时:DNS缓存的时间比较长,修改DNS配置后,由于缓存的原因,还有很多用户会继续访问修改前的IP,这样的访问会失败
分配策略比较简单:DNS负载均衡支持的算法少;不能区分服务器差异,也无法感知后端服务器的状态
硬件负载均衡
通过单独的硬件设备来实现负载均衡功能 。业界典型设备有F5和A10
优点
功能强大:全面支持各层级的负载均衡,支持全面的负载均衡算法,支持全局负载均衡
性能强大:可以支持100万以上的并发(软件一般能支持到10万级)
稳定性高:商用硬件负载均衡,经过了良好的严格测试,经过大规模使用,稳定性高 。
支持安全防护:硬件均衡设备除具备负载均衡功能外,还具备防火墙,防DDoS攻击等安全功能
缺点
价格昂贵
扩张能力差:硬件设备,可以根据业务进行配置,但无法进行扩展和定制
软件负载均衡
通过负载均衡软件来实现负载均衡功能,常见的有Nginx和LVS,其中Nginx软件的7层负载均衡,LVS是linux内核的4层负载均衡 。4层和7层的区别在于协议和灵活性,nginx支持HTTP、E-mail协议;而LVS是4层负载均衡,和协议无关,几乎所有应用都可以做,例如,聊天,数据库等
优点
简单:无论是部署还是维护都比较简单
便宜:只要买个Linux服务器,装上软件即可
灵活:
4层和7层负载均衡可以根据业务进行选择;也可以根据业务进行比较方便的扩展,例如可以通过Nginx的插件来实现业务的定制化功能
缺点
性能一般,功能没有硬件负载均衡那么强大
一般不具备防火墙和防DDoS攻击等安全功能
算法
算法期望达到的目的分类
任务平分类
负载均衡系统将收到的任务平均分配给服务器进行处理,平均可以是绝对数量的平均,也可以是比率或者权重上的平均
负载均衡类
负载均衡系统根据服务器的负载来进行分配 。负载值系统当前的压力,可以是cpu负载、连接数、IO使用率,网卡吞吐量等
性能最优类
负载均和系统根据任务中的某些关键信息进行Hash运算,将相同Hash值的请求分配给响应最快的服务器
Hash类
负载均衡系统将任务中的的某些关键信息进行Hash运算,将相同Hash值的请求分配到同一台服务器 。常见的又源地址Hash、目标地址Hash、session ID Hash、用户ID Hash等
轮询
负载均衡系统收到请求后,按照顺序轮流分配到服务器上 。轮询是最简单的一个策略,无须关注服务器本身的状态 。只要服务器在运行,运行状态是不关注的
加权轮询
负载均衡系统根据服务器权重进行任务分配,这里的权重一般是根据硬件配置进行静态配置的,采用动态的方式会更加契合业务,但是复杂度也会更高
主要目的是解决不同服务器处理能力有差异的问题,但同样存在无法根据服务器状态的差异进行任务分配的问题
负载最低优先
负载均衡系统将任务分配给当前负载最低的服务器,这里的负载根据不同任务类型和业务场景,可以有不同的指标来衡量
不同的指标衡量
LVS这种4层网络负载设备,可以以“连接数”来判断服务器的状态,服务器连接数越大,表明服务器压力越大
nginx这种7层网络负载系统,可以以“HTTP请求数”来判断服务器状态
负载最低优先的算法解决来轮询算法中无法感知服务器状态的问题,由此带来的代价是复杂度增加很多
最少连接数优先的算法邀请负载均衡系统统计每个服务器当前建立的连接,其应用场景仅限于负载均衡接收的任何连接请求都会转给服务器进行处理,否则如果负载均衡系统和服务器之间是固定的连接池方式,就不适合采取
推荐阅读
- gRPC 1.24.2 发布,谷歌开源的高性能 RPC 框架
- 大多数程序员并不知道,负载均衡器LVS是个啥?
- 提高性能力的食物
- 几种常见的负载均衡算法的工作原理
- 服务器级别负载均衡,LVS 的八种调度算法
- 12道家常素食菜肴,口味清新营养均衡,健康饮食精品
- 阿里P7架构师浅析:如何优化Java程序设计、编码提高性能
- 三种提高性能力的运动方法
- 一篇全面的 MySQL 高性能优化实战总结
- Linux系统CPU负载和CPU使用率