首页 > 编程语言 >Java Chassis 3:接口维度负载均衡

Java Chassis 3:接口维度负载均衡

时间:2024-05-13 14:20:50浏览次数:26  
标签:负载 Java OP1 接口 Chassis 均衡 维度

本文分享自华为云社区《Java Chassis 3技术解密:接口维度负载均衡》,作者: liubao68。

Java Chassis 3技术解密:负载均衡选择器中解密了Java Chassis 3负载均衡在解决性能方面提供的算法。这次解密的技术来源于实际客户案例:

在客户的微服务系统中,存在很多种不同逻辑的接口,以及特殊的访问模式,经常会出现部分实例线程池排队严重,而其他实例负载不高的负载不均衡现象。比如:微服务A访问微服务B,微服务B存在B1、B2两个实例,OP1、OP2两个接口,其中OP1处理比较耗时,占用较多CPU时间,OP2处理较快。微服务A的业务逻辑会以OP1、OP2、OP1、OP2…这样的访问模式调用微服务B。客户系统会经常出现OP1全部访问B1、OP2全部访问B2的现象。

产生这个问题的原因是Round Robin算法根据请求顺序来分配实例,而未差异化考虑不同请求的均衡要求。解决这个问题最简单直接的思路是使用Random算法,但是在进行负载均衡算法选择的时候,可预期性对于问题定位、问题分析、问题规避等都有非常大的便利,因此Round Robin算法仍然是缺省的最优选择。

Java Chassis 3的解决方案是提供接口维度的负载均衡。

cke_132.png

默认场景,Java Chassis为每个契约(Schema)创建一个负载均衡,如果OP1和OP2分别属于UserService和LoginService,那么在上述示例的场景中,开发者不需要做任何配置,流量会自动实现均衡。

如果OP1和OP2都属于LoginService,并且需要保证OP1的流量均衡,可以通过配置:

servicecomb.loadbalance.${微服务B}.${契约名称}.${接口名称}.strategy.name=RoundRobin

比如:

servicecomb.loadbalance.B.LoginService.login.strategy.name=RoundRobin

给耗时请求OP1(login)设置不同的负载均衡。

进一步讨论

从上述负载均衡的原理可以看出,假设微服务X会访问M个微服务,每个微服务平均有N个契约,那么X会创建M * N的负载均衡。对于大多数系统,这个数量级都在1K以内。一般的,只需要对于耗时的接口分配独立的负载均衡,以保证耗时请求的流量均衡。除了解决流量均衡问题,Java Chassis的配置方法,还可以针对其他特殊场景提供非常简洁的配置方案,比如可以通过配置:

servicecomb.loadbalance.${微服务B}.${契约名称}.${接口名称}.strategy.name=SessionStickiness

为具体的接口指定会话粘滞策略。

总结

Java Chassis 3通过接口维度负载均衡的策略设置,为不同的应用场景提供了非常强大的负载均衡管理能力,帮助解决负载不均衡、会话粘滞等应用负载问题。

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:负载,Java,OP1,接口,Chassis,均衡,维度
From: https://www.cnblogs.com/huaweiyun/p/18189116

相关文章

  • [LeetCode] 1584.连接所有点的最小费用 Kruskal And Prim 算法 Java 并查集
    Problem:1584.连接所有点的最小费用目录Kruskal算法复杂度CodePrim算法复杂度CodeKruskal算法复杂度时间复杂度:添加时间复杂度,示例:$O(mlog(m))$空间复杂度:添加空间复杂度,示例:$O(n)$CodeclassSolution{publicintminCostConnectPoints(int[][]po......
  • 基于Java的redis客户端的基本使用
    1.简介Java中redis客户端有jedis、lettuce、Redission等2.jedis的基本使用引入依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.2.3</version></dependency>从jedis连接池获取je......
  • JavaSE之java基础语法
    关键字和保留字关键字定义和特点定义:被java语言赋予了特殊含义,用作专门用途的字符串。特点:关键字中所有字母都为小写。关键字不能用作变量名,方法名,类名,包名和参数。用于定义数字类型的关键字classinterfaceenumbyteshortintlongfloatdoublecharbooleanvoi......
  • 软工计算1—Java篇1 20240513
    Java中的函数重载函数重载(FunctionOverloading)是面向对象编程中的一个概念,它允许在同一个类中定义多个同名函数,但这些函数的参数列表必须不同。参数列表的不同可以体现在参数的类型、数量或顺序上。函数重载使得程序设计更加灵活,可以针对不同的参数类型或数量提供不同的函数实现......
  • Java 高效获取两个List中不同的元素集合
    /***借助Map来获取listA、listB的不同元素集合**@paramlistA集合A*@paramlistB集合B*@returnlist<String>不同元素集合*/publicstaticList<String>getDifferListByMap(List<String>listA,List<String>listB){List<String>differList=new......
  • 【问题解决】java.lang.NoSuchMethodError错误
    问题现象近期本人负责的一个SpringBoot模块出现了java.lang.NoSuchMethodError报错,问题情况如下:A类提供了setJumpType(Stringtype),B类调用A类的setJumpType(Stringtype)报错java.lang.NoSuchMethodError:com.xxx.A.setJumpType(Ljava/lang/String;)V在之前的发版的程序中,B......
  • 干了 2 年多 Java 外包,终于脱离了!
    大家好,我是R哥。金三银四结束了,上个月分享了一个35K入职的面试辅导案例:35K*14薪入职了,这公司只要不裁员,我能一直呆下去。。今天再分享一个上个月让人很有成就感的面试辅导case:外包、空窗四个月、薪资10k、996——>甲方公司、薪资15k、早九晚六(WLB),从报名面试辅导后,从......
  • 使用Lambda表达式和接口的简单Java 8 Predicate示例
    大量的Java编程涉及到对真或假值的评估,从条件语句到迭代循环。当您使用JDK的StreamsAPI和Lambda函数时,可以使用备受欢迎的JavaPredicate接口来简化布尔条件的评估。也被称为Java8Predicate(源自引入函数式编程的JDK版本),这个简单的接口定义了五个方法,尽管只有JavaPredicate的t......
  • java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBea
    简介前排提示:这个错误一般是由于Spring新版本导致的与其他框架不兼容现象,解决办法一般是升级其他框架版本。使用springboot-3.2.5和myabtis-plus-3.5.0搭建开发环境时,启动Springboot程序时报错,报错信息:点击查看代码java.lang.IllegalArgumentException:Invalidvalu......
  • 音乐格式转换:java代码实现
    1packageutil;23importws.schild.jave.*;4importjava.io.File;56/*7音乐格式转换8<dependency>9<groupId>ws.schild</groupId>10<artifactId>jave-core</artifactId>11<version>2.4.4</versi......