一种典型的负载均衡解决方案
本文将介绍一种典型的负载均衡解决方案,从硬件到软件涉及中间件,数据库 RDBMS,同时会介绍常见的负载均衡算法及优缺点,对负载均衡感兴趣的同学,可以一读。
负载均衡架构图
首先来看一下负载均衡的架构图,它是一个线性的架构,如下图所示,从标橙色的硬件 F5 到数据库 RAC:
F5 硬件
如下图是一台 F5 硬件负载均衡装备:
它具有诸多特点:
1 基于网络的负载均衡硬件
2 利用 Big-IP 技术对 web 应用负载均衡
3 提供流量管理
另外,F5 有虚拟 ip 功能,能将生产环境虚拟 ip 和负载地址映射,实际生产环境可能映射多组负载均衡地址,列如:
第一组: 用途:ng 转发,web 页面负载
第二组: 用途:注册中心地址,所有服务内部注册
第三组: 用途:入口接口负载均衡
第四组: 用途:redis 的 HA
nginx
Nginx 是 HTTP 和反向代理服务器,邮件服务器,通用 TCP/UDP 代理服务器,它有如下特点:
nginx 能够通过配置 upstream 反向代理实现负载均衡,如下二台服务器负载例子:
upstream client { server 192.168.17.156:8886; server 192.168.17.157:8886; }
这里顺便介绍一下 nginx 负载均衡算法:
1 round-robin
ng 默认负载均衡算法,ng 依次选择一个 server。
2 weighted round-robin
配置 server 权重,按照权值比例,选择一个 server。
3 ip hash
特定 ip 地址映射某一台 upstream server,将 ip 地址作为 hash key,计算得到绑定的服务器。
4 least connections
把请求动态分配给当前链接数最小的服务器。
5 random
把请求随机地分配给一台服务器
通过对比这些负载算法优劣势,才能根据使用场景,找到合适的算法,下表格将负载均衡算法进行对比:
Spring Cloud ribbon/feign
ribbon 本地负载均衡是 Spring Cloud 组件提供的一种负载均衡解决方案,它的优点诸多,例如:
1 是 Spring cloud Netflix 客户端负载均衡组件
2 支持使用注解
3 可与 feign 结合使用
4 支持多种负载均衡器,有轮询,随机,默认轮询方式
能够简单地将 ribbon 和 nginx 对比,从而更好理解其原理和应用场景:
此外,从微服务角度,调用使用 Feign 调用微服务,会自动触发 Ribbon;另一种方式是通过 RestTemplate 调用 HTTP 接口。
Database RAC
数据库 RAC 集群也是常见的数据层面的负载均衡,以 Oracle RAC 为例,它有以下特点,下图是它的原理图:
第一 RAC(Real Application Clusters)由多台互连服务器组成;
第二 oracle 数据库和实例间一对多的关系;
第三由 Oracle Clusterware 管理;
第四 RAC 提供更大吞吐量和更高的可扩展性。
oracle 客户端通过简单配置 load_balance=on,address_list=address......就能实现客户端负载均衡。
总结
本文介绍了一种经典的负载均衡解决方案,从软件涉及中间件,数据库 RDBMS 至底向上到硬件,在实践中也能得以应用。
版权声明: 本文为 InfoQ 作者【极客罗杰】的原创文章。
原文链接:【http://xie.infoq.cn/article/e8a8aa1e868c167271f9338da】。未经作者许可,禁止转载。
评论