Java Chassis 3:接口维度负载均衡
本文分享自华为云社区《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的解决方案是提供接口维度的负载均衡。
默认场景,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通过接口维度负载均衡的策略设置,为不同的应用场景提供了非常强大的负载均衡管理能力,帮助解决负载不均衡、会话粘滞等应用负载问题。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
了解GaussDB SQL中CASE表达式
本文分享自华为云社区《GaussDB SQL基本语法示例-CASE表达式》,作者:Gauss松鼠会小助手2。 一、前言 SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。 本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。 二、CASE Expression(CASE表达式)介绍 在GaussDB SQL中,CASE表达式(CASE Expression)是一个非常强大且常用的工具,可以用于在SQL中执行基于条件的操作。CASE表达式类似于IF-THEN-ELSE语句,但使用起来更加灵活,易于阅读和编写。 CASE表达式包含两种形式,一种是简单形式,一种是搜索形式。下面将分别介绍这两种形式的写法、语法以及使用方法。 三、GaussDB数据库中的简单CASE表达式 1、基本概念 简单CASE表达式是指在给定的表达式上执行基于等式的比较,如果表达式等于某个值,则执行某个操作。即依据input_expression与when_expression的匹配结果跳转到相应的result_express...
- 下一篇
手把手带你开发一个易用又灵活的 Carousel 组件
本文由体验技术团队Kagol同学创作~ 前端组件库作为 Web 应用开发重要的基石,发挥了用户体验统一和开发效率提升的双层价值,但业务场景变化和需求变化万千,没有任何组件库可以满足所有业务场景,但我们依然可以通过精心的 API 设计,让组件在易用性和灵活性这两个看似矛盾的能力中取得平衡,覆盖尽可能丰富的业务场景,在业务开发中发挥更大的价值。 本文主要以 Carousel 走马灯组件为例,给大家分享我的组件设计经验,如何通过子组件+插槽的设计思想,让组件在易用性和灵活性之间取得平衡。 先来看下我们要实现的 VueCarousel 组件的效果图: 可以看到它的功能是很强大的,可以应用于丰富的业务场景,接下来就带大家一起来设计和实现 VueCarousel。 实现步骤 1、创建初始项目工程 先使用 vite 命令行工具创建一个初始项目工程。 npmcreatevitevue-carousel cdvue-carousel npmi npmrundev 然后安装必要的依赖。 npmi-D@vitejs/plugin-vue-jsxsass 配置下 vite.config.ts import{d...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块