美文网首页
分布式组件-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-负载均衡和远程调用

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