Spring Cloud 学习5-Ribbon负载均衡实例

spring cloud gateway网关和负载均衡框架ribbon实战 通常我们如果有一个服务,会部署到多台服务器上,这些微服务如果都暴露给客户,是非常难以管理的,我们系统需要有一个唯一的出口,API网关是一个服务,是系统的唯一出口。API网关封装了系统内部的微服务,为客户端提供一个定制的API。客户端只需要调用网关接口,就可以调用到实际的微服务,实际的服务对客户不可见,并且容易扩展服务。 API网关可以结合ribbon完成负载均衡的功能,可以自动检查微服务的状况,及时剔除或者加入某个微服务到可用服务列表。此外网关可以完成权限检查、限流、统计等功能。下面我们将一一完成... 阅读详情

负载均衡(Load Balance)

在系统并发量高,单个服务器处理能力能力达到最大的情况下,一般会用多台服务器组成集群系统提高整体的处理性能。

在多台服务器组成集群的系统中,我们一般要统一流量入口,通过流量调度,按照某一均衡算法,将用户大量的请求流量均衡地分发到集群中不同的服务器上。

将用户大量的请求按照一定的均衡算法平摊分配到多个服务器上运行,就是负载均衡。

使用服务器集群和负载均衡可以给我们带来的几个好处:

  • 扩展服务器带宽
  • 增强数据处理能力
  • 增加吞吐量
  • 提高网络的可用性和灵活性

负载均衡器(Ribbon)

Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡器,当我们将 Ribbon 和 Eureka 一起使用时,Ribbon 会从 Eureka Server(服务注册中心)中获取服务端列表,然后通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。

 Ribbon负载均衡策略

Spring Cloud Ribbon 提供了一个 IRule 接口,该接口主要用来定义负载均衡策略,它有 7 个默认实现类,每一个实现类都是一种负载均衡策略

实现类负载均衡策略
RoundRobinRule按照线性轮询策略,即按照一定的顺序依次选取服务实例
RandomRule随机选取一个服务实例
RetryRule按照 RoundRobinRule(轮询)的策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试(重试时获取服务的策略还是 RoundRobinRule 中定义的策略),如果超过指定时间依然没获取到服务实例则返回 null 。
WeightedResponseTimeRuleWeightedResponseTimeRule 是 RoundRobinRule 的一个子类,它对 RoundRobinRule 的功能进行了扩展。

根据平均响应时间,来计算所有服务实例的权重,响应时间越短的服务实例权重越高,被选中的概率越大。刚启动时,如果统计信息不足,则使用线性轮询策略,等信息足够时,再切换到 WeightedResponseTimeRule。
BestAvailableRule继承自 ClientConfigEnabledRoundRobinRule。先过滤点故障或失效的服务实例,然后再选择并发量最小的服务实例。
AvailabilityFilteringRule先过滤掉故障或失效的服务实例,然后再选择并发量较小的服务实例。
ZoneAvoidanceRule默认的负载均衡策略,综合判断服务所在区域(zone)的性能和服务(server)的可用性,来选择服务实例。在没有区域的环境下,该策略与轮询(RandomRule)策略类似。

Ribbon负载均衡实例

我们要准备一个Eurek注册中心,三个服务提供者(服务名一样,端口不同,提供接口也一样),服务消费者(开启负载均衡),以及一个测试类(用来观察消费者具体调用的服务提供者的实例是哪个)。

我们前面快速搭建sping cloud微服务实例的时候,已经创建好了一个注册中心(springcloud-eureka),一个服务提供者(springcloud-provider),一个服务消费者(springcloud-consumer)。

创建三个服务提供者

在springcloud-provider下添加两个配置文件application-8083.yml和application-8084.yml。

 application-8083.yml和application.yml一样,只需要改变端口即可:

spring:
  application:
    name: provider  #微服务名称,不用改变
server:
  port: 8083  # 服务端口号,修改

eureka:
  client:
#    healthcheck:
#      enabled: true #健康检测
    service-url:
      defaultZone: http://admin:admin@localhost:8763/eureka/  #注册中心地址 添加用户密码admin:admin@

application-8084.yml配置如下:

spring:
  application:
    name: provider  #微服务名称,不用改变
server:
  port: 8084  # 服务端口号

eureka:
  client:
#    healthcheck:
#      enabled: true #健康检测
    service-url:
      defaultZone: http://admin:admin@localhost:8763/eureka/  #注册中心地址 添加用户密码admin:admin@

服务提供方法修改如下:

@RestController
@RequestMapping("/")
public class UserController {

