负载均衡是对系统的高可用、网络峰值压力的缓解和处理能力扩容的重要手段之一,是分布式系统基础架构.
负载均衡的实现有两种:
- 硬件实现负载均衡: 通过在服务器节点之间安装专门用于负载均衡的设备,比如F5等
- 软件实现负载均衡: 通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等
负载均衡系统(不论软硬件实现)的核心: 维护一个下挂可用的服务端清单,通过心跳检测来剔除故障的服务端节点以保证清单中都是可以正常访问的服务端节点。当客户端发送请求到负载均衡设备的时候,该设备按某种算法(比如线性轮询、按权重负载、按流量负载等)从维护的可用服务端清单中取出一台服务端端地址,然后进行转发.
我们这里以软件实现负载均衡来具体讲解。软件的负载均衡的实现主要有nginx和ribbon. 它们的区别主要在于服务清单所保存的位置。
- nginx 自身保存服务清单, 客户端的所有请求统一交给 nginx,由 nginx 进行实现负载均衡请求转发,属于服务器端负载均衡。
- Ribbon 是从 eureka 注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略。这种属于客户端负载均衡.
应用场景上的区别:
- Nginx 适合于服务器端实现负载均衡 比如 Tomcat.
- Ribbon 适合与在微服务中 RPC 远程调用实现本地服务负载均衡,比如 Dubbo、SpringCloud 中都是采用本地负载均衡