Ribbon负载均衡

1.负载均衡原理

order-service在调用user-service时,发送请求的地址是 http://userservuce/user/1,显然这个地址并不是一个真实可用的地址,在发送该请求时,Ribbon会将此请求拦截下来,拿到服务名称之后,向eureka-server拉去userservice服务,eureka-server会返回两个服务列表(因为我的项目里面user-service有两个端口),然后Ribbon再去做负载均衡,从两个里面挑一个。

order-service发起请求后会被LoadBalanceInterceptor负载均衡拦截器拦截,获取请求中的服务名称,把它交给RibbonLoadBanlanceClient,然后RibbonLoadBanlanceClient会把服务交给DynamicServerListLoadBalancer,它会向eureka-server拉取服务列表,然后根据IRule会基于规则(例如:轮询),挑选服务,然后由RibbonLoadBanlanceClient取替换ip和端口,发起请求。

2.负载均衡策略

由上可知Ribbon的负载均衡规则是一个叫Rule的接口来定义的,没一个子接口都是一种规则,下面是IRule的接口实现。

这是相关规则的描述

如何改变负载均衡的规则,以下有两种方式

1.代码实现:在order-service的OrderApplication的类中,定义一个新的IRule:

这种方式无论是调用那种方式,都采用的是RandomRule

2.配置文件方式:在order-service中的application.yml文件里面,添加新的配置

这种配置方案是针对userservice服务的,只有调用该服务才是用的随机规则

3.饥饿加载

Ribbon默认采用的是懒加载,即第一次访问时才会取创建LoadBalanceClient,请求时间会很长,而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

相关推荐
拄杖忙学轻声码2 小时前
shardingsphere-jdbc集成Seata分布式事务
mysql·spring cloud
码代码的小农6 小时前
SpringCloud Alibaba微服务工程搭建
spring·spring cloud·微服务
识途老码21 小时前
Ningx负载均衡
运维·负载均衡
小杜-coding1 天前
黑马头条day02
java·spring boot·spring·spring cloud·java-ee·maven·mybatis
AronTing1 天前
11-Spring Cloud OpenFeign 深度解析:从基础概念到对比实战
后端·spring cloud·架构
2401_890665861 天前
免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制
java·hadoop·spring boot·python·mysql·spring cloud·php
小杨4042 天前
springboot框架项目实践应用十九(nacos配置中心)
spring boot·后端·spring cloud
Neo Yang2 天前
Spring Cloud初探之使用load balance包做负载均衡(三)
spring cloud·负载均衡·load balance
魔道不误砍柴功2 天前
SpringCloud Alibaba 之分布式全局事务 Seata 原理分析
分布式·spring·spring cloud
Charlie__ZS2 天前
Spring Cloud-负载均衡
spring·spring cloud·负载均衡