Overview
Ribbon是Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组 件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现 自定义的负载均衡算法。
Ribbon提供的主要负载均衡策略介绍
简单轮询负载均衡(RoundRobin)
以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。
随机负载均衡 (Random)
随机选择状态为UP的Server
加权响应时间负载均衡 (WeightedResponseTime)
区域感知轮询负载均衡(ZoneAware)
区 域感知负载均衡内置电路跳闸逻辑,可被配置基于区域同源关系(Zone Affinity,也就是更倾向于选择发出调用的服务所在的托管区域内,这样可以降低延迟,节省成本)选择目标服务实例。它监控每个区域中运行实例的行 为,而且能够实时的快速丢弃一整个区域。这样在面对整个区域故障时,帮我们提升了弹性。
Ribbon自带负载均衡策略比较
策略名 | 策略声明 | 策略描述 | 实现说明 |
BestAvailableRule | public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule | 选择一个最小的并发请求的server | 逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server |
AvailabilityFilteringRule | public class AvailabilityFilteringRule extends PredicateBasedRule | 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值) | 使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态 |
WeightedResponseTimeRule | public class WeightedResponseTimeRule extends RoundRobinRule | 根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。 | 一 个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成statas时,使用roubine策略选择 server。 |
RetryRule | public class RetryRule extends AbstractLoadBalancerRule | 对选定的负载均衡策略机上重试机制。 | 在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server |
RoundRobinRule | public class RoundRobinRule extends AbstractLoadBalancerRule | roundRobin方式轮询选择server | 轮询index,选择index对应位置的server |
RandomRule | public class RandomRule extends AbstractLoadBalancerRule | 随机选择一个server | 在index上随机,选择index对应位置的server |
ZoneAvoidanceRule | public class ZoneAvoidanceRule extends PredicateBasedRule | 复合判断server所在区域的性能和server的可用性选择server | 使 用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个 zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的 Server。 |
配置properties file (sample-client.properties)
# Interval to refresh the server list from the source
ribbon.ServerListRefreshInterval=2000
# Connect timeout used by Apache HttpClient
ribbon.ConnectTimeout=3000
# Read timeout used by Apache HttpClient
ribbon.ReadTimeout=3000
# Initial list of servers, can be changed via Archaius dynamic property at runtime
ribbon.listOfServers=testserver1:80,testserver2 :80,testserver3:80
ribbon.EnablePrimeConnections=true
Ribbon架构图
https://yq.aliyun.com/articles/61823
相关推荐
本项目"springcloud-Netflix-eureka demo"提供了一个基于Spring Boot搭建的基础服务框架,旨在帮助开发者理解和学习如何使用Eureka进行服务注册与发现,以及Ribbon客户端负载均衡。 首先,我们来看Eureka。Eureka是...
在这个"springcloud-ribbon负载均衡demo"中,我们将探讨Ribbon的基本概念、工作原理以及如何在实际项目中进行配置和使用。 首先,Ribbon是Netflix开源的一个Java库,用于客户端的负载均衡。在微服务架构中,每个...
在Spring Cloud生态系统中,"springcloud-负载均衡,服务注册demo"是一个典型的示例,它展示了如何在微服务架构中实现服务发现和服务间的负载均衡。本文将深入探讨这两个关键概念及其在Spring Cloud中的实现。 首先...
良心demo,可以再学习的过程中参考一下,官网的教程是真的需要好好琢磨的,这个可以作为辅助参考,demo采用的版本均为最新版本:springcloud2.0-Finchley.SR1版本,大神提醒我一句学习springcloud不要想的太复杂,...
**Ribbon负载均衡器** Ribbon是Netflix提供的一款客户端负载均衡器,它可以在客户端实现对服务的负载均衡,而无需额外的服务器组件。Ribbon主要包含以下特性: 1. **客户端负载**:Ribbon将负载均衡逻辑集成到每个...
在"springcloud-demo"中,我们可以通过Ribbon的配置,实现如轮询、随机等不同的负载均衡策略,提高系统的并发处理能力。 三、Spring Cloud Hystrix:断路器 Hystrix是防止服务雪崩的重要组件,它通过引入断路器...
SpringCloud是中国Java开发者中最受欢迎的微服务框架之一,它提供了构建分布式系统所需的众多工具和服务,如服务发现、负载均衡、断路器、API网关、配置中心等。本压缩包"springcloud-learning-master.zip"是一个...
SpringCloud是中国Java开发者广泛...在实践中,你可以学习如何配置服务注册与发现、实现客户端负载均衡、使用Nacos进行服务管理和配置、利用Feign进行声明式服务调用等技术,从而在实际项目中有效地运用SpringCloud。
在Spring Cloud生态系统中,Ribbon是一个重要的组件,主要用于客户端负载均衡。它允许我们在微服务架构中,当调用其他服务时,实现请求的分发。本示例代码着重讲解如何利用Ribbon创建服务消费者,结合Eureka实现服务...
Ribbon是SpringCloud的另一个关键组件,它是一个轻量级的客户端负载均衡器,负责在微服务架构中的客户端进行服务发现和负载均衡。在"SpringCloud-2.0-order-hystrix-ribbon-8011.zip"项目中,Ribbon会根据配置动态...
其中,Ribbon是Spring Cloud的一个客户端负载均衡器,它允许我们从一组服务器列表中智能地选择一个服务器进行请求,从而实现服务间的调用。本文将深入探讨Spring Cloud Ribbon的核心概念、配置以及实际应用。 一、...
四、自定义Ribbon负载均衡算法 默认的Ribbon策略可能无法满足所有场景需求,因此我们可以自定义负载均衡算法。这通常通过实现IRule接口来完成,例如: ```java public class MyRule extends ...
5. **Ribbon** & **Feign** - 客户端负载均衡:Ribbon是内置的客户端负载均衡器,而Feign则是基于Ribbon的声明式HTTP客户端。在实践中,你可以看到如何利用它们进行服务间的调用。 6. **Spring Cloud Bus** - 事件...
2. 在Spring配置类中,创建一个Bean,注入`IRestTemplate`接口的实现,Spring Cloud会自动注入一个带有Ribbon负载均衡功能的RestTemplate实例: ```java @Configuration public class RestTemplateConfig { @...
Ribbon是Netflix开发的一个客户端负载均衡器,Spring Cloud将其集成,使得我们可以方便地在微服务之间进行客户端负载均衡。本文将深入探讨如何使用Spring Cloud Ribbon进行编码方式的配置,以便实现客户端负载均衡...
2. **服务调用**: 使用Ribbon和Feign实现客户端的负载均衡,提高服务的可用性和容错性。 3. **熔断与降级**: Hystrix提供熔断机制,当服务调用异常或超时时,快速返回默认值,避免服务雪崩。 4. **服务网关**: ...
在SpringCloud中,除了Ribbon内置的负载均衡策略,如轮询、随机等,还可以自定义策略。此外,Zuul和Gateway作为API网关,提供了更高级别的路由和过滤功能,包括负载均衡。它们可以在请求进入服务之前进行分发,不仅...
在Spring Cloud框架中,"springcloud-ribbon-feign-hystrix-zuul-config"这个标题涉及到四个关键组件:Ribbon、Feign、Hystrix和Zuul,以及配置管理Config。这些组件都是构建分布式系统时常用的服务发现、客户端负载...
Ribbon是Netflix开发的一个客户端负载均衡器,它被集成在SpringCloud中,用于处理服务之间的调用。在"springcloud-demo-master"项目中,Ribbon会自动选择一个合适的Eureka注册的服务实例进行请求,实现客户端的负载...