Spring Cloud Ribbon 全解 (1) - 总览篇

2021-04-12 14:56:25 浏览数 (1)

本文基于SpringCloud-Dalston.SR5

Ribbon是一个客户端负载均衡解决方案,简单来说,就是从Eureka获取可用服务实例列表,然后将请求根据某种策略发到这些实例上面执行

What is Spring Cloud Netflix?

其官方文档中对自己的定义是:

Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common patterns inside your application and build large distributed systems with battle-tested Netflix components. The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon)..

Spring Cloud Netflix这个项目对于Spring Boot应用来说,它集成了NetFlix OSS的一些组件,只需通过注解配置和Spring环境的通用简单的使用注解,你可以快速的启用和配置这些久经测试考验的NetFlix的组件于你的应用和用于构建分布式系统中。这些组件包含的功能有服务发现(Eureka),熔断器(Hystrix),智能路由(Zuul)以及客户端的负载均衡器(Ribbon) 简单的来说,Spring Cloud NetFlix这个项目对NetFlix中一些久经考验靠谱的服务发现,熔断,网关,智能路由,以及负载均衡等做了封装,并通过注解的或简单配置的方式提供给Spring Cloud用户用。

What is Ribbon?

Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following features - Load balancing - Fault tolerance - Multiple protocol (HTTP, TCP, UDP) support in an asynchronous and reactive model - Caching and batching

Ribbon是一个客户端负载均衡器,提供负载均衡,容错,多协议异步模型,缓存和批处理等特性

负载均衡?

负载均衡一般是指服务端负载均衡。

服务端负载均衡

分为硬件负载均衡还有软件负载均衡。 硬件负载均衡常见的有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,性能很高,但是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用 一般项目都用软负载均衡,LVS/HAProxy、Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉 软件负载均衡则主要是在服务器上安装一些具有负载均衡功能的软件来完成请求分发进而实现负载均衡,常见的就是Nginx。

无论是硬件负载均衡还是软件负载均衡,它的工作原理都不外乎下面这张图:

无论是硬件负载均衡还是软件负载均衡都会维护一个可用的服务端清单,然后通过心跳机制来删除故障的服务端节点以保证清单中都是可以正常访问的服务端节点,此时当客户端的请求到达负载均衡服务器时,负载均衡服务器按照某种配置好的规则从可用服务端清单中选出一台服务器去处理客户端的请求。这就是服务端负载均衡。

客户端负载均衡

即由请求发起方,客户端负责负载均衡。基本工作流程是,客户端请求出服务器列表之后在其中选择一个执行请求。 Ribbon的实现方式采用的就是客户端负载均衡,在Spring Cloud体系中,Ribbon在每个服务调用方,从Eureka获取服务实例列表,根据一定的负载均衡规则来选择实例执行请求。

从ribbon-core还有ribbon-loadbalancer看负载均衡的一般组成

Ribbon主要包含三个模块

  • ribbon-core和ribbon-loadbalancer
  • ribbon-eureka
  • ribbon-httpclient

从core的源代码中,我们看出对于Ribbon,客户端负载均衡包括如下功能:

  • 可动态配置
  • 获取服务实例列表,维护可用实例
  • 根据请求以及某种负载均衡规则选择服务实例
  • 执行请求,响应处理
  • 重试

0 人点赞