源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

Ribbon从入门到源码解析 阅读详情

引言

Spring Cloud Ribbon 解决负载均衡的迷惑

源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

 

代码准备

依赖关系

+------------+              +------------+
|            |              |            |
|            |              |            |
|            |              |            |
|            |              |            |
|  consumer  +------------> |   provider |
|            | RestTemplate |            |
|            |              |            |
|            |              |            |
|            |              |            |
+------------+              +------------+
复制代码

pom 依赖

加入nacos 服务发现即可,内部引用了spring-cloud-ribbon相关依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
复制代码

调用客户端

我们这里以最简单的 RestTemplate 调用开始使用Ribbon

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
	return new RestTemplate();
}

// Controller 使用restTemplate 调用服务提供方接口
ResponseEntity<String> forEntity = restTemplate.getForEntity("http://provider/req", String.class);

复制代码

源码解析

创建调用拦截器

1. 获取全部 @LoadBalanced标记的RestTemplate

public class LoadBalancerAutoConfiguration {
	@LoadBalanced
	@Autowired(required = false)
	private List<RestTemplate> restTemplates = Collections.emptyList();
}
复制代码

2. 增加 LoadBalancerInterceptor 处理逻辑

 

源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

 

 

  • 没有引入 spring-retry使用的是
@Bean
public LoadBalancerInterceptor ribbonInterceptor() {
	return new LoadBalancerInterceptor();
}
复制代码
  • 引入 spring-retry 使用的是
@Bean
@ConditionalOnMissingBean
public RetryLoadBalancerInterceptor ribbonInterceptor() {
	return new RetryLoadBalancerInterceptor();
}
复制代码
  • LoadBalancerInterceptor 业务逻辑
public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept() {
        final URI originalUri = request.getURI();
        // http://demo-provider/req 截取 demo-provider 服务名称
        String serviceName = originalUri.getHost();

        // 默认注入的 RibbonAutoConfiguration.RibbonLoadBalancerClient
        return this.loadBalancer.execute(serviceName,
                // 创建请求对象
                this.requestFactory.createRequest(request, body, execution));
    }
}
复制代码

执行拦截器

3. RibbonLoadBalancerClient执行

//RibbonAutoConfiguration默认注入的RibbonLoadBalancerClient
@Bean
@ConditionalOnMissingBean(LoadBalancerClient.class)
public LoadBalancerClient loadBalancerClient() {
  return new RibbonLoadBalancerClient(springClientFactory());
}
复制代码

4.execute执行

public class RibbonLoadBalancerClient implements LoadBalancerClient {
    public <T> T execute(){
        //获取具体的ILoadBalancer实现
        ILoadBalancer loadBalancer = getLoadBalancer(serviceId);

        // 调用ILoadBalancer 实现获取Server
        Server server = getServer(loadBalancer, hint);
        RibbonServer ribbonServer = new RibbonServer(serviceId, server,
                isSecure(server, serviceId),
                serverIntrospector(serviceId).getMetadata(server));

        //获取状态记录器,保存此次选取的server
        RibbonLoadBalancerContext context = this.clientFactory
                .getLoadBalancerContext(serviceId);
        RibbonStatsRecorder statsRecorder = new RibbonStatsRecorder(context, server);
        T returnVal = request.apply(serviceInstance);
        statsRecorder.recordStats(returnVal);
        return returnVal;
    }
}
复制代码

获取ILoadBalancer

5 SpringClientFactory

// bean 工厂生成LoadBalancer 的实现
protected ILoadBalancer getLoadBalancer(String serviceId) {
	return this.springClientFactory.getLoadBalancer(serviceId);
}

// 具体生成逻辑看 RibbonClientConfiguration,这个Bean 只有工厂调用的时候才会创建
@Bean
@ConditionalOnMissingBean
public ILoadBalancer ribbonLoadBalancer(IClientConfig config,
ServerList<Server> serverList, ServerListFilter<Server> serverListFilter,
IRule rule, IPing ping, ServerListUpdater serverListUpdater) {
	return new ZoneAwareLoadBalancer<>();
}
复制代码

6.创建LoadBalancer 的依赖要素

名称 默认实现 作用 IClientConfig DefaultClientConfigImpl ribbon 客户端配置参数,例如: 超时设置、压缩设置等 ServerList NacosServerList 目标服务的实例实例表,具体服务发现客户端实现 ServerListFilter ZonePreferenceServerListFilter 针对ServerList 实例列表的过滤逻辑处理 IRule ZoneAvoidanceRule 负载均衡选择Server 的规则 IPing DummyPing 检验服务是否可用的方法实现 ServerListUpdater PollingServerListUpdater 针对ServerList 更新的操作实现

