Ribbon 简介
一、Ribbon 简介
1. Ribbon 介绍,
Ribbon 是 NetFlix 公司退出的开源软件,是基于 HTTP 和 TCP 协议的,其主要功能是实现客户端的负载均衡算法。
Spring Cloud 中Ribbon是基于NetFlix公司的 Ribbon实现的。它不需要单独部署,但是却存在于整个微服务中。OpenFegin 也是基础Ribbon实现的。
2. Ribbon 原理
内部基于 ILoadBalancer 是实现的:
使用 Ribbon 工作原理
所有的项目都会注册到 Eureka 中,Eureka 允许不同项目的 spring.application.name 相同。当相同时会认为是这些项目是一个集群,所以同一个项目部署多次都是设置应用程序名相同。
Application Client 会从 Eureka 中根据 spring.application.name 加载 Application Service 的列表。根据设定的负载均衡算法,从列表中取出一个 URL,到此 Ribbon 的事情结束。剩下的事情由程序员自己进行技术选型,选择一个 HTTP 协议工具,通过这个 URL 调用 Application Service。
注意:以下事情和 Ribbon 没有关系的
- Application Service 注册到 Eureka 过程。这是 Eureka 的功能。
- Application Client 从 Eureka 取出注册列表。这是 Eureka 的功能。
- Application Client 通过 URL 访问 Application Service 。这个根据自己使用的 HTTP 工具。
- 只有 Application Client 从 Eureka 中取出列表后进行负载均衡算法的过程和Ribbon有关。
二、负载均衡解决方案分类
集中式负载均衡
即在客户端和服务端之间使用独立的负载均衡设施(可以是硬件、如F5,也可以是软件,如 Nginx),由该设施负责把访问通过某种策略转发至服务器。
也叫做:服务端负载均衡。
image.png进程内负载均衡
将负载均衡逻辑集成到客户端组件中,客户端组件从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择一个合适的服务端发起请求。Ribbon 就是一个进程内负载均衡的实现。
也叫做:客户端负载均衡。
三、微服务架构中的 Ribbon
微服务架构把项目查分成多个项目,一定会出现一个项目调用另外一个项目的情况。
再加上 Eureka 支持多项目同项目名(spring.application.name)所以这个时候就可以使用到 Ribbon。
项目B 和项目C 实际上是同一个项目,项目 A 调用项目 B 和项目 C ,那么 Ribbon 应该配置在项目 A 中(Application Client 中)。
image.png