[Spring Cloud] Eureka 负载均衡(LoadBalance)

复制多个服务

① 点击 idea 的服务 进入以下界面 , 进行配置服务

② 复制配置信息

启动服务之后可以看到有两个实例

多次调用 http://127.0.0.1:9096/order/1 发现还是访问同一台机器 , 并没有分担符合

解决方法

修改 OrderController
private List<ServiceInstance> instances;

@PostConstruct //????
public void init(){
    //从Eureka 中获取服务
    instances = client.getInstances("product-service");//如果将初始化写在方法中 , 则不能保重每次调用的值相同
}
//    改版
    @RequestMapping("/{orderId}")
    public OrderInfo selectOrderById (@PathVariable("orderId") Integer orderId){//从请求url中获取参数
        OrderInfo info =  orderService.selectOrderById(orderId);
    //        String url = "http://127.0.0.1:9095/product/"+info.getProductId();
        //从Eureka中获取服务列表 并添加应用名
        //计算轮流实例
        int index = count.getAndIncrement()%instances.size();
        //拼接url
        String uri = instances.get(index).getUri().toString();
        String url = uri+"/product/"+info.getProductId();
        log.info("远程调用的url:"+url);
        ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
        info.setProductInfo(productInfo);
        return info;
    }

多次调用 :

http://127.0.0.1:9096/order/1

观察日志 , 发现请求被均匀分配在了不同的实例上

负载均衡

负载均衡(Load Balance,简称 LB),是高并发,高可用系统必不可少的关键组件,当服务流量增大时,通常会采用增加机器的方式进行扩容,负载均衡就是用来在多个机器或者其他资源中,按照一定的规则合理分配负载

负载均衡的实现

服务端的负载均衡

Nginx 负载均衡器 , 请求先到达 Nginx , 然后通过负载均衡算法 , 在多个服务器之间选择一个进行访问

客户端负载均衡器

  1. 核心机制:将负载均衡功能以“库”的形式集成到客户端,而非依赖集中的硬件设备
  2. 工作流程:客户端(如 Ribbon)从注册中心(如 Eureka)获取服务列表,在发送请求前通过算法自主选择目标服务器
  3. 技术演进:早期的默认实现 Ribbon 已停止维护,最新版本的 Spring Cloud 已替换为官方维护的 Spring Cloud LoadBalance

Spring cloud LoadBalancer(客户端负债均衡器)

1.添加注解

在 config 中添加注解@LoadBalanced

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

2.修改远程调用代码 , 把 ip 和端口号改成应用名

删除获取 url 的 代码 , 改为最原始的形式 , 并将 ip 和端口号改为应用名

//    改版Spring cloud LoadBalancer
@RequestMapping("/{orderId}")
public OrderInfo selectOrderById (@PathVariable("orderId") Integer orderId){//从请求url中获取参数
    OrderInfo info =  orderService.selectOrderById(orderId);
    String url = "http://product-service/product/"+info.getProductId();
    log.info("远程调用的url:"+url);
    ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
    info.setProductInfo(productInfo);
    return info;
}}

负债均衡策略

  1. 轮询(Round Robin):轮询策略是指服务器轮流处理用户的请求。这是一种实现最简单,也最常用的策略。生活中也有类似的场景,比如学校轮流值日,或者轮流打扫卫生
  2. 随机选择(Random):随机选择策略是指随机选择一个后端服务器来处理新的请求

自定义负债均衡策略

参考官网

Spring Cloud LoadBalancer :: Spring Cloud Commons

复制官网代码
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;

public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                              LoadBalancerClientFactory loadBalancerClientFactory) {
       String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
       return new RandomLoadBalancer(loadBalancerClientFactory
             .getLazyProvider(name, ServiceInstanceListSupplier.class),
             name);
    }
}

配置@LoadBalancerClient

name : 对哪个服务运用负载均衡

configuration : 使用哪个负载均衡策略实现

@LoadBalancerClient(name = "product-service",configuration = CustomLoadBalancerConfiguration.class)
@Configuration
public class BeanConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值