以上默认实现参考 RibbonClientConfiguration. ZoneAwareLoadBalancer

获取服务实例

//Server server = getServer(loadBalancer, hint);  4. excute 方法
protected Server getServer(ILoadBalancer loadBalancer, Object hint) {
	return loadBalancer.chooseServer(hint != null ? hint : "default");
}
复制代码

 

源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

 

 

7. ZoneAwareLoadBalancer

public class ZoneAwareLoadBalancer{
    public ZoneAwareLoadBalancer() {
        // 调用父类初始化方法。 这里会开启实例维护的定时任务等 (具体解析参考 扩展部分)
        super(clientConfig, rule, ping, serverList, filter, serverListUpdater);
    }
    @Override
    public Server chooseServer(Object key) {
        // 若是使用的 Nacos 服务发现,则没有 Zone 的概念,直接调用父类的实现
        if (!ENABLED.get() || getLoadBalancerStats().getAvailableZones().size() <= 1) {
            return super.chooseServer(key);
        }
        // 以下为有 Zone 的概念 例如 Eureka  (具体)
        ...
        return server;
    }
}
复制代码
  • 父类调用IRule实现选择Server
public Server chooseServer(Object key) {
	return rule.choose(key);
}
复制代码

 

源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

 

 

8.PredicateBasedRule 选择规则

public abstract class PredicateBasedRule {
    @Override
    public Server choose(Object key) {
        ILoadBalancer lb = getLoadBalancer();
        // 获取断言配置
        Optional<Server> server = getPredicate().chooseRoundRobinAfterFiltering(lb.getAllServers(), key);
        if (server.isPresent()) {
            return server.get();
        } else {
            return null;
        }
    }
}
复制代码

9. ZoneAvoidancePredicate服务列表断言

public class ZoneAvoidancePredicate {
    @Override
    public boolean apply(@Nullable PredicateKey input) {
        if (!ENABLED.get()) {
            return true;
        }
        // 还是获取区域配置,如是使用的 Nacos 直接返回true
        String serverZone = input.getServer().getZone();
        if (serverZone == null) {
            // there is no zone information from the server, we do not want to filter
            // out this server
            return true;
        }
        // 区域高可用判断
        ...
    }
}
复制代码

 

扩展: ServerList 维护

初始化ServerList

 

源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

 

 

在上文 6.创建LoadBalancer 的依赖要素,中 ServerList 目标服务的实例实例表,具体服务发现客户端实现。我们来看下 Nacos 的实现

public class NacosServerList extends AbstractServerList<NacosServer> {
    @Override
    public List<NacosServer> getInitialListOfServers() {
        return getServers();
    }

    @Override
    public List<NacosServer> getUpdatedListOfServers() {
        return getServers();
    }

    private List<NacosServer> getServers() {
        String group = discoveryProperties.getGroup();
        //调用nacos-sdk 查询实例列表
        List<Instance> instances = discoveryProperties.namingServiceInstance()
                .selectInstances(serviceId, group, true);
        // 类型转换
        return instancesToServerList(instances);

    }
}
复制代码

更新ServerListUpdater

 

源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

 

 

  • ServerList 初始化后更新操作通过 PollingServerListUpdater
public class PollingServerListUpdater implements ServerListUpdater {
    @Override
    public synchronized void start(final UpdateAction updateAction) {
        // 更新任务 交给updateAction 具体实现
        final Runnable wrapperRunnable = () -> {
            updateAction.doUpdate();
            lastUpdated = System.currentTimeMillis();
        };

        // 开启后台线程定时执行  updateAction
        scheduledFuture = getRefreshExecutor().scheduleWithFixedDelay(
                wrapperRunnable,
                initialDelayMs,
                refreshIntervalMs,
                TimeUnit.MILLISECONDS
        );
    }
}
复制代码
  • updateAction 实现
public void doUpdate() {
	DynamicServerListLoadBalancer.this.updateListOfServers();
}
复制代码
public class PollingServerListUpdater implements ServerListUpdater {
    public void updateListOfServers() {
        List<T> servers = new ArrayList();
        
        // 调用NacosServiceList 获取全部服务列表
        servers = this.serverListImpl.getUpdatedListOfServers();
        
        // 如果配置实例过滤器在执行过滤
        if (this.filter != null) {
            servers = this.filter.getFilteredListOfServers((List)servers);
        }
        
        // 更新LoadBalancer 服务列表
        this.updateAllServerList((List)servers);
    }
}
复制代码

