Spring Cloud Ribbon 是一个基于TCP和HTTP的客户端负载均衡工具,基于Netflix Ribbon实现。虽然是一个工具类框架,它不想服务注册中心,网关等单独部署,不过它几乎存在于每一个Spring Cloud 构建的微服务体系和基础设施中。在微服务间的调用,API网观的请求转发等实际上都是通过Ribbon来实现的。包括我们常用到的Feign,也是依赖于Ribbon来实现的工具。
客户端负载均衡
负载均衡在系统架构中非常重要,并且是不得不去实施的内容。负载均衡对系统高可用,网络压力的处理,系统扩容的重要手段。我们通常所说的负载均衡是指服务端复杂均衡。如常规的硬件负载均衡F5,以及软件负载均衡Nginx等。这些都会在软件模块维护一个下挂可用的服务端清单,通过心跳检测来剔除故障的节点以保证清单中都是可用的服务端节点。当客户端发送请求到达负载均衡设备的时候,改设备按照某种算法(线性轮询,按权重轮询,按流量负载,随机等)从维护的可用服务清单中取出一台服务端地址,然后进行转发。
客户端负载均衡和服务端负载最大的不同点在于服务列表清单存储的位置。在客户端负载均衡中,所有客户端节点都要维护自己要访问的服务端清单。这些数据来源于注册中心,比如Eureka服务端。在客户端负载均衡中也需要心跳去维护服务端清单的健康性,默认会创建针对各个服务治理框架的Ribbon自动化整合配置,比如Eureka中的org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration。
通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡非常简单,只需要两步:
1.服务提供者注册到服务注册中心。
2.服务消费者直接通过调用被@LoadBalance注解修饰过的RestTemplete来现实面向服务的接口调用。