简介
分布式系统中,各个微服务会部署多个实例,如何将服务消费者均匀分摊到多个服务提供者实例上,就要使用到负载均衡器。
Ribbon 是负载均衡器 ,它提供了很多负载均衡算法,例如轮询、随即等,在配置服务提供者地址后,可以将服务消费者请求均匀的分发。
Ribbon常用负载均衡策略
Ribbon就属于进程内负载均衡,它只是一个类库,集成于Eureka Client进程,Eureka Client进程通过访问注册中心Eureka Server发现服务列表,发现的服务列表信息是由ribbon来管理的。
当访问Application Service的时候,Application Client会通过ribbon来找到合适的Application Service地址信息,并发起远程调用请求。
Ribbon的负载均衡策略是通过不同的类型来实现的,下表详细介绍一些常用负载均衡策略及对应的Ribbon策略类。
Ribbon服务搭建
修改springcloud-consumer-dept-80消费者服务。
① 修改pom和application.yml文件
pom中添加如下依赖
修改application.yml文件
② 在相关类添加注解
因为消费者通过RestTemplate接口进行远程调用服务的,所以在这个方法添加Ribbon注解,通过@LoadBalanced注解进行负载均衡,选择调用服务提供者
controller类通过服务名称调用。
启动类添加@EnableEurekaClient 注解,因为它是通过服务名称调用的,而服务名称在注册中心中注册着,所以需要添加注解,连接注册中心
Ribbon负载均衡的基本配置算是OK了,因为测试负载均衡,需要多个服务提供者。所以新建服务提供者
多服务提供环境搭建
创建springcloud-provider-dept-8002和springcloud-provider-dept-8003子项目,和8001相同只是对应的端口号和一些配置修改即可。
几乎和8001完全一样,只是对应的8002 8003的application.yml服务器端口改为8002和8003
测试
- 启动三个Eureka注册中心
- 启动springcloud-consumer-dept-80
- 启动springcloud-provider-dept-8001/8002/8003三个服务提供者
访问 http://localhost/consumer/dept/get/1
多次访问,查看三个服务提供者的控制台
发现平均访问,这是Ribbon默认的负载均衡访问算法,也可以自定义访问规则
总结