springcloud(十二):Ribbon客户端负载均衡介绍

springcloud(十二):Ribbon客户端负载均衡介绍

 

Ribbon简介

         使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型。既然有多个服务实例,那么调用的时候应该如果选择呢?这就需要实现一定的负载均衡策略。

         实现负载均衡主要有两种方式,第一种是通过服务端进行负载均衡,第二种是通过客户端进行负载均衡。服务端方式的实现原理是通过反向代理并按照某种负载均衡策略把客户端请求分发到可用的服务端节点上,如Nginx。客户端方式的实现原理是在客户端先获取所有可用的服务端节点,再通过某种负载均衡策略选择其中一个节点进行访问。

       Ribbon就是一种客户端负载均衡的实现,它是有Netflix发布的一个基于HTTP和TCP的客户端负载均衡工具。服务消费者继承Ribbon后,只需要配置服务提供者地址,Ribbon就可以基于指定的负载均衡算法,自动帮服务消费者分配请求。Ribbon提供了很多常见的负载均衡算法,入轮询、随机、权重等。作为Spring Cloud体系中的一员,Ribbon可以和Eureka方便地集合使用,可以直接从Eureka Server中获取所有服务提供者的节点地址,然后根据指定的负载均衡策略选择某个节点进行访问。

   

Ribbon是一个在云服务中久经沙场的客户端IPC库,它提供以下的一些特性:

 

  1. 负载均衡
  2. 故障容错
  3. 在异步和动态的模型中支持多协议通讯(HTTP、TCP、UDP)
  4. 缓存与批处理

引入Ribbon依赖

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

Ribbon所包含的模块

  1. ribbon:在其他Ribbon模块和Hystrix上集成负载均衡、容错、缓存/批处理的api
  2. ribbon-loadbalancer:可以独立或与其他模块一起使用的负载均衡器的api
  3. ribbon-eureka:使用Eureka客户端为云提供动态服务器列表的api
  4. ribbon-transport:使用带有负载均衡功能的RxNetty支持HTTP、TCP和UDP协议的传输客户端
  5. ribbon-httpclient:构建在Apache HttpClient之上,与负载均衡器集成的REST客户端
  6. ribbon-example:提供了一些示例
  7. ribbon-core:客户端配置api和其他共享api

负载均衡器组件

Ribbon提供的基本功能

  1. 向通信客户端提供公共DNS名称或单个服务器的IP
  2. 根据特定的逻辑选择服务器

Ribbon提供的高级功能

  1. 通过将客户端划分为区域(如数据中心的机架),在相同区域中减少服务器延迟,从而在客户端和服务器之间建立关联
  2. 保持服务器的统计信息,避免出现高延迟或频繁故障的服务器
  3. 保持区域的统计信息,避免可能出现停机的区域

负载均衡器的三大子模块

  1. Rule:确定从列表返回哪个服务的逻辑组件
  2. Ping:在后台运行的组件以确保服务的活跃度
  3. ServerList:这可以是静态的或动态的。如果它是动态的(由DynamicServerListLoadBalancer使用),后台线程将在特定的时间间隔刷新和过滤列表


创建Ribbon程序

如架构图所示,Ribbon充当负载均衡器的作用,能够让我们的服务消费者调用到自己想使用的服务,服务消费者不用关心中间具体的操作,只需要将要调用的服务信息告诉负载均衡器,Ribbon就会从相应的服务集群中选择一个可以使用的服务器,供服务消费者调用。

负载均衡策略

  1. WeightedResponseTimeRule:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低。
  2. RoundRobinRule:轮询选择服务节点(此为默认的负载均衡策略)。
  3. RandomRule:随机选择一个服务节点。
  4. ZoneAvoidanceRule:综合考虑服务节点所在区域的性能和服务节点的可用性来选择服务节点。
  5. RetryRule:重试机制。在一个配置时间段内,当选择服务节点不成功时会一直尝试重新选择。
  6. BestAvailableRule:选择一个并发请求最小的服务节点。
  7. AvailabilityFilteringRule:过滤掉那些因为一直连接失败而被标记为circuit tripped的服务节点和那些高并发的服务节点(active connections 超过配置值)

转载请注明出处:https://blog.csdn.net/MrSpirit/article/details/80182508

 

 

 

原文地址:https://www.cnblogs.com/holly8/p/11049756.html