`
m635674608
  • 浏览: 5041867 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring Cloud -- Ribbon负载均衡

 
阅读更多

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)

 
# Max number of retries    
ribbon.MaxAutoRetries=1     
# Max number of next servers to retry (excluding the first server)  
ribbon.MaxAutoRetriesNextServer=1 
 # Whether all operations can be retried for this client   
ribbon.OkToRetryOnAllOperations=true  
# 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架构图

1258b858-c697-32e3-8f9e-b2623f7c6862.png

 

 

https://yq.aliyun.com/articles/61823

分享到:
评论

相关推荐

    springcloud-Netflix-eureka demo 可做参考

    本项目"springcloud-Netflix-eureka demo"提供了一个基于Spring Boot搭建的基础服务框架,旨在帮助开发者理解和学习如何使用Eureka进行服务注册与发现,以及Ribbon客户端负载均衡。 首先,我们来看Eureka。Eureka是...

    springcloud-ribbon负载均衡demo

    在这个"springcloud-ribbon负载均衡demo"中,我们将探讨Ribbon的基本概念、工作原理以及如何在实际项目中进行配置和使用。 首先,Ribbon是Netflix开源的一个Java库,用于客户端的负载均衡。在微服务架构中,每个...

    springcloud-负载均衡,服务注册demo

    在Spring Cloud生态系统中,"springcloud-负载均衡,服务注册demo"是一个典型的示例,它展示了如何在微服务架构中实现服务发现和服务间的负载均衡。本文将深入探讨这两个关键概念及其在Spring Cloud中的实现。 首先...

    SpringCloud-Finchley.SR1-Ribbon客户端负载均衡demo

    良心demo,可以再学习的过程中参考一下,官网的教程是真的需要好好琢磨的,这个可以作为辅助参考,demo采用的版本均为最新版本:springcloud2.0-Finchley.SR1版本,大神提醒我一句学习springcloud不要想的太复杂,...

    SpringCloud-Eureka-Ribbon

    **Ribbon负载均衡器** Ribbon是Netflix提供的一款客户端负载均衡器,它可以在客户端实现对服务的负载均衡,而无需额外的服务器组件。Ribbon主要包含以下特性: 1. **客户端负载**:Ribbon将负载均衡逻辑集成到每个...

    springcloud-demo

    在"springcloud-demo"中,我们可以通过Ribbon的配置,实现如轮询、随机等不同的负载均衡策略,提高系统的并发处理能力。 三、Spring Cloud Hystrix:断路器 Hystrix是防止服务雪崩的重要组件,它通过引入断路器...

    springcloud-learning-master.zip springcloud学习合集

    SpringCloud是中国Java开发者中最受欢迎的微服务框架之一,它提供了构建分布式系统所需的众多工具和服务,如服务发现、负载均衡、断路器、API网关、配置中心等。本压缩包"springcloud-learning-master.zip"是一个...

    springcloud-learning-master.zip

    SpringCloud是中国Java开发者广泛...在实践中,你可以学习如何配置服务注册与发现、实现客户端负载均衡、使用Nacos进行服务管理和配置、利用Feign进行声明式服务调用等技术,从而在实际项目中有效地运用SpringCloud。

    SpringCloud-创建服务消费者-Ribbon方式示例代码.zip

    在Spring Cloud生态系统中,Ribbon是一个重要的组件,主要用于客户端负载均衡。它允许我们在微服务架构中,当调用其他服务时,实现请求的分发。本示例代码着重讲解如何利用Ribbon创建服务消费者,结合Eureka实现服务...

    SpringCloud-2.0-order-hystrix-ribbon-8011.zip

    Ribbon是SpringCloud的另一个关键组件,它是一个轻量级的客户端负载均衡器,负责在微服务架构中的客户端进行服务发现和负载均衡。在"SpringCloud-2.0-order-hystrix-ribbon-8011.zip"项目中,Ribbon会根据配置动态...

    spring-cloud-example-ribbon

    其中,Ribbon是Spring Cloud的一个客户端负载均衡器,它允许我们从一组服务器列表中智能地选择一个服务器进行请求,从而实现服务间的调用。本文将深入探讨Spring Cloud Ribbon的核心概念、配置以及实际应用。 一、...

    SpringCloud-Ribbon负载均衡服务调用及手写Ribbon算法代码

    四、自定义Ribbon负载均衡算法 默认的Ribbon策略可能无法满足所有场景需求,因此我们可以自定义负载均衡算法。这通常通过实现IRule接口来完成,例如: ```java public class MyRule extends ...

    spring-cloud-examples-master

    5. **Ribbon** & **Feign** - 客户端负载均衡:Ribbon是内置的客户端负载均衡器,而Feign则是基于Ribbon的声明式HTTP客户端。在实践中,你可以看到如何利用它们进行服务间的调用。 6. **Spring Cloud Bus** - 事件...

    SpringCloud-Ribbon,使用RestfulTemplate实现负载均衡练习

    2. 在Spring配置类中,创建一个Bean,注入`IRestTemplate`接口的实现,Spring Cloud会自动注入一个带有Ribbon负载均衡功能的RestTemplate实例: ```java @Configuration public class RestTemplateConfig { @...

    spring-cloud-ribbon

    Ribbon是Netflix开发的一个客户端负载均衡器,Spring Cloud将其集成,使得我们可以方便地在微服务之间进行客户端负载均衡。本文将深入探讨如何使用Spring Cloud Ribbon进行编码方式的配置,以便实现客户端负载均衡...

    SpringCloud-Learning-master.zip

    2. **服务调用**: 使用Ribbon和Feign实现客户端的负载均衡,提高服务的可用性和容错性。 3. **熔断与降级**: Hystrix提供熔断机制,当服务调用异常或超时时,快速返回默认值,避免服务雪崩。 4. **服务网关**: ...

    springcloud-服务注入与发现、服务间调用、负载均衡.zip

    在SpringCloud中,除了Ribbon内置的负载均衡策略,如轮询、随机等,还可以自定义策略。此外,Zuul和Gateway作为API网关,提供了更高级别的路由和过滤功能,包括负载均衡。它们可以在请求进入服务之前进行分发,不仅...

    springcloud-ribbon-feign-hystrix-zuul-config

    在Spring Cloud框架中,"springcloud-ribbon-feign-hystrix-zuul-config"这个标题涉及到四个关键组件:Ribbon、Feign、Hystrix和Zuul,以及配置管理Config。这些组件都是构建分布式系统时常用的服务发现、客户端负载...

    springcloud-demo-master.zip

    Ribbon是Netflix开发的一个客户端负载均衡器,它被集成在SpringCloud中,用于处理服务之间的调用。在"springcloud-demo-master"项目中,Ribbon会自动选择一个合适的Eureka注册的服务实例进行请求,实现客户端的负载...

Global site tag (gtag.js) - Google Analytics