扩展: Server 状态维护

 

源码解析最新版本—Spring Cloud Ribbon 解决负载均衡的迷惑

 

 

  • LoadBalancer 初始构造时会触发 setupPingTask()
public BaseLoadBalancer() {
  this.name = DEFAULT_NAME;
  this.ping = null;
  setRule(DEFAULT_RULE);
  // 开启ping 检查任务
  setupPingTask();
  lbStats = new LoadBalancerStats(DEFAULT_NAME);
}
复制代码
  • setupPingTask
void setupPingTask() {
  // 是否可以ping, 默认的DummyPing 直接 跳过不执行
  if (canSkipPing()) {
    return;
  }
  // 执行PingTask
  lbTimer.schedule(new BaseLoadBalancer.PingTask(), 0, pingIntervalSeconds * 1000);
  // 开启任务
  new BaseLoadBalancer.Pinger(pingStrategy).runPinger();
}
复制代码
  • SerialPingStrategy 串行执行逻辑
// 串行调度执行 Iping 逻辑
private static class SerialPingStrategy implements IPingStrategy {
  @Override
  public boolean[] pingServers(IPing ping, Server[] servers) {
    int numCandidates = servers.length;
    boolean[] results = new boolean[numCandidates];

    for (int i = 0; i < numCandidates; i++) {
      results[i] = false; /* Default answer is DEAD. */
      if (ping != null) {
        results[i] = ping.isAlive(servers[i]);
      }

    }
    return results;
  }
}
复制代码
  • 调用url 判断可用性
public class PingUrl implements IPing {
    public boolean isAlive(Server server) {
        urlStr = urlStr + server.getId();
        urlStr = urlStr + this.getPingAppendString();
        boolean isAlive = false;
        HttpClient httpClient = new DefaultHttpClient();
        HttpUriRequest getRequest = new HttpGet(urlStr);
        String content = null;

        HttpResponse response = httpClient.execute(getRequest);
        content = EntityUtils.toString(response.getEntity());
        isAlive = response.getStatusLine().getStatusCode() == 200;
        return isAlive;
    }
}
复制代码

扩展: RibbonClient 懒加载处理

由上文可知,默认情况下 Ribbon 在第一次请求才会去创建 LoadBalancer ,这种懒加载机制会导致服务启动后,第一次调用服务延迟问题,甚至在整合 断路器(hystrix)等出现超时熔断 。

为了解决这个问题,我们会配置 Ribbon 的饥饿加载

ribbon:
  eager-load:
    clients:
      - provider
复制代码
  • RibbonApplicationContextInitializer 服务启动后自动调用 工厂提前创建需要的ribbon clients
public class RibbonApplicationContextInitializer
        implements ApplicationListener<ApplicationReadyEvent> {
    private final List<String> clientNames;

    protected void initialize() {
        if (clientNames != null) {
            for (String clientName : clientNames) {
                this.springClientFactory.getContext(clientName);
            }
        }
    }
    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        initialize();
    }

}

点击加入,一线互联网技术等你来学习

点击加入领取免费技术资料咨询问题等。备注:优快云

Spring Cloud Alibaba教程——引入Ribbon 教程仓库:github Spring-Cloud-Alibaba-Learning 教程索引页:index Spring-Cloud-Alibaba-Learning 文章目录源码地址目标前置知识流程测试 源码地址 本篇内容的项目地址为:引入Ribbon 目标 使用Ribbon替换自定义的负载均衡器 完成service-a对service-b的负载均衡调用 前置知识 熟悉使用RestTemplate进行远程调用(不熟悉请移步1.2 微服务调用) 流程 由于spring-cloud-aliba 阅读详情

相关推荐

Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

围栏策略的优点是根据服务提供者的健康状况和权重进行负载均衡,可以确保请求分配得更均匀,同时避免了传统轮询策略可能导致的不公平问题。缺点是在服务器数量较少时,可能会导致请求次数较多的服务器承担更多的负载,而请求次数较少的服务器负载较轻。方法首先获取所有服务器的 权重总和,然后遍历服务器列表,根据权重比例随机选择一个服务器。如果在遍历过程中找不到合适的服务器(即随机权重小于当前权重),则返回当前服务器的引用。在实际应用中,可以根据实际情况调整服务器的权重,以实现更精确的负载均衡。最后返回响应时间最短的服务器。

AI时代光年 4037

SpringCloud-14-Ribbon介绍及使用

SpringCloud-14-Ribbon介绍及使用

时光 944

Spring Cloud Ribbon源码分析(Spring Cloud Kubernetes)

