首页 > 其他分享 >Netflix之Ribbon

Netflix之Ribbon

时间:2023-10-07 18:24:48浏览次数:45  
标签:负载 服务 Netflix Ribbon 均衡 服务器 ribbon

一、负载均衡

1、背景

当系统面临大量的用户访问,负载过高的时候,通常会增加服务器数量来进行横向扩展(集群),多个服务器的负载需要均衡,以免出现服务器负载不均衡,部分服务器负载较大,部分服务器负载较小的情况。通过负载均衡,使得集群中服务器的负载保持在稳定高效的状态,从而提高整个系统的处理能力。

2、目的

将请求分发到其他功能相同的服务。

3、分类

软件负载均衡:nginx,lvs
硬件负载均衡:F5
我们只关注软件负载均衡,
第一层可以用DNS,配置多个A记录,让DNS做第一层分发。
第二层用比较流行的是反向代理,核心原理:代理根据一定规则,将http请求转发到服务器集群的单一服务器上。

4、服务端负载均衡

在客户端和服务端中间使用代理,对客户端提供统一的入口,内部自己决定去那一台服务器。 nginx。

5、客户端负载均衡

根据自己的情况做负载,发起调用时选择一台服务进行请求。Ribbon就是。

6、区别

最大的区别在于服务端地址列表的存储位置,以及负载算法在哪里。
在客户端负载均衡中,所有的客户端节点都有一份自己要访问的服务端地址列表,这些列表统统都是从服务注册中心获取的。
在服务端负载均衡中,客户端节点只知道单一服务代理的地址,服务代理则知道所有服务端的地址。

二、Ribbon简介

Ribbon是Netflix开发的客户端负载均衡器,为Ribbon配置服务提供者地址列表后,Ribbon就可以基于某种负载均衡策略算法,自动地帮助服务消费者去请求 提供者。
Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。我们也可以实现自定义负载均衡算法。

三、Ribbon使用方式

1、Ribbon单独使用

作为一个独立的负载均衡组件。只是需要我们手动配置 服务地址列表。

2、Eureka配合使用

Ribbon可自动从Eureka Server获取服务提供者地址列表(DiscoveryClient),并基于负载均衡算法,请求其中一个服务提供者实例。

3、与OpenFeign和RestTemplate进行无缝对接

让二者具有负载均衡的能力。OpenFeign默认集成了ribbon。

四、Ribbon组成

官网首页:https://github.com/Netflix/ribbon

  • ribbon-core: 核心的通用性代码。api一些配置。
  • ribbon-eureka:基于eureka封装的模块,能快速集成eureka。
  • ribbon-examples:学习示例。
  • ribbon-httpclient:基于apache httpClient封装的rest客户端,集成了负载均衡模块,可以直接在项目中使用。
  • ribbon-loadbalancer:负载均衡模块。
  • ribbon-transport:基于netty实现多协议的支持。比如http,tcp,udp等。

五、Ribbon的负载均衡算法

1、ZoneAvoidanceRule(区域权衡策略)

默认实现,复合判断Server所在区域的性能和Server的可用性,轮询选择服务器。

2、BestAvailableRule(最低并发策略)

会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务。逐个找服务,如果断路器打开,则忽略。

3、RoundRobinRule(轮询策略)

以简单轮询选择一个服务器。按顺序循环选择一个server。

4、RandomRule(随机策略)

随机选择一个服务器。

5、AvailabilityFilteringRule(可用过滤策略)

会先过滤掉多次访问故障而处于断路器跳闸状态的服务和过滤并发的连接数量超过阀值得服务,然后对剩余的服务列表安装轮询策略进行访问。

6、WeightedResponseTimeRule(响应时间加权策略)

据平均响应时间计算所有的服务的权重,响应时间越快服务权重越大,容易被选中的概率就越高。刚启动时,如果统计信息不中,则使用RoundRobinRule(轮询)策略,等统计的信息足够了会自动的切换到WeightedResponseTimeRule。响应时间长,权重低,被选择的概率低。反之,同样道理。此策略综合了各种因素(网络,磁盘,IO等),这些因素直接影响响应时间。

7、RetryRule(重试策略)

