Java Chassis 3技术解密:负载均衡选择器

news/2024/7/10 0:19:40 标签: java, 负载均衡, 开发语言, 华为云
原文链接:Java Chassis 3技术解密:负载均衡选择器-云社区-华为云

Java Chassis 3技术解密:负载均衡选择器

负载均衡用于管理微服务实例之间的访问策略。它负责在每次请求中高效选择目标实例,并保持请求在多个目标实例中均衡。目标实例选择过程可以使用下面的示例图简单展示:

AZ亲和是常见的选择器之一。它根据本实例的AZ信息和目标实例的AZ信息,确定合适的目标实例子集,实例子集与本实例具有相同的AZ信息。

负载均衡选择器是一个典型的职责链模式。

  • Ribbon 的职责链
public interface ServerListFilter<T extends Server> {
  List<T> getFilteredListOfServers(List<T> servers);
}
  • Spring Cloud Commons 的职责链
public abstract class DelegatingServiceInstanceListSupplier implements ServiceInstanceListSupplier, InitializingBean, DisposableBean {
  protected final ServiceInstanceListSupplier delegate;

  public DelegatingServiceInstanceListSupplier(ServiceInstanceListSupplier delegate) {
    this.delegate = delegate;
  }

  public ServiceInstanceListSupplier getDelegate() {
    return this.delegate;
  }
}
  • Java Chassis 的职责链
public interface DiscoveryFilter extends Ordered {
  DiscoveryTreeNode discovery(DiscoveryContext context, DiscoveryTreeNode parent);
}

Java Chassis 使用了树型结构的职责链,它的工作过程如下:

  • 将实例预分组。
  • 通过树型结构索引,快速找到目标实例集合。
  • 当某个树节点为空的场景,可以返回上层选择器,重新查找。

能够快速检索到实例的场景:

出现实例为空的的场景:

相对于线性的职责链模式,树型职责链模式存在两方面明显的优势:

  • 计算复杂度从 O(N) 降低为 O(1)。 当实例规模很大,比如超过1000的时候,该算法能够极大的降低CPU使用率,减少垃圾回收的数量。
  • 能够解决上层选择器的结果在下层选择器的结果为空的问题。比如在AZ亲和场景,如果本AZ的实例不满足后续选择器的条件,那么使用非本AZ的实例,能够确保本次访问的正确性,降低错误率,也能够更好的满足请求均衡的要求。

客户故事:在某个客户的实际场景中,如果实例数超过1000,负载均衡的CPU消耗占到整个请求处理时间的20%以上,随着应用规模的变大,负载均衡处理算法的性能优化变得更加重要了。

更多华为云技术干货请关注:华为云PaaS服务小智的博客_云社区-华为云 


http://www.niftyadmin.cn/n/5334624.html

相关文章

yyds!这样管理微信客户简单又高效!

微信已经成为了现代社交与商务交流的重要平台之一&#xff0c;对于一些企业或是个人来说&#xff0c;高效地管理微信客户是非常重要的。 接下来&#xff0c;就教大家如何更好地管理微信里的客户&#xff0c;帮助大家提高沟通效率&#xff01; 1、客户分类 将微信客户按照不同…

机器视觉系统在汽车车轮毂检测上的应用

将机器视觉用于轮毂检测&#xff0c;可以利用图像分析的方法来测量轮毂特征尺寸、判断轮毂形状&#xff0c;并获取其位置坐标等信息&#xff0c;从而能够辨识流水生产线上的各种款式和型号的汽车轮毂。 市面上对汽车车轮毂具体检测要求如下 &#xff1a; 1.为了分辨流水线上…

【Ant Design of Vue】Modal.confirm无法关闭的bug

一、问题 在使用 Ant Design Vue 的 Modal.confirm 确认框时&#xff0c;出现了点击取消和确定后 Modal.confirm 确认框无法关闭的问题 二、代码 代码完全是 copy 的官网的代码&#xff0c;但是 copy 到本地后就会出现上述问题 <template><a-button click"sho…

关于MySQL日期函数你不知道的用法

MySQL提供了丰富的日期和时间函数&#xff0c;用于处理和操作日期时间数据。本篇博文将深入介绍一些常用的MySQL日期函数&#xff0c;通过详细的例子带你了解这些函数的用法和实际应用。 1. CURDATE() - 获取当前日期 CURDATE()函数返回当前日期&#xff0c;不包含时间信息。 S…

一区优化直接写:KOA-CNN-BiLSTM-Attention开普勒优化卷积、长短期记忆网络融合注意力机制的多变量回归预测程序!

适用平台&#xff1a;Matlab 2023版及以上 KOA开普勒优化算法&#xff0c;于2023年5月发表在SCI、中科院1区Top顶级期刊《Knowledge-Based Systems》上。 该算法提出时间很短&#xff0c;目前还没有套用这个算法的文献。 同样的&#xff0c;我们利用该新鲜出炉的算法对我们的…

基于 IDEA 进行 Maven 依赖管理

一、依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中&#xff0c;避免出现版本冲突和依赖缺失等…

SPEC CPU 2017 quick start

SPEC CPU 2017 quick start 我这里选择在 linux&#xff08;ubuntu22.04.3&#xff09; 上安装 SPEC CPU 2017&#xff0c;gcc、g、gfortran 均使用 sudo apt install xxx 安装&#xff08;其版本为11.4.0&#xff09; 官方的 SPEC CPU 2017 在 Unix Systems 安装示例&#x…

给程序加个进度条吧!1行Python代码,快速搞定~

你在写代码的过程中&#xff0c;有没有遇到过以下问题&#xff1f; 已经写好的程序&#xff0c;想看看程序执行的进度&#xff1f; 在写代码批量处理文件的时候&#xff0c;如何显示现在处理到第几个文件了&#xff1f; &#x1f446;如上图所示的进度条是一个最好的解决方法…