• Ribbon 客户端负载均衡


     Ribbon简介

    Ribbon是Neflix提供的一个基于HTTP和TCP的客户端负载均衡

    Ribbon两个功能:

    1. 简化远程调用
    2. 负载均衡

    负载均衡

    •  服务端负载均衡
    1. 负载均衡算法再服务端
    2. 由负载均衡维护服务地址列表

    •  客户端负载均衡
    1. 负载均衡算法再客户端
    2. 客户端维护服务地址列表

     Ribbon远程调用

    这里使用到eureka的consumer provider和server具体搭建参考

    spirngcloud Eureka服务治理(注册中心)实操_爱画图的小火纸的博客-CSDN博客

    • 使用Ribbon 简化restTemplate调用
    1. 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
    2. 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的应用名

     1.添加注解@LoadBalanced

     

     2.host:port可以替换为 服务提供方的应用名

    1. @RestController
    2. @RequestMapping("/order")
    3. public class OrderController {
    4. @Autowired
    5. private RestTemplate restTemplate;
    6. @Autowired
    7. private DiscoveryClient discoveryClient;
    8. @GetMapping("/goods/{id}")
    9. public Goods findGoodsById(@PathVariable("id") int id){
    10. //host:port可以替换为 服务提供方的应用名
    11. String url = "http://EUREKA-PROVIDER/goods/findOne/"+id;
    12. //3.调用方法
    13. Goods goods = restTemplate.getForObject(url,Goods.class);
    14. return goods;
    15. }
    16. }

    负载均衡初识

     为了方便监控消费者调用了哪个服务,注入port监控

     打开使程序可并行按钮,可以一个程序运行同时运行两个

     将provider服务开启两次,第二次开始时修改端口,再此打开即可有两个程序运行(模拟两个服务)

    启动步骤: 

    1.  启动次序为 server ——>provider ——> 修改provider端口号8001后再启动 ——> consumer
    2.  刷新consumer web界面 所调用的服务在改变 可根据port的改变监控到

     

     Ribbon负载均衡策略

    • 随机:RandomRule                                     生成随机数,随机选择一个服务
    • 轮询:RounRobinRule                                 默认的一个一次
    • 最小并发:BestAvailableRule                     哪个访问的少选哪个(eureka内有记录)
    • 过滤:AvailabilityFilteringRule                   过滤掉坏的和并发高的
    • 响应时间:WeightedResponseTimeRule  eureka向每个服务发一个数据包,哪个服务先响应 选哪个
    • 轮询重试:RetryRule                                    轮询十圈都没找到好的服务 就会回复响应失败
    • 性能可用性:ZoneAvoidanceRule               综合服务性能可用性得分哪个高选哪个

    共7种 默认轮询

    设置负载均衡策略

    负载均衡算法在客户端 

    两种方式:

    • 编码

     编写类MyRule

    1. //设置负载均衡的规则
    2. @Configuration
    3. public class MyRule {
    4. @Bean
    5. public IRule rule(){
    6. return new RandomRule();
    7. }
    8. }

     在consumer的启动类添加注解

    1. @EnableDiscoveryClient //激活DiscoveryClient 可无
    2. //启动类
    3. @EnableEurekaClient //可无
    4. @SpringBootApplication
    5. /*
    6. * 配置Ribbon的负载均衡策略
    7. * name 设置服务提供方的应用名称
    8. * configuration 设置负载均衡Bean
    9. * */
    10. @RibbonClient(name="EUREKA-PROVIDER",configuration = MyRule.class)
    11. public class ConsumerApp {
    12. public static void main(String[] args){
    13. SpringApplication.run(ConsumerApp.class,args);
    14. }
    15. }
    • 配置 

    consumer添加配置yml文件中

    1. #配置的方式设置Ribbon的负载均衡策略
    2. EUREKA-PROVIDER: #设置的服务提供方的 应用名称
    3. ribbon:
    4. NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #策略类

    结果: 

    这个端口随机显示意思就是消费者随机使用eureka里的服务 ,修改负载均衡策略成功

  • 相关阅读:
    【单片机毕业设计】【mcuclub-jj-006】基于单片机的指纹电子密码锁的设计
    1.摄像机几何
    ESP8266-Arduino编程实例-MLX90614红外测温传感器驱动
    一套模板搞定二叉树算法题--二叉树算法讲解002
    利用人工智能和大数据技术,优化IT运维流程和策略
    Leu-Trp-Leu-COOH,42293-99-2
    #Docker 提示空间不足的解决方法#
    2022年江岸区科技“小巨人”奖励补贴标准以及申报条件和时间汇总
    mmap文件内存映射
    业务真的需要微服务吗
  • 原文地址:https://blog.csdn.net/qq_51497041/article/details/126198514