Cloud微服务:Ribbon负载均衡

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述



一、Ribbon - 负载均衡原理、流程

  • 服务消费者(order-service)根据服务名称发起请求,请求地址(url):http://userservice/user/1。
  • 请求被负载均衡拦截器:LoadBalancerInterceptor拦截,给到了负载均衡客户端:RibbonLoadBalancerClient
  • 负载均衡客户端:RibbonLoadBalancerClient获取url中的服务名称:userservice并给到动态服务列表负载均衡器:DynamicServiceListLoadBalancer
  • 动态服务列表负载均衡器:DynamicServiceListLoadBalancer从EurekaServer中拉取服务提供者(user-service)的信息列表:localhost:8081、localhost:8082。
  • 动态服务列表负载均衡器:DynamicServiceListLoadBalancer将得到的信息列表给到负载均衡规则器:IRule进行负载均衡算法,选择一个服务信息,重新给到负载均衡客户端:RibbonLoadBalancerClient
  • 负载均衡客户端:RibbonLoadBalancerClient修改请求地址(url):http://userservice/user/1,变为:http://localhost:8081/user/1,进而在浏览器成功访问。

在这里插入图片描述




二、Ribbon - 负载均衡策略

Ribbon的负载均衡策略是一个叫做IRule的接口来定义的,每一个子接口都是一种规则。

在这里插入图片描述


1.常见的负载均衡规则

在这里插入图片描述


2.调整负载均衡规则


①代码方式

在微服务的服务消费者(order-service)中的启动类OrderApplication类内部,定义一个新的IRule

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}/*** 创建RestTemplate并注入Spring容器*/@Bean@LoadBalanced//实现负载均衡public RestTemplate restTemplate() {return new RestTemplate();}//重新定义IRule,达到调整负载均衡规则的效果@Beanpublic IRule randomRule() {//默认是轮询规则,这里负载均衡策略调整成——随即规则return new RandomRule();//随机规则}
}
  • 此方式作用范围是全局的,配置后在此微服务中,无论调用哪一个其他的微服务,使用的都是此处配置的负载均衡规则。

②配置文件方式

这里在微服务的服务消费者(order-service)的配置文件application.yml中,添加新的配置也可以修改负载均衡规则,下述配置信息指定调用服务名称为:userservice的服务时,使用的负载均衡规则。

userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 负载均衡规则——随机规则
  • 此方式的作用范围仅针对当前微服务,因为配置文件中先指定了服务名称,再指定的负载均衡规则。



三、Ribbon - 饥饿加载

  • Ribbon加载策略
    • 懒加载:默认采用的加载方式,在第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
    • 饥饿加载:在项目启动时就将LoadBalanceClient加载好,降低第一次访问的耗时。

可通过在application.yml配置文件中添加配置相关信息,开启饥饿加载:

ribbon:eager-load:enabled: true # 开启饥饿加载clients:- userservice  # 指定饥饿加载的服务名称,可加载多个



四、小结

在这里插入图片描述



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640606.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle进阶(2)——物化视图案例延伸以及序列、同义词

一、物化视图 物化视图(Materialized View)是 Oracle 数据库中的一个对象,它是一个预先计算和存储的查询结果集,类似于视图,但与视图不同的是,物化视图会将查询结果保存在物理存储中,而不是动态…

WPF2022终结版系列课程笔记 1 WPF 基本布局

本笔记为B站 微软系列技术教程 WPF项目实战合集(2022终结版) 项目记录 WPF 基本布局 WPF布局原则 一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 WPF布局容器 StackPanel: 水平或垂直排列元素、Orientation属性分别: Hor…

STP学习的第一篇

1.STP的基本概念:根桥 (1)STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。 (2)根桥是一个STP交换网络中的“树根”。 (3)STP开始工作后&#xf…

K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

Ingress对象 1 )概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTPIngress-nginx 本质是网关,当你请求 abc.com/service/a, Ingress 就把对应的地址转发给你,底层运行了一个 nginx但 K8s 为什么不…

OpenCV-基于阴影勾勒的图纸清晰度增强算法

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 大家在工作和学习中,无论是写报告还是论文,经常有截图的需求,比如图表、图纸等&…

无人驾驶 自动驾驶汽车 环境感知 精准定位 决策与规划 控制与执行 高精地图与车联网V2X 深度神经网络学习 深度强化学习 Apollo

无人驾驶 百度apollo课程 1-5 百度apollo课程 6-8 七月在线 无人驾驶系列知识入门到提高 当今,自动驾驶技术已经成为整个汽车产业的最新发展方向。应用自动驾驶技术可以全面提升汽车驾驶的安全性、舒适性,满足更高层次的市场需求等。自动驾驶技术得益于人工智能技术的应用…

SpringBoot 根据不同环境切换不同文件路径

最简单的办法就是使用多个 application.yml 配置文件 。一个叫 application-test.yml 测试用;另一个是正式使用的 application-prod.yml 。win环境下大部分是开发测试时候使用的,服务正式上线需要部署在Linux服务器上又换成了Linux。但开发初期或者项目…

JS-47-Node.js06-fs模块-读写文件

Node.js内置的fs模块就是文件系统模块,负责读写文件。 和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法。 一、回顾:异步方法VS同步方法 1-1、异步方法 因为JavaScript的单线程模型,执行IO操作时&#xff…

Linux及tmux、vim常用命令

Linux 关于Linux的简介、诞生、迭代,大家可以去网上查一查,这里不多做赘述了 Linux文件类型 非常重要的文件类型有: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件 等。 …

【Leetcode每日一题】 分治 - 数组中的第K个最大元素(难度⭐⭐)(63)

1. 题目解析 题目链接:数组中的第K个最大元素 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 在快速排序算法中,一种常见的优化策略是将数组划分为三个区间。这种划分方式可以更加精确地定位到…

我看谁还不会这几个 TypeScript 高级技巧

typescript 作为前端使用最多的框架之一,快来看看下面这些隐藏的高级技巧吧 Mapped Types 当我们在声明类型的时候,可以借助 Mapped Types 的方式对基础类进行扩展,这样就可以减少定义重复的基础类型 type Ev {add: string;remove: strin…

day_8题解

利用最大公约数求最小公倍数 #include<iostream> using namespace std;int gcd(int a,int b) {return b?gcd(b,a%b):a; }int main() {long long a,b;cin>>a>>b;long long ansgcd(a,b);cout<<(a*b)/ans<<endl;return 0; }排序遍历&#xff0c;记…