先按照RoundRobinRule(轮询)的策略获取服务,如果获取的服务失败则在指定的时间会进行重试,进行获取可用的服务。如多次获取某个服务失败,就不会再次获取该服务。主要是在一个时间段内,如果选择一个服务不成功,就继续找可用的服务,直到超时。

六、配置负载均衡策略

1、注解方式

@Bean
public IRule myRule(){
	//return new RoundRobinRule();
	//return new RandomRule();
	return new RetryRule(); 
}

2、配置文件

针对某个服务定策略

provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

给所有服务定策略

# 配置文件方式优先级高于注解方式
ribbon:
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

七、Ribbon脱离Eureka

ribbon:
  eureka:
    enabled: false
  # Ribbon可以和服务注册中心Eureka一起工作,从服务注册中心获取服务端的地址信息,也可以在配置文件中使用listOfServers字段来设置服务端地址。
  listOfServers: localhost:80,localhost:81

标签:负载,服务,Netflix,Ribbon,均衡,服务器,ribbon
From: https://www.cnblogs.com/xinay/p/17746690.html

相关文章

  • [SpringCloud 01] RestTemplate Ribbon Feign
    SpringCloud11.RestTemplatespringcloud是基于rest的框架,所以在调用其他服务的时候,可以支持用restTemplate来调用.可以在spring中首先用@Bean的方式把ResTemplate放入spring容器@ConfigurationpublicclassMyConfig{@BeanpublicRestTemplategetRestTem......
  • Netflix之Actuator
    一、Actuator简介监控应用,上报状态信息二、开启监控<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>三、端点SpringBoot2.0的Actuator默认只暴露了health和info端点1、......
  • Netflix之Eureka
    一、Eureka简介1、背景传统应用中,组件之间的调用,通过有规范的约束的接口来实现,从而实现不同模块间良好的协作。但是被拆分成微服务后,每个微服务实例的网络地址都可能动态变化,数量也会变化,使得原来硬编码的地址失去了作用。需要一个中心化的组件来进行服务的登记和管理。2、注册......
  • Netflix之Zuul
    一、什么是ZuulZuul是Netflix开源的微服务网关,核心是一系列过滤器。这些过滤器可以完成以下功能。所有微服务的入口。进行分发。身份认证和安全。拦截不合法请求。监控。更加全面收集请求。动态路由。动态将请求分发到不同的后端集群。压力测试。可以逐渐增加对后端的流量,......
  • Netflix之Feign
    一、什么是FeignFeign是Netflix开发的一套声明式、模板话的http请求客户端,更便捷优雅的迪用API。会根据带有注解的函数信息构建网络请求模板,在请求发送之前,将函数的参数值设置到请求模板中。是一个http请求的轻量级框架,封装了http调用流程,面向接口编程,可以以接口注解的方式调用......
  • Netflix的eureka注册中心简单使用
    使用服务端<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>server:port:9000servlet:context-path:/eureka-servere......
  • 负载均衡 —— SpringCloud Netflix Ribbon
    Ribbon简介Ribbon是Netfix客户端的负载均衡器,可对HTTP和TCP客户端的行为进行控制。为Ribbon配置服务提供者地址后,Ribbon就可以基于某种负载均衡算法自动帮助服务消费者去请求。Ribbon默认提供了很多负载均衡算法,例如轮询、随机等,也可以为Ribbon实现自定义的负载均......
  • SpringCloud中Ribbon负载均衡配置
    配置方法在启动类配置,使用此配置方法,对应全部服务都会进行该规则的负载均衡@BeanpublicIRulerandomRule(){//方法名及返回值根据下表修改即可returnnewRandomRule();}在对应yml文件配置,使用这种方法可以对某一个服务单独配置userservice:#给某个微......
  • Ribbon是如何进行负载的
    1.Ribbon是如何进行负载的配置类:RibbonClientConfiguration@Bean @ConditionalOnMissingBean publicILoadBalancerribbonLoadBalancer(IClientConfigconfig, ServerList<Server>serverList,ServerListFilter<Server>serverListFilter, IRulerule,......
  • Ribbon-饥饿加载
     可以加载多个  ......