在项目中使用Ribbon的目的是在客户端(服务消费端)实现负载均衡。 在上一篇《Spring Cloud OpenFeign源码分析》中我们分析了为什么使用OpenFeign时,不配置url,且不导入Ribbon的依赖会报错。本篇继续分析OpenFeign是如何与Ribbon整合、Ribbon是如何实现负载均衡的、Ribbon是如何从注册中心获取服务的。 OpenFeign与Ribbon整合后的接口调用流程 OpenFeign与Ribbon整合实现负载均衡调用接口的流程如下: spring-clo.

吴就业 941

负载均衡Ribbon

ribbon负载均衡

qq_56187566的博客 424

PX4与ROS协同仿真:从键盘控制到无人机自主飞行

本文详细介绍了如何搭建PX4与ROS协同仿真环境,实现从键盘控制到无人机自主飞行的完整流程。通过XTDrone项目整合PX4飞控、ROS通信框架与Gazebo物理引擎,逐步讲解环境配置、键盘控制实现原理,并深入剖析了迈向Offboard模式实现自主飞行的核心代码与数据流,为无人机算法开发与测试提供了安全的仿真沙盒。

weixin_29169899的博客 498

JS+H5打字练习器

实现功能 1.导入.TXT文件到打字练习内容(部分浏览器可能出于安全问题限制了这一步操作) 2.输入文本到打字练习内(弹出输入框,将要练习的内容输入至输入框) 3. 开始练习,并根据正误在打字练习内容文本上修改颜色(某个字正确显示绿色,某个字错误,显示红色,某个字没有打显示灰色) 4.开始练习、结束练习,全部输入完成后自动结束练习,也可提前手动结束练习,结束练习后弹窗用显示时和正确率。(区别在于一个全部输入完成且全部正确,一个提前结束无其他条件) 效果图 分析 HTML 结构解析 根元素:<!DO

w11111xxxl的博客 1413

详解Ribbon

一文聊明白spring cloud Ribbon

BugMan的博客 3107

网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。

网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。

HWP18612324139的博客 3635

关于Ribbon在SpringCloudAlibaba2021.1版本中,找不到服务实例

关于Ribbon在SpringCloudAlibaba2021.1版本中,找不到服务实例

aoxiaojun的博客 1022

深度学习初探 - 入门 DL 主流框架

这个课程主要是引导大家入门TensorFlow、Theano、Keras 及 Caffe 几个主流的深度学习框架。在课程中有关各种算法的详细推导及思想我们不会做过多的陈诉,旨在通过让同学们动手操作搭建自己的神经网络模型,了解如何使用这些框架解决实际问题。课程会基于每个框架的官方文档,先带大家熟悉框架中基本的定义语法及常用函数(可看成深度模型的小零件),每个实验最后都会综合这些零件搭建一个简易的神经深度网络模型。这个项目十分适合具有一定python编程基础,对人工智能、深度学习感兴趣的同学。Theano。

2401_86435672的博客 1234

Eclipse邂逅Deepseek:本地化部署全攻略

通过前面一系列的步骤,我们成功地在 Eclipse 中完成了 Deepseek 的本地化部署,并且对部署后的功能进行了测试和优化,还解决了可能遇到的一些常见问题。这一过程不仅让我们体验到了将强大的大语言模型与高效的开发环境相结合的魅力,也为我们在软件开发过程中带来了诸多便利。本地化部署 Deepseek 到 Eclipse,使得我们在代码编写过程中能够获得智能的代码补全和精准的问答支持,大大提高了开发效率。同时,本地化部署保障了数据的安全性和隐私性,避免了数据在传输过程中可能面临的风险。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4509

8.Ribbon负载均衡—2020最新版周阳SpringCloud(H版&alibaba)学习笔记08

