Ribbon和Feign客户端负载均衡及服务调用

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 什么时负载均衡?(Loadbalancing)负载均衡,是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。过去所说的负载均衡常指服务端的负载均衡,在客户端和服务器端之间增加负载均衡器来实现。那么,客户端负载均衡是什么?

01前言


什么时负载均衡?(Loadbalancing)负载均衡,是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。过去所说的负载均衡常指服务端的负载均衡,在客户端和服务器端之间增加负载均衡器来实现。那么,客户端负载均衡是什么?

f8d69bd2ec7f13c7e760a3ab58fb138a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


02客户端负载均衡


客户端负载均衡是相对服务端而言的,主要出现在微服务中,服务消费之间一种软负载均衡的实现方案。客户端本地维护了一个可用的服务注册列表,在每次请求之前通过一定的算法,从服务列表中选择一个服务,发送给服务器端来处理本次请求的策略。常见的客户端负载均衡SpringCloud的Ribbon与Feign实现。


03Ribbon简介


Ribbon是Netflix公司的开源项目,是一款基于http和TCP的客户端负载均衡组件,它是无法独立部署,一般以Spring Cloud Ribbon实现,基于轮询、随机、加权、地址hash等规则自动获取和调用服务。Ribbon的几个核心组件:

  • IClientConfig
  • ServiceList
  • ServiceListFilter
  • IRule
  • IPing
  • ILoadBalancer
  • ServiceListUpdater

8cc54ed55697af4b05ec87926c81da94_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



04Feign简介


Spring Cloud的服务发现功能,除了可以用RestTemplate外,还可以用Feign客户端实现。Feign是一个声明式的Web Service客户端,通过在程序中使用注解@FeignClient 实现热插拔式动态代理创建客户端的效果,从而获取和调用目标地址和服务方法,处理本次请求。

工作过程:

  1. 建立与“服务提供者”的网络连接。
  2. 构造请求。
  3. 发送请求到“服务提供者”。
  4. 处理“服务提供者”返回的响应结果。

ddf09f9cec70e3830bc0e3e3d8dc6f2b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


05Ribbon与Feign的区别


1.启动类注解不同,Ribbon使用的注解是@RibbonClient,而Feign使用注解是@EnableFeignClients。2.服务的指定位置不同,Ribbon的服务实在注解@RibbonClient中声明的,而Feign是在注解@FeignClient中声明的。3.调用方式不同,Ribbon需要自己构建HTTP请求来,使用RestTemplate将该请求发送出去。Feign在Ribbon的基础上进行封装,采用的是接口的方式,无需自己构建HTTP请求,只需将其他服务的方法定义成抽象方法即可。4.依赖不同,Ribbon的Maven依赖是Spring-starter-ribbon;Feign的Maven依赖是Spring-starter-openfeign。
总结,Ribbon使用了RestTemplate,其代码可读性、可维护性和开发体验一般;Feign性能强,灵活性好。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
负载均衡 算法 架构师
Ribbon负载均衡
上一节就已经实现的负载均衡笔者并未深入探讨,本节通过分析负载均衡算法、Ribbon实现负载均衡的底层原理和实现过程,让大家对负载均衡有了一个大体认识,同时针对Ribbon自定义负载均衡策略,饥饿加载让大家对于Ribbon的了解又多一些。Ribbon实现的负载均衡只是方案之一,我们可以尽量多了解但不要局限于此。
|
7天前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
1月前
|
存储 设计模式 缓存
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
该文章主要介绍了如何在OpenFeign中集成Ribbon以实现负载均衡,并详细分析了Ribbon中服务选择和服务过滤的核心实现过程。文章还涉及了Ribbon中负载均衡器(ILoadBalancer)和负载均衡策略(IRule)的初始化方式。
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
|
1月前
|
缓存 负载均衡 Java
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
|
2月前
|
负载均衡 算法 网络协议
Ribbon 负载均衡源码解读
Ribbon 负载均衡源码解读
49 15
Ribbon 负载均衡源码解读
|
2月前
|
负载均衡 Java API
Feign 进行rpc 调用时使用ribbon负载均衡源码解析
Feign 进行rpc 调用时使用ribbon负载均衡源码解析
60 11
|
2月前
|
消息中间件 存储 负载均衡
消息队列 MQ使用问题之如何在grpc客户端中设置负载均衡器
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
JSON 负载均衡 Java
Spring Cloud Ribbon:负载均衡的服务调用
Spring Cloud Ribbon:负载均衡的服务调用
92 0
|
26天前
|
负载均衡 算法 Java
SpringCloud之Ribbon使用
通过 Ribbon,可以非常便捷的在微服务架构中实现请求负载均衡,提升系统的高可用性和伸缩性。在实际使用中,需要根据实际场景选择合适的负载均衡策略,并对其进行适当配置,以达到更佳的负载均衡效果。
31 13
|
3月前
|
负载均衡 算法 Java
Spring Cloud Netflix 之 Ribbon
Spring Cloud Netflix Ribbon是客户端负载均衡器,用于在微服务架构中分发请求。它与RestTemplate结合,自动在服务发现(如Eureka)注册的服务之间进行调用。配置包括在pom.xml中添加依赖,设置application.yml以连接Eureka服务器,并在配置类中创建@LoadBalanced的RestTemplate。通过这种方式,当调用如`/user/userInfoList`的接口时,Ribbon会自动处理到多个可用服务实例的负载均衡。