负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式。一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如Nginx。另一种是将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提供者的信息列表,有了信息列表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。
Ribbon是 Netflix公司开源的一个负载均衡的组件,它属于上述的第二种方式,是将负载均衡逻辑封装在客户端中,并且运行在客户端的进程里。 Ribbon是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的负载均衡行为。
在 Spring Cloud构建的微服务系统中, Ribbon作为服务消费者的负载均衡器,有两种使用方式,一种是和 RestTemplate相结合,另一种是和 Feign相结合。 Feign已经默认集成了 Ribbon,关于 Feign的内容将会在下一章进行详细讲解。
Ribbon有很多子模块,但很多模块没有用于生产环境,目前Netiflix公司用于生产环境的 Ribbon子模块如下。
- ribbon- loadbalancer:可以独立使用或与其他模块一起使用的负载均衡器API。
- ribbon-eureka: Ribbon结合 Eureka客户端的APl,为负载均衡器提供动态服务注册列表信息。
- ribbon-core: Ribbon的核心APl。