1. Ribbon概述 1.1 Ribbon是什么 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。 Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。 简单的说,就是在配置文件中列出Load Balancer (简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使Ribbon

逆天的博客 473

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033

客户端负载均衡器深度解析 Spring Cloud LoadBalancer与Ribbon源码剖析

摘要:本文深入对比了Spring Cloud LoadBalancer与Netflix Ribbon两大客户端负载均衡技术。从架构设计看,Ribbon采用传统阻塞式,而LoadBalancer基于响应式编程;性能测试显示LoadBalancer在QPS(3200 vs 2850)、延迟(38ms vs 45ms)和内存占用(32MB vs 45MB)方面均有优势。文章详细解析了核心算法实现,包括Ribbon的轮询/加权响应时间算法和LoadBalancer的响应式轮询机制,并提供了生产环境配置建议。技术选型

七夜zippoe的博客 4759

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring Cloud Ribbon源码解析

负载均衡就是用来帮助我们将众多的客户端请求合理的分配到各个服务器,以达到服务端资源的充分利用和更少的请求时间,它是日活亿级用户的网站架构中最重要的手段。而Ribbon实现正向代理的软负载均衡,Spring cloud Feign默认集成Ribbon,所以注解@FeignClient的类,默认实现了ribbon的功能,在之前的spring cloud-feign源码中已经提过LoadBalancer...

布道 5456

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring Cloud Feign【源码篇】Feign 如何调用Ribbon进行客户端负载均衡

参考资料:Spring Cloud 官网 相关版本:Spring Boot 2.1.5.RELEASE 、Spring Cloud Greenwich.SR 回顾 在 Spring Cloud Feign【源码篇】Feign 如何进行服务间请求调用 中,提到了 Feign 如何进行服务调用的。 Feign 在封装了相关的请求参数 RequestTemplate 后,发起服务远程请求调用。 ...

保持敏感!保持学习! 5927

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

微服务(Spring Cloud)——负载均衡

一、概述 负载均衡 组件库: Spring Cloud Netflix 组件库 组件: Ribbon 二、负载均衡介绍 (一)、什么是负载均衡 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。—— 百度百科 (二)、微服务中客户端负载均

qq_42282792的博客 7421

Ribbon 源码分析【Ribbon 负载均衡】

在 Spring Cloud 2020 版本以后,移除了对 Netflix 的依赖,也就移除了负载均衡器 Ribbon,Spring Cloud 官方推荐使用 Loadbalancer 替换 Ribbon,而在 LoadBalancer 之前 Spring Cloud 一直使用的是 Ribbon 来做负载[均衡器的,而且 Ribbon 的负载均衡策略也比 Loadbalancer 更为丰富,本篇分享一些关于 Ribbon 相关的源码。Ribbon 的自动配置。

weixin_42118323的博客 1951

Spring Cloud Ribbon源码分析

如何使用Spring Cloud Ribbon进行负载均衡调用? 前面写的Eureka Client,服务消费者调用服务消费者的时候,是通过负载均衡方式调用的。这里再回顾下当时的用法: 1.在启动类中,声明一个RestTemplate的bean,用@LoadBalanced注解修饰: @Bean @LoadBalanced public RestTemplate restTemplate()...

山楂树的博客 5999

spring cloud gateway 整合ribbon、nacos discovery实现负载均衡源码简析

spring cloud gateway 整合ribbon、nacos discovery实现负载均衡源码简析

雷X峰 3246

负载均衡(Ribbon和Spring Cloud LoadBalancer)

负载均衡本质是一种"流量调度机制",通过预设的算法将来自客户端的请求分发到多个服务实例(或服务器节点),实现资源的最优利用。高可用性:避免单一实例过载崩溃,通过分散请求实现"故障转移"——当某个实例不可用时,自动将请求路由到健康实例。资源利用率最大化:均衡各实例的负载压力,避免部分节点空闲、部分节点繁忙的资源浪费。扩展性支持:当系统流量增长时,可通过增加服务实例扩展容量,负载均衡机制能自动识别新实例并分配流量。在微服务架构中,负载均衡通常分为客户端负载均衡和服务端负载均衡。

qq_60309351的博客 1387

Spring Cloud Feign和Ribbon源码系列汇总篇

Spring cloud 中服务之间通过restful方式调用。一种是RestTemplate+Ribbon,另一种是Spring cloud Feign默认集成Ribbon。

布道 4万+

Spring Cloud 负载均衡 Ribbon 原理深度解析

本文深入解析了Spring Cloud中Ribbon负载均衡的工作原理。主要内容包括: 负载均衡核心机制:通过注册中心获取服务实例列表,采用不同策略(轮询、随机、加权等)分发请求。 轮询策略的局限性:揭示了简单轮询可能导致负载不均的问题,特别是当实例性能差异较大时,提出了使用加权响应时间策略的解决方案。 架构解析:详细拆解了负载均衡的完整流程,从拦截层到策略层再到实例选择的全过程。 @LoadBalanced注解原理:解释了该注解如何使RestTemplate支持服务名调用,以及底层通过拦截器和URI转换实

qq_26394753的博客 978
上一篇: 京东后端Java高级架构师面经-面试题Spring丶多线程丶NIO丶MySQL
下一篇: 腾讯老将被拒,蚂蚁金服嘲讽,JVM问了4道题,一道都答不上来,外包都没资格,Java界面试太刺激了!!!
码农啊飞
博客等级 码龄9年 65粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值