Nacos负载均衡

"服务调用者如何选择服务目标实例"

核心原理

服务注册

  • 服务目标者 注册实例 到注册中心

实例订阅

  • 服务调用者通过注册中心 订阅服务目标者,将服务目标者的健康实例推送给消费者

健康检查

  • 注册中心定期对服务目标者提供健康检查(TCP端口、HTTP接口),并剔除不健康的,不可用的实例

负载均衡调用

  • 消费者发起调用时,Nacos Client内置的负载均衡,按算法选择一个实例发起Http调用

  • 默认采用负载均衡算法:轮询


Nacos健康检查机制

  • 默认启用的:默认5秒一次心跳包,服务中心超过15秒没收到心跳则说明不健康,30秒没收到就剔除

  • 服务端主动监测:服务中心向目标实例发起检测请求(TCP/HTTP),未响应就为故障

需要在服务目标者的application.yml中配置数据
XML 复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        metadata:
          nacos.health.check.url: /actuator/health  # Spring Boot Actuator 健康检查接口
          nacos.health.check.interval: 5000          # 检测间隔 5 秒
          nacos.health.check.timeout: 3000           # 超时时间 3 秒

实操

  • 依赖
java 复制代码
<!-- Nacos 服务发现依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Spring Cloud LoadBalancer  -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  • 注入LoadBalanceClient
java 复制代码
//@Autowired
//DiscoveryClient discoveryClient;
@Autowired
RestTemplate restemplate;
@Autowired
LoadBalancerClient loadBalancerClient;
  • 然后给远程调用更换成LoadBalancerClient;
java 复制代码
ServiceInstance choose = loadBalancerClient.choose("service-product");
String url = "http://"+choose.getHost()+":"+choose.getPort()+"/product/"+productId;
Product product = restTemplate.getForObject(url,Product.class);

注解式负载均衡

基于SpringCloud LoadBalancer

@LoadBalanced

只需要给RestTemplate加上这个注解(默认采用负载均衡算法:轮询)

java 复制代码
@Configuration
public class RestTemplateConfig {
    // @LoadBalanced:启用负载均衡,自动从Nacos获取实例并分发流量
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

这样就可以

java 复制代码
//直接调用服务目标者
String url = "http://service-product/product"+productId;
//service-product会被动态切换
Product product - restemplate.getForObject(url,Product.class);

如果注册中心宕机了,还能使用负载均衡吗

由于有实例缓存

如果调用过一次注册中心的实例列表,就不会再去注册中心,可以使用负载均衡

但是如果没有调用过一次注册中心的实例列表,就不能使用负载均衡了

相关推荐
未来之窗软件服务4 天前
WAF负载均衡+蜜罐混淆安全体系-东方仙盟
运维·安全·负载均衡·仙盟创梦ide·东方仙盟·阿雪技术观·网关开发
Linux-lucky4 天前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
小羊没烦恼!7 天前
关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
java·服务器·网络·学习·负载均衡
知已难寻9 天前
00 · OpenStack 总纲——从云计算到 OpenStack 全景
运维·服务器·云原生·云计算·负载均衡·openstack·perl
七夜zippoe9 天前
Agent 网关设计:统一入口、智能路由与负载均衡
运维·ai·log4j·负载均衡·agent·网关设计
Vitaliy Kostrov(柯维远)10 天前
Multi-CDN 决策闭环:QoE、成本、安全与内容正确性如何进入同一个策略引擎?
安全·网络安全·云计算·音视频·负载均衡·cdn
知已难寻10 天前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
Ivanqhz11 天前
MoE 原理、TC/EC 路由、LSH-MoE 与负载均衡浅析
运维·网络·人工智能·深度学习·算法·机器学习·负载均衡
网络小江15 天前
组网第27课:ARP 的能与不能——免费 ARP、代理 ARP 与 ARP 欺骗
服务器·网络·网络安全·负载均衡·免费arp
EDPJ17 天前
MoE 与推测解码(Speculative Decoding)加速:为什么慢、什么时候慢、怎么让它不慢?
llm·负载均衡·大语言模型·moe·推测解码(sd)