    @Value("${server.port}")
    public String port;

    /**
     * 从配置文件中取到端口号,并返回。这样根据返回结果就知道具体调用的服务实例了。
     */
    @RequestMapping("/queryuser")
    public String queryUser(){
        /*业务逻辑*/
        return "服务提供者:"+port+",查到用户";
    }
}

服务提供者三个服务需要指定配置文件启动。

服务消费者开启负载均衡

Ribbon 可以与 RestTemplate(Rest 模板)配合使用,实现微服务之间的调用。

具体调用服务provider的接口“/queryuser”

@Controller
@RequestMapping("/test")
public class TestController {

    public static final String SERVERNAME = "provider"; //服务提供方名称
    @Autowired
    RestTemplate restTemplate;

    // http://127.0.0.1:8082/test/get
    @RequestMapping("/get")
    @ResponseBody
    public String test(){
        // 服务提供方的名称 provider ,再加上服务提供方的接口名queryuser 就可以完成调用了
        String result = restTemplate.getForObject("http://" + SERVERNAME + "/queryuser", String.class);
        System.out.println(result);
        return  result;
    }
}

开启负载均衡 @LoadBalanced

    @Bean
    @LoadBalanced // 负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

启动服务

依次启动注册中心,服务消费者,以及三个服务提供者。

服务提供者指定配置文件启动:

一共启动5个服务

 负载均衡具体服务实例调用观察

写一个测试类,访问10次服务消费者,观察具体调用服务提供实例的情况:

public class Test {
    public static void main(String[] args) {
        // 服务消费者访问路径 消费者会调用provider服务的queryuser接口
        String url = "http://127.0.0.1:8082/test/get";
        for (int i = 1;i<=10;i++){
            String s = HttpUtil.get(url);
            System.out.println("第"+i+"次访问,结果:"+s);
        }
    }
}

运行结果如下:

默认使用ZoneAvoidanceRule策略进行负载均衡,由于在单机环境下,没有区域(zone),表现结果与轮询(RandomRule)策略类似。

切换负载均衡策略

我们只需要在服务消费者的配置类中,将 IRule 的其他实现类注入到容器中即可。

在springcloud-consumer的配置类 中添加以下代码,将负载均衡策略切换为 RandomRule(随机)

    @Bean
    public IRule myRule() {
        // RandomRule 为随机策略
        return  new RandomRule();
    }

重启springcloud-consumer。访问测试类,结果如下:

 可以看出,我们已经将负载均衡策略切换为 RandomRule(随机)

负载均衡Ribbon 什么是Ribbon 目前主流的负载均衡分为两种: 集中式负载均衡在消费者和服务提供方中间使用独立的代理方式进行负载,比如硬件有F5,软件如nginx 客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,比如超时、重试等 通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询、随机)去. 阅读详情

相关推荐

【springcloud 微服务】Spring Cloud Ribbon 负载均衡使用策略详解

springcloud中ribbon负载均衡策略总结

congge_study的博客 7685

Spring Cloud Ribbon客户端负载均衡(学习总结)

一、Ribbon介绍 Ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。在实际项目中,我们可以通过Ribbon实现对服务的均衡调用,以防止某个服务实例出现突发问题的时候服务调用出现问题。   二、准备工作 本章主要涉及三个项目模块,分别是 SpringCloudEurekaServer服务注册中心,端口号为1111; SpringCloudRibbonServi...

weixiaohuai的博客 1123

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

weixin_37584728的博客 3465

SpringCloud 练习笔记.4Ribbon 负载均衡—客户端

SpringCloud 练习笔记.4Ribbon 负载均衡—客户端

weixin_46685542的博客 4617

7.6 GPU页表更新机制

本文分析了AMDGPU驱动中BO到VA映射的页表更新实现机制。核心流程通过amdgpu_vm_bo_update()函数触发,支持CPU直接写入和SDMA异步命令两种更新模式。系统根据VRAM可见性自动选择最优更新策略,处理三种主要场景:命令提交、BO迁移和BO销毁。关键实现包括DMA地址数组处理、权限标志合并和BO迁移状态转换,最终通过amdgpu_vm_update_range()完成硬件页表更新。该机制有效平衡了更新延迟与吞吐量,为GPU虚拟内存管理提供基础支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 2472

aic8800出现insmod: can‘t insert ‘/lib/modules/4.9.191/aic8800_fdrv.ko‘: No such device

