SpringCloud 2023 LoadBalancer介绍、使用、获取服务列表原理、负载均衡算法

news/2024/12/22 0:36:50/

目录

1. 介绍

功能:

  1. 提供客户端的负载均衡算法,将请求均摊到多个服务器上。
  2. 属于客户端负载均衡(Nginx属于服务端负载均衡),会将服务列表缓存到JVM本地,然后客户端自己选择请求服务器
  3. 支持Spring Web Flux的WebClient

2. 使用

基本使用可以参考Nacos之SpringCloud集成Nacos注册中心

3 获取服务列表原理

底层是通过DiscoveryClient动态获取所有上线的服务列表。伪代码如下:


@RestController
public class OrderController {@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/nacos/getNacosAllServiceInfo")public String getNacosAllServiceInfo() {List<String> serviceNames = discoveryClient.getServices();Map<String, Object> serviceMap = new HashMap<>();for (String serviceName : serviceNames) {List<ServiceInstance> serviceInstances = discoveryClient.getInstances(serviceName);List<Map<String,String>> serviceInstanceInfos = new ArrayList<>();for(ServiceInstance serviceInstance: serviceInstances) {Map<String, String> serviceInstanceMap = new HashMap<>();serviceInstanceMap.put("serviceId", serviceInstance.getServiceId());serviceInstanceMap.put("instanceId", serviceInstance.getInstanceId());serviceInstanceMap.put("host", serviceInstance.getHost());serviceInstanceMap.put("port", String.valueOf(serviceInstance.getPort()));serviceInstanceMap.put("uri", serviceInstance.getUri().toString());serviceInstanceInfos.add(serviceInstanceMap);}serviceMap.put(serviceName, serviceInstanceInfos);}return serviceMap.toString();}}

访问http://localhost:8002/nacos/getNacosAllServiceInfo,返回的数据如下:

{orderment=[{instanceId=192.168.163.1#8002#DEFAULT#DEFAULT_GROUP@@orderment, port=8002, host=192.168.163.1, serviceId=orderment, uri=http://192.168.163.1:8002}], payment=[{instanceId=192.168.163.1#8001#DEFAULT#DEFAULT_GROUP@@payment, port=8001, host=192.168.163.1, serviceId=payment, uri=http://192.168.163.1:8001}]}

4. 负载均衡算法

  • 默认的轮询算法RoundRobinLoadBalancer: rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标,每次服务重启动后rest接口计数从1开始
  • 同时提供了随机算法RandomLoadBalancer的实现。切换代码如下。说明:
//@LoadBalancerClient(value = "payment1", configuration = LoadBalancerConfig.class)
@LoadBalancerClients({@LoadBalancerClient(value = "payment1", configuration = LoadBalancerConfig.class),@LoadBalancerClient(value = "payment2", configuration = LoadBalancerConfig.class),
})
public class LoadBalancerConfig {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);}
}

http://www.ppmy.cn/news/1533087.html

相关文章

Python知识点:如何使用Spark与PySpark进行分布式数据处理

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; Apache Spark 是一个强大的分布式数据处理系统&#xff0c;而 PySpark 是 Spark …

VMware搭建DVWA靶场

目录 1.安装phpstudy 2.搭建DVWA 本次搭建基于VMware16的win7系统 1.安装phpstudy 下载windows版本&#xff1a;小皮面板-好用、安全、稳定的Linux服务器面板&#xff01; 安装后先开启mysql再开启apache&#xff0c;遇到mysql启动不了的情况&#xff0c;最后重装了phpstud…

第十四章:html和css做一个心在跳动,为你而动的表白动画

💖 让心跳加速,传递爱意 💖 在这个特别的时刻,让爱在跳动中绽放!🌟 无论是初次相遇的心动,还是陪伴多年的默契,我们的心总在为彼此跳动。就像这颗炙热的爱心,随着每一次的跳动,传递着满满的温暖与期待。 在这个浪漫的季节,让我们一同感受爱的律动!无论你是在…

秋招内推--招联金融2025

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

Midjourney中文版:解锁AI艺术创作的无限潜能

在数字化时代&#xff0c;艺术创作与科技的融合正以前所未有的速度推进&#xff0c;而Midjourney中文版正是这一趋势下的璀璨明星。作为一款专为中文用户设计的AI绘图工具&#xff0c;它不仅集成了最先进的深度学习技术&#xff0c;还通过本地化优化&#xff0c;为国内设计师和…

实战笔记:Vue2项目Webpack 3升级到Webpack 4的实操指南

在Web开发领域&#xff0c;保持技术的更新是非常重要的。随着前端构建工具的快速发展&#xff0c;Webpack已经更新到5.x版本&#xff0c;如果你正在使用Vue2项目&#xff0c;并且还在使用Webpack 3&#xff0c;那么是时候考虑升级一下Webpack了。我最近将我的Vue2项目从Webpack…

用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画

总得拆开炼丹炉看看是什么样的。这篇文章将带你从代码层面一步步实现 AI 文本生成图像&#xff08;Text-to-Image&#xff09;中的 LoRA 微调过程&#xff0c;你将&#xff1a; 了解 Trigger Words&#xff08;触发词&#xff09;到底是什么&#xff0c;以及它们如何影响生成结…

2024/9/27 The Limitations of Deep Learning in Adversarial Settings读后感

I. INTRODUCTION &#xff08;第二页第一段&#xff09; 用费曼学习法来解释这段话&#xff0c;我们可以将其分解为几个简单的问题&#xff0c;并用易理解的语言来描述各部分的含义。费曼学习法的核心是以通俗易懂的方式来解释复杂的概念&#xff0c;并确保自己能真正理解它。…