主要内容
Ribbon简介
使用Ribbon开发微服务
集中式与进程内负载均衡区别
Ribbon常见的负载均衡策略
Ribbon的点对点直连
学习目标
Spring Cloud Netflix Ribbon
一、 Ribbon简介
Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它不像spring cloud服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个spring cloud 微服务中。包括feign提供的声明式服务调用也是基于该Ribbon实现的。ribbon默认提供很多种负载均衡算法,例如 轮询、随机 等等。甚至包含自定义的负载均衡算法。Ribbon可以用于解决并提供微服务的负载均衡的问题。
二、 使用Ribbon开发微服务
在Spring Cloud中,使用Ribbon技术开发Eureka Client组件还是非常方便的。我们在开发过程中,不需要像Dubbo那样关注服务的角色。无论是Provider还是Consumer都是一个微服务客户端,只是在编码层面上,服务消费者代码的开发相对比较麻烦。我们通过简单案例测试一下Spring Cloud中的微服务开发过程。
因为现在的Eureka Server部署在Linux中,并已为Linux定义了新的主机域名,需要先修改开发测试环境中的hosts文件。windows中的hosts文件位于:C:windowssystem32dirversetchosts。新增内容如下:(IP根据具体情况配置)
1 创建Eureka Client工程
1.1 POM依赖
2 创建Application Service服务提供者Module
3 开发服务提供者 - Application Service
3.1 POM依赖
3.2 服务提供者代码
3.3 配置文件application.yml
3.4 启动类
3.5 检查Eureka Server中的服务注册情况
4 创建Application Client服务消费者Module
5 开发服务消费者 - Application Client
5.1 POM依赖
5.2 服务消费者代码
5.2.1 服务接口
5.2.2 服务实现
5.2.3 控制器
5.4 启动类
三、 集中式与进程内负载均衡区别
业界主流的负载均衡解决方案有:集中式负载均衡和进程内负载均衡。
1 集中式负载均衡
即在客户端和服务端之间使用独立的负载均衡设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务端。
2 进程内负载均衡
将负载均衡逻辑集成到客户端组件中,客户端组件从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务端发起请求。Ribbon就是一个进程内的负载均衡实现。
四、 Ribbon常见的负载均衡策略
Ribbon就属于进程内负载均衡,它只是一个类库,集成于Eureka Client进程,Eureka Client进程通过访问注册中心Eureka Server发现服务列表,发现的服务列表信息是由ribbon来管理的。当访问Application Service的时候,Application Client会通过ribbon来找到合适的Application Service地址信息,并发起远程调用请求。
1 Ribbon中的常用负载均衡简介
ribbon的负载均衡策略是通过不同的类型来实现的,下表详细介绍一些常用负载均衡策略及对应的Ribbon策略类。
2 配置负载均衡策略
可以通过修改Application Client应用的全局配置文件来改变当前环境中使用的Ribbon负载均衡策略。
五、 Ribbon的点对点直连
Ribbon也可以脱离Eureka Server注册中心,通过配置的方式指定要调用的远程服务信息,实现Ribbon点对点直连。修改的配置内容如下: