美文网首页
分布式组件-ribbon,feign-负载均衡和远程调用

分布式组件-ribbon,feign-负载均衡和远程调用

作者: 乙腾 | 来源:发表于2021-02-10 09:18 被阅读0次

服务化架构

ribbon

image.png

可以看见引入nacos后的服务化架构,每个服务都有nacos的客户端。

F&Q

1.ribbon如何实现负载均衡?

每次请求外部服务都会被ribbon拦截,ribbon拿着调用的服务去nacos中查找对应的在其中注册的列表,拿到注册列表后,将之在本地缓存一份,下次调用,就在本地缓存的注册列表中找到对应服务-对应的机器,轮询调用。

2.nacos中如何动态感知服务注册和下线?

机器新增

一旦有新机器加入,新机器加入后启动必然会再次在nacos中注册,注册中心更新注册列表,而本地客户端的ribbon有定时向nacos注册中心,定时pull注册列表的机制,拉取过来新的注册列表,更新本地cache的注册列表。

机器下线

从nacos注册的底层原理说起

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

这个包会自动帮服务向nacos中注册,同时这个包会和nacos之间维持一个心跳检查,一旦一个机器下线,长时间不给服务发心跳,服务端会感知到,后将之从服务列表中删除,下一次ribbon客户端定时查询服务注册列表的时候,发现注册列表发生变化,更新本地cache注册列表。

3.nacos感知注册列表中的服务下线会有一点的延迟,同理ribbon感知注册列表的变化也会有一定的延迟,如果在这期间服务调用会是什么样的呢?

ribbon调用一次失败后,会在本地缓存的注册列表中挑取服务重试,直到找到一个没有下线的机器。

feign

image.png

此时架构图,此时调用外接服务通过Feign调用,而Feign底层依赖于Ribbon组件。

feign组件底层调用原理

feign底层依赖ribbon,当调用远程服务的时候,feign组件将请求拼成url


image.png

然后依赖底层ribbon实现远程调用。

相关文章

  • 分布式组件-ribbon,feign-负载均衡和远程调用

    服务化架构 ribbon 可以看见引入nacos后的服务化架构,每个服务都有nacos的客户端。 F&Q 1.ri...

  • SpringCloud负载均衡-Ribbon

    简介 Ribbon是SpringCloud提供的用于客户端软件负载均衡算法和服务调用的组件 负载均衡分类 负载均衡...

  • SpringCloud-Ribbon负载均衡

    Ribbon是SpringCloud提供的关于客户端负载均衡组件。 负载均衡 负载均衡设备可以分为硬件负载和软件负...

  • SpringCloud五大神兽

    注册中心:Eureka(服务的注册和管理服务) 负载均衡:Ribbon Feign 接口调用组件 断路器:Hyst...

  • spring cloud核心组件

    eruka 服务注册中心, feign 远程调用 ribbon 客户端负载均衡 zuul 网关、动态路由 hyst...

  • Spring Cloud Ribbon

    Spring Cloud Ribbon 客户端负载均衡组件Ribbon 负载均衡就是当client端发送请求得时候...

  • 【深入浅出SpringCloud】I'm Ribbon

    【微服务>>>负载均衡】 一、简介 Ribbon是一个负载均衡组件,具有丰富的负载均衡策略...

  • dubbo

    简介:分布式rpc(远程过程调用)和微服务【框架】。 作用:提供三个关键功能,基于接口的远程调用、容错和负载均衡,...

  • spring cloud ribbon基本原理

    netfilx的负载均衡组件 负载策略 Ribbon的饥饿加载 ribbon负载聚恒不是在启动的时候加载上下文,而...

  • Spring Cloud(4) Feign - 负载均衡Ribb

    目标 wallet扩展为多节点 调用userInfo接口测试负载均衡 Ribbon参数测试 测试负载均衡 修改wa...

网友评论

      本文标题:分布式组件-ribbon,feign-负载均衡和远程调用

      本文链接:https://www.haomeiwen.com/subject/jtihxltx.html