SpringCloud 之 Ribbon (三)

一、Ribbon 简介 

       Ribbon是Netflix发布的开源项目,主要提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon会基于某种规则(如简单轮询,随机连接,根据响应时间加权等)去连接这些机器。我们也可以使用Ribbon实现自定义的负载均衡算法。

二、Ribbon 原理

       将Load Balancer逻辑集成到consumer,consumer从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择一个合适的服务器。

三、常见负载均衡策略

1.随机负载均衡 (Random)

   随机选择状态为UP的Server

2.加权响应时间负载均衡 (WeightedResponseTime)

   根据响应时间分配一个weight,响应的时间越长,weight越小,被选中的可能性越低。

四、集成Eureka使用

1.eureka-consumer项目中添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2.获取RestTemplate方法上增加注解@LoadBalanced

@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder) {
	return builder.build();
}

3.使用服务名称作为请求 URL

       URL中的eureka-provider为eureka-provider项目中的应用名,多个provider的应用名要一致,ribbon会根据负载均衡策略去选择调用哪一台的服务。

      Ribbon 默认使用负载均衡的策略是轮询,对服务进行调用。

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

	@Autowired
	private RestTemplate restTemplate;

	@RequestMapping("get/{id}")
	public User get(@PathVariable("id") Integer id) throws Exception {
		return restTemplate.getForObject("http://eureka-provider/provider/user/get/" + id, User.class);
	}

}

4.其他负载均衡策略使用,比如创建个随机策略。

@Bean
public IRule randomRule() {
    return new RandomRule();
}

五、注意事项

     Eureka + Ribbon 集成后,使用服务名称作为请求 URL,服务名称中不要有下划线(_)。

     eureka-provider不要写成eureka_provider

六、Ribbon 与 Nginx 区别 

客户端负载均衡 Ribbon
Ribbon 是从 eureka 注册中心服务器端,获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略。

服务器端负载均衡 Nginx
nginx 是客户端所有请求统一交给 nginx,由 nginx 进行实现负载均衡请求转发,属于服务器端负载均衡。

nginx性能好,但ribbon可以剔除不健康节点,nginx剔除节点比较复杂。ribbon还可以配合熔断器一起工作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个基于Spring Boot的开发工具集,提供了一系列用于构建分布式系统的解决方案。其中,Feign和Ribbon是Spring Cloud中常用的两个组件。 Feign是一个声明式的Web服务客户端,用于简化使用Spring Cloud的服务之间进行通信的过程。它通过支持注解方式来定义和使用服务接口,底层使用的是基于反射的动态代理技术,将接口和实际调用的服务进行映射。Feign通过集成Ribbon来实现负载均衡的功能。 Ribbon是一个负载均衡的组件,它根据一系列的负载均衡策略,从多个服务实例中选择一个要调用的实例。Ribbon通过监听Eureka注册中心上已注册的服务列表,并通过默认的轮询算法选择一个实例。在Feign中,Ribbon用于根据服务接口定义的URL和方法,选择一个具体的服务进行调用。 Feign和Ribbon的原理可以简单总结如下:首先,Feign通过使用@EnableFeignClients注解开启Feign功能,扫描包中带有@FeignClient注解的接口定义。接着,Feign将这些接口定义转化为动态代理对象,在调用接口方法时,实际上是通过动态代理对象进行了解析和转发,最终会调用到具体的服务实例上。此时,Ribbon会根据一定的策略从多个服务实例中选择一个实例进行调用,并返回调用结果。整个调用过程是通过HTTP协议进行通信的。 总之,Spring Cloud中的Feign和Ribbon组件能够实现微服务之间的通信和负载均衡功能。Feign简化了基于HTTP的服务接口定义和调用的过程,而Ribbon则负责根据一定的负载均衡策略选择合适的服务实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值