Ribbon 客户端负载均衡

什么是负载均衡
1. LB ,即负载均衡 (Load Balance) ,负载均衡是微服务架构中经常使用的一种技术。 负载均衡是我们处理高并发、缓解网络压力和进行服务端扩容的重要手段之一,简单的说就是将用户的请求平摊的分配到多个服务上,从而实现系统的高可用性集群。
2. 负载均衡可通过 硬件设备 及 软件 进行实现,软件比如: Nginx 等,硬件比如: F5
3. 负载均衡相应的在中间件,例如: Dubbo SpringCloud 中均给我们提供了负载均衡组件。
如下图是负载均衡的架构图:
用户请求先到达负载均衡器( 也相当于一个服务 ),负载均衡器根据负载均衡算法将请求转发到微服务。 负载均衡 维护一份服务端列表 ,根据负载均衡算法 将请求转发到相应的微服务上,负载均衡 算法有:轮训、随机、加权轮训、加权随机、地址哈希等方法,所以负载均衡可以为微服务集群分担请求,降低系统的压力。
什么是客户端负载均衡( Ribbon
上图是 服务端负载均衡 ,客户端负载均衡 与 服务端负载均衡的区别在于: 客户端负载均衡要维护一份服务列表
客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。 在客户端负载均衡中,每个客户端服务
都有一份自己要访问的服务端清单,这些清单统统都是从 Eureka 服务注册中心获取的。而在服务端负载均衡中,只
要负载均衡器维护一份服务端列表 。
Spring Cloud Ribbon 是基于 Netflix 公司发布的开源项目 Ribbon 进行封装的一套 客户端负载均衡器
参考 : https://github.com/Netflix/ribbon
Ribbon Eureka Server 获取服务列表, Ribbon 根据负载均衡算法直接请求到具体的微服务,中间省去了负载均
衡服务。
如下图是 Ribbon 负载均衡的流程图:
1 、在消费者微服务中使用 Ribbon 实现负载均衡, Ribbon 先从 EurekaServer 中获取服务列表。
2 Ribbon 根据负载均衡的算法(默认轮训算法)去调用微服务。
 Ribbon 服务调用配置实战
无需新增新服务,在消费者端通过 Ribbon 进行实现负载均衡即可
针对 microservice-cloud-04-consumer-product-80 模块进行修改
修改 POM 文件
添加配置:
        
由于依赖了 spring-cloud-starter-netflix-eureka-client ,会自动添加 spring-cloud-starter-netflix-ribbon 依赖
完整配置
修改 application.yml 文件
application.yml 文件中添加 Eureka 的服务注册地址,
修改自定义配置类 ConfigBean
在自定义配置类中添加新注解 @LoadBalanced ,
作用是: @LoadBalanced 表示这个 RestTemplate 开启负载均衡,在调用服务提供者的接口时,可使用 服务名称替代真实IP 地址。服务名称 就是服务提供者在 application.yml 中配置的 spring.application.name 属性的值 。
修改 application.yml 文件
            在 application.yml 文件中添加 Eureka 的服务注册地址,
修改自定义配置类 ConfigBean
在自定义配置类中添加新注解 @LoadBalanced ,
作用是: @LoadBalanced 表示这个 RestTemplate 开启负载均衡,在调用服务提供者的接口时,可使用 服务名称替代真实IP 地址。服务名称 就是服务提供者在 application.yml 中配置的 spring.application.name 属性的值 。
修改消费者控制层 ProductController_Consumer
修改调用 REST 风格的服务提供者地址:
修改后完整版
修改主启动类
在主启动类 MicroserviceProductConsumer_80 上添加注解 @EnableEurekaClient
启动 2 Eureka 集群后,再启动 microservice-cloud-03-provider-product-8001 并注册进 eureka
接着启动 microservice-cloud-04-consumer-product-80
访问:
http://localhost/consumer/product/get/1
http://localhost/consumer/product/list
http://localhost/consumer/product/add?product_name=spring 教程
总结:
        Ribbon Eureka 整合后 ,消费者 Consumer 可以直接调用提供者服务,而不用再关心地址和端口号
Ribbon 负载均衡实战
Ribbon 负载均衡架构
   Ribbon 在工作时分成两步:
   第 1 步先选择 Eureka Server , 它优先选择在同一个区域内负载较少的 server
   第 2 步再根据用户指定的策略,在从 Eureka Server 获取的服务注册列表中选择一个地址。 其中 Ribbon 提供了多种策略:比如轮询、随机和根据响应时间加权等。
新建一个商品提供者服务
新建 microservice-cloud-06-provider-product-8002 ,参考: microservice-cloud-03-provider-product- 8001
配置 pom.xml 文件
  复制 8001 pom.xml 中如下依赖信息,粘贴到 8002 模块中
新建一个数据库
新建 8002 数据库,各自微服务分别连各自的数据库:
8002 数据库脚本 :
拷贝 Mybatis 核心配置与映射配置文件
复制 8001 MyBatis 相关配置到 8002
application.yml
参考 8001 指定 8002 application.yml 配置信息
注意:端口号 和数据库名
配置启动类
复制 8001 的启动类 到 8002 , 重命名类名 ProductProvider_8002
启动 2 Eureka 集群
microservice-cloud-05-eureka-6001 microservice-cloud-05-eureka-6002
启动 2 个 商品提供者 微服务,并各自测试通过
http://localhost:8001/product/list
http://localhost:8002/product/list
启动 microservice-cloud-04-consumer-product-80
客户端通过 Ribbon 完成负载均衡并访问上一步的 Product 微服务
http://localhost/consumer/product/list
注意观察看到返回的数据库名字,各不相同,负载均衡实现
  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA代码搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值