Ribbon负载均衡

Ribbon与Eureka的关系

Eureka的服务拉取与负载均衡都是由Ribbon来实现的。

当服务发送http://userservice/user/xxx[htt://userservice/user/xxx](http://userservice/user/xxx "htt://userservice/user/xxx")请求时,是无法到达userservice服务的,会通过Ribbon会把这个请求拦截下来,通过Eureka-server转换为真实的ip与端口。

如果服务名对应多个服务,Eureka-server会把所有的ip与端口返回给Ribbon,Ribbon来做负载均衡。

@LoadBalanced注解表示以后的请求由Ribbon拦截和处理。

负载均衡策略

Ribbon的负载均衡策略规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则。

下面是IRule接口的继承关系图:

调整负载均衡的方案

Ribbon的默认负载均衡策略是轮询(Round Robin)调度。

方法一,定义一个新的IRule:

这种方法,以后不管调用哪个微服务都是指定这个方案的。

java 复制代码
@Bean
public IRule randomRule() {
    return new RandomRule();
}

方法二,在yml中配置:

只有userservice这个服务时,才会使用RandomRule的方案。

java 复制代码
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

注意:方法一的优先级比方法二高!

解饿加载

Ribbon模式是采用懒加载,既第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载。

这里的服务名称是自己要调用的服务名称,不是自己的服务名称。

java 复制代码
ribbon:
  eager-load:
    enabled: true           #开启饥饿加载
    clients: userservice    #指定对userservice这个服务饥饿加载
相关推荐
眠りたいです几秒前
Docker:认识Docker镜像仓库并进行拉取推送
运维·nginx·docker·容器·busybox
不想画图11 分钟前
Ansible自动化运维工具及基础用法
运维·自动化·ansible
大猫和小黄17 分钟前
Ubuntu环境下GitBlit安装部署与版本库迁移
linux·运维·git·ubuntu·gitblit
sdyeswlw19 分钟前
一二三物联网医院后勤综合运维管理系统:让后勤保障更智能、更省心
运维·物联网
管理大亨35 分钟前
光伏大棚智慧管理:ELK数据中枢
大数据·运维·elk·elasticsearch
未来之窗软件服务36 分钟前
幽冥大陆(五十四)ASR C语言识别到自动化软件——东方仙盟筑基期
运维·自动化·仙盟创梦ide·东方仙盟·东方仙盟自动化·东方仙盟商业开发
凤凰战士芭比Q39 分钟前
Jenkins(部署、基础项目)
运维·servlet·jenkins
倔强的石头1061 小时前
Linux 进程深度解析(四):环境变量 —— 进程的“环境 DNA”
linux·运维·服务器
沈健_算法小生1 小时前
Jenkins权限控制实现
运维·jenkins
Wpa.wk1 小时前
自动化测试-自动化测试用例流程设计
运维·经验分享·自动化·测试用例·测试流程·测试流程设计