2、如果单独编译wifi驱动,则把CONFIG_PLATFORM_UBUNTU?= y都改为CONFIG_PLATFORM_ALLWINNER?1、如果把wifi驱动嵌入到内核编译,则在makefile中加入这一句。后面再修改对应平台的交叉编译链和内核吗路径等。

mantouyouyou的博客 511

SpringCloud微服务 【实用篇】| Eureka注册中心、Ribbon负载均衡

SpringCloud微服务 【实用篇】| Eureka注册中心、Ribbon负载均衡

m0_61933976的博客 6072

专转本-信息通信技术-笔记

专转本-信息通信技术-笔记

大今野 1367

负载均衡(Ribbon)-原来如此简单

文章目录一:初见**二: 负载均衡-Ribbon**三:手写一个Ribbon的轮询算法四:小结   温馨提示: 本文总共7584字,阅读完大概需要15-20分钟,希望您能耐心看完,倘若你对该知识点已经比较熟悉,你可以直接通过目录跳转到你感兴趣的地方,希望阅读本文能够对您有所帮助,如果阅读过程中有什么好的建议、看法,欢迎在文章下方留言或者私信我,您的意见对我非常宝贵,再次感谢你阅读本文。 一: ...

1094

Linux内核4.14版本——drm框架分析(1)——drm简介

本文介绍了DRM架构的发展历史、驱动框架以及简单示例,旨在帮助读者了解DRM架构的形成、功能流程实现。

phmatthaus的专栏 2558

Qt垂直滚动条QVerticalScrollBar详解:从基础到实战的控件开发指南

本文系统解析Qt中QVerticalScrollBar的用法,从基础概念到进阶技巧。主要内容包括:1)基础认知:介绍其继承关系、作用及典型应用场景;2)核心用法:创建方法、关键属性配置和信号槽连接;3)进阶技巧:自定义样式表美化外观,以及与自定义内容区域的联动实现;4)实战注意事项,如避免循环触发和高DPI适配等。文章强调掌握QVerticalScrollBar对提升Qt滚动类功能开发效率的重要性,并建议通过自定义文本编辑器实践巩固知识点。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 759

ribbon实现负载均衡

上文说了使用 consul做服务注册中心,实现服务注册与发现使用 consul 实现服务注册与发现 我们仅仅说了单机版(也就是单客户端,单服务端),本文介绍一下多服务端集群搭建。 其实consul的,服务集群搭建很简单,只需要在多建一台一摸一样的微服务项目即可(端口不同)。 一、搭建consul多服务版集群 我们按照8006的项目在建一个一模一样的项目8007。 application.yml,端口不同,服务名称spring.application.name一模一样。 #端口号 不同 server:

cpown的博客 6892

OpenClaw 生成测试用例

OpenClaw 只是躯干,Skills 才是灵魂。很多同学觉得 OpenClaw 没用,就像是买了一台顶级电脑却没装操作系统。通过这四步走,不仅可以学会如何让 AI 干活,更重要的是,可以学会如何管理 AI 的能力。

十二测试录 739

spring cloud学习5——Ribbon负载均衡

Ribbon负载均衡原理

m0_43424329的博客 237

地方政府预算数据抓取:利用Python爬虫获取预算安排、资金分配与支出情况

爬虫是通过模拟浏览器行为,从互联网上自动获取数据的程序。在本案例中,我们将通过爬虫从地方政府的官方网站或预算公开平台抓取各类预算信息。这些信息一般以HTML网页的形式呈现,可以通过爬虫对网页内容进行解析,提取所需的预算数据。Python作为数据抓取的强大工具,凭借其简洁的语法、强大的第三方库(如requestsSelenium等)以及丰富的数据处理能力,成为了开发爬虫应用的首选语言。

2201_76125261的博客 943

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

学习spring cloud记录5-Ribbon负载均衡

前言 在上次记录中,后台调用的http://demo-user/demouser/user/test并不是一个直接可用的地址,Ribbon将其拦截拉取eureka的服务列表,然后选择其中一个地址进行请求。 负载均衡流程 当接口调用通过@LoadBalanced注解是,会进入RibbonLoadBalancerClient,向DynamicServerListLoadBalancer传服务的id(...

龙谷情 190

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SpringCloud学习5(Spring Cloud Alibaba)负载均衡Ribbon、Feign负载均衡

SpringCloud提供的一个声明式Http客户端。使得远程调用像调用本地服务一样见到那,只需要创建接口并添加注解即可。Nacos很好的兼容了Feign,Feign默认集成了Ribbon。所以在Nacos下使用Feign则默认实现了负载均衡。负载均衡就是将负载(请求)分摊到各个服务应用上执行。SpringCloud默认整合Ribbon负载均衡。动态扩缩容:Docker、Rancher、K8S。可以通过配置修改负载均衡算法。

