文章目录
- 一,概述
- 二,实现过程
- 三,项目源码
- 1. 源码放送:
- 2. 部署方式
- 四,功能演示
- 五,其他
一,概述
一般来说,提到负载均衡,大家一般很容易想到浏览器 -> NGINX -> 反向代理多个Tomcat这样的架构图——业界管这种负载均衡模式叫“服务器端负载均衡”,因为此种模式下,负载均衡算法是NGINX提供的,而NGINX部署在服务器端。
本文所讲的Ribbon则是一个客户端侧负载均衡组件——通俗地说,就是集成在客户端(服务消费者一侧),并提供负载均衡算法的一个组件。Ribbon是Netflix发布的负载均衡器,它可以帮我们控制HTTP和TCP客户端的行为。只需为Ribbon配置服务提供者地址列表,Ribbon就可基于负载均衡算法计算出要请求的目标服务地址。Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机、响应时间加权等。
二,实现过程
一般情况下,负载均衡组件Ribbon和微服务注册中心Eureka是配合使用的。
为了在非springCloud微服务项目中,使用Ribbon的客户端负载均衡能力,我们可以按如下步骤实现:
- 定义服务的被调用方Client,编写webApi接口
- 定义服务的调用方Cousumer,调用webApi接口
- 定义网关模块Gateway,通过定义路由的方式重新定义webApi接口路径,并引入Ribbon客户端负载均衡
- 将步骤2中的WebApi地址切换为网关模块路由接口地址,从而使原来的webApi地址具有了客户端负载均衡功能
- 使用docker部署Client(多实例)、Gateway,并在编排文件中使用服务名代替客户端列表地址,解耦Cousumer与Client之间的代码接口。
三,项目源码
1. 源码放送:
https://gitee.com/00fly/microservice-all-in-one/tree/master/ribbon-demo
2. 部署方式
这边提供了3种docker部署方式
- 自动ip(推荐)
- 固定ip
- docker scale 水平扩展
分别对应上图的docker-auto-ip、docker-fix-ip、docker-scale 目录,有兴趣的同学,可以研究研究!
四,功能演示
http://124.71.129.204:8085/doc.html
五,其他
此实例整合了gateway、ribbon、feign、hystrix、swagger,
大家会发现hystrix熔断器起作用时并不从负载均衡中移除故障节点,大家可以思考比较下hystrix和ribbon 异同!
有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!
-over-