Huathy的博客 630

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring Cloud之Ribbin的自定义算法创建讲解

Spring Cloud之Ribbin的自定义算法创建讲解 今天来介绍一下,Spring Cloud中的Rabbin Ribboin Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供...

weixin_43147023的博客 594

微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?

一、Ribbon是什么? 二、ribbon负载均衡有几种策略 1、随机策略RandomRule 2、轮询策略RoundRobinRule(默认策略) 3、重试策略RetryRule 4、最低并发策略BestAvailableRule 5、可用过滤策略AvailabilityFilteringRule 6、响应时间加权策略WeightedResponseTimeRule 7、区域权衡策略ZoneAvoidanceRule 二、Ribbon测试 2.1 copy出一个user服务 2.2 修改消费服务custo

T_Antry 8707

Ribbon:Spring Cloud负载均衡与服务调用组件

转载自用。。。。。Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。Netflix Ribbon 是 Netflix 公司发布的开源组件,其主要功能是提供客户端的负载均衡算法和服务调用。

m0_47040562的博客 1881

Spring Cloud Ribbon源码解析

负载均衡就是用来帮助我们将众多的客户端请求合理的分配到各个服务器,以达到服务端资源的充分利用和更少的请求时间,它是日活亿级用户的网站架构中最重要的手段。而Ribbon实现正向代理的软负载均衡,Spring cloud Feign默认集成Ribbon,所以注解@FeignClient的类,默认实现了ribbon的功能,在之前的spring cloud-feign源码中已经提过LoadBalancer...

布道 5459

Spring Cloud Ribbon

祝大家每日进步,有技术问题多多交流,同时欢迎大家关注我的头条号:IT人孙会良 Spring Cloud Ribbon 一.Sping Cloud Ribbon概述 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡.................................

sunhuiliang85的专栏 6273

spring cloud ribbon - 负载均衡

1.关键字    负载均衡 2.基本介绍    上一次讲到远程调用的客户端feign,feign的主要功能就是远程对象的本地代理或者用于远程调用的httpClient,减化远程调用的复杂性,让本地调用远程方法如同调用本地方法一样简单方便。但是在集群环境,远程服务可能有多个可用节点,那么调用时就需要负载均衡。ribbon是一个提供客户端负载均衡算法的策略库。       负载均

老杨叔叔 3万+

Spring Cloud Alibaba之负载均衡组件Ribbon

简单来说,Ribbon是一个客户端负载均衡器,提供多种负载均衡策略,以便在客户端选择最佳的服务实例。同时也是Spring Cloud Alibaba 体系中负责负载均衡的组件,是一组类库的集合。Ribbon在客户端进行负载均衡,而不是依赖服务器端的负载均衡器。与Eureka等服务发现组件集成,通过服务名称来调用不同的服务实例。可以保留服务结点访问的相关统计信息,这样可以避免向高延迟或低高故障的节点发送请求。允许用户定制负载均衡策略,如随机策略、轮询策略等。

ysy1119的博客 2507

Ribbon - 官方已停更!Spring Cloud 为何弃用 Ribbon

Spring Cloud弃用Ribbon的原因及替代方案 摘要:随着微服务架构演进,Netflix Ribbon因官方停止维护被Spring Cloud弃用。Ribbon曾是核心客户端负载均衡组件,但存在阻塞式I/O模型、与新技术不兼容等问题。Spring Cloud推出轻量级的Spring Cloud LoadBalancer作为替代方案,具有非阻塞I/O、响应式编程支持、更好集成性等优势。迁移路径包括:从Hoxton.SR12版本开始标记Ribbon为弃用,2021.0.0版本正式移除,开发者需改用Lo

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Spring Cloud的负载均衡Spring Cloud Ribbon和Spring Cloud Feign

一、客户端负载均衡:Spring Cloud Ribbon。 Spring Cloud Ribbon是基于HTTP和TCP的客户端负载工具,它是基于Netflix Ribbon实现的。通过Spring Cloud的封装,可以轻松地将面向服务的REST模板请求,自动转换成客户端负载均衡服务调用。 客户端负载均衡示意图 废话不多说,进入代码实例,通过一个小例子学习一下Ribb

small_to_large的博客 2万+
上一篇: Spring Cloud 学习4-Eureka配置文件详解
一地红尘
博客等级 码龄12年 4粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值