Java Chassis 3技术解密:注册中心分区隔离

原文链接:Java Chassis 3技术解密:注册中心分区隔离-云社区-华为云

注册中心负责实例的注册和发现,对微服务可靠运行起到举足轻重的作用。实例变更感知周期是注册中心最重要的技术指标之一。感知周期代表提供者的实例注册或者下线后,消费者感知实例注册或者下线的周期。影响实例变更感知周期的技术因素有很多。

  • 数据一致性。一致性指实例在注册中心的一个节点注册,从注册中心的不同节点能否同时读取到实例的注册信息。这个技术因素对于实例变更感知周期有一定影响,比如最终一致性的感知速度会慢,强一致性的感知速度会快。但多数场景,这个技术指标不是核心因素。
  • 变更通知机制。变更通知机制指消费者获取最新实例列表的方式,通常有几种方式:定期Pull的方式,消费者周期性的从注册中心查询实例列表;注册中心Push的方式,注册中心通过长连接、WebSocket等协议,将实例变化通知消费者。定期Pull的方式感知周期相对较长,工作机制比较可靠,容错效率高,对于网络要求低,更加安全;注册中心Push的方式感知周期很短,容易出现事件错乱或者堆积,对于网络规划有一定要求。
  • 注册中心检测实例状态的方式。注册中心检测实例状态的方式表示如何判断实例的状态是正常还是异常。比如Service Center需要实例定期的发送心跳,如果在3个心跳周期未检测到心跳,那么认为实例异常;比如Nacos则根据微服务实例与注册中心的长连接状态判断实例是否异常。

此外,实例管理规模、支持元数据管理等也是注册注册中心比较常见的功能特性。比如Java Chassis 2要求注册中心必须支持契约的注册和管理。

Java Chassis 3的设计目标之一,就是降低对于注册中心功能的依赖,能够支持尽可能多的注册中心,而不降低微服务自身的可靠性。 在描述 Java Chassis 3的实例管理机制之前,先讨论一个典型的问题:注册中心分区隔离。

注册中心分区隔离是指如下场景:

微服务提供者与注册中心之间的网络发生故障,而服务消费者与注册中心之间的网络是正常的,即产生分区隔离。在发生分区隔离的场景下,现有的保活机制都会认为微服务提供者下线,进而导致微服务消费者访问微服务提供者出现大规模失败。分区隔离通常会发生在注册中心在多AZ部署/容灾的场景,微服务提供者和微服务消费者连接的是不同AZ的注册中心实例。在微服务提供者和消费者跨AZ部署的时候,也可能发生。

注册中心分区隔离故障会造成大面积的应用调用失败,是注册中心有关故障中,最严重的故障之一。

  • Ribbon的解决方案

Ribbon在客户端提供了 IPing 接口来检测实例故障,以检测注册中心错误下线实例,而实例实际可以工作的场景。 该机制在多数场景工作良好,然而在容器场景下,可能长期保留错误的实例。因为微服务提供者不是由于分区隔离错误,而是重启的场景下,如果原来的端口被其他服务占用,则会导致微服务消费者始终保留错误的实例。

public interface IPing {
    boolean isAlive(Server server);
}
  • Spring Cloud的解决方案

Spring Cloud的机制和Ribbon类似,提供了 HealthCheckServiceInstanceListSupplier ,并允许开发者定义实例监控状态检测方式。

  • Java Chassis的解决方案

Java Chassis结合实例是否在注册中心查询到(History)、实例状态(Status)、Ping状态(Ping)、隔离状态(Isolation)将实例分组,并给不同的组分配不同的优先级。

在 Java Chassis 3技术解密:负载均衡选择器 中,解密了Java Chassis分组实例使用的机制。当出现注册中心分区隔离的情况,实例在注册中心查询不到,仍然被保留到了 History 分组,只要实例 Ping 状态正常, 这个实例仍然会被使用, 从而防止了实例被错误下线。

Java Chassis还设计了新的Ping机制,解决容器场景下,可能长期保留错误的实例的问题。 Ping机制的核心逻辑包含如下几个部分:

  • 微服务提供者向注册中心注册的时候,生成实例ID。实例ID需要保证进程的每次重启,都是唯一的。
  • 微服务消费者通过PING消息检测微服务提供者的存活状态。PING消息包含微服务提供者的实例ID。
  • 微服务提供者检测PING消息里面的实例ID,如果实例ID与自己的实例ID相同,则返回健康,否则返回异常。

Java Chassis提供了新的健康检查接口:

@RestSchema(schemaId = ManagementEndpoint.NAME, schemaInterface = ManagementEndpoint.class)
public class ManagementEndpointImpl implements ManagementEndpoint {
  private RegistrationManager registrationManager;

  @Autowired
  public void setRegistrationManager(RegistrationManager registrationManager) {
    this.registrationManager = registrationManager;
  }
  
  @Override
  public boolean health(String instanceId, String registryName) {
    String mySelf = registrationManager.getInstanceId(registryName);
    if (StringUtils.isEmpty(mySelf)) {
      return false;
    }
    return mySelf.equals(instanceId);
  }
}

Java Chassis 2结合Service Center的功能设计,共同保障了注册发现的可靠性。Java Chassis 3通过应用客户端技术,降低了对于注册中心的依赖,使得 Java Chassis 3使用不同的注册中心都能够取得很高的可靠性。 内置的实例状态分组管理和创新的Ping机制设计,使得 Java Chassis 3在注册中心分区隔离故障条件下也能稳定的工作。

客户故事:注册中心推空故障是 Nacos 的经典故障,对于系统可靠性运行产生了非常大的影响。推空故障的影响机制和分区隔离故障的影响机制类似。借助于Java Chassis 3,能够将业务影响的时间和范围降到最低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/325326.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MVP的思维方式

MVP释义:做最小可行产品,做最有价值的人 首席产品官MVP社区 2023-09-04 08:53 北京 MVP,即“Minimum Viable Product”,中文翻译为“最小可行产品”,指的是在产品开发过程中,将资源集中在最核心的功能上&a…

Redis教程——Redis bitmap位图操作(图解)

在平时开发过程中,经常会有一些 bool 类型数据需要存取。比如记录用户一年内签到的次数,签了是 1,没签是 0。如果使用 key-value 来存储,那么每个用户都要记录 365 次,当用户成百上亿时,需要的存储空间将非…

帆软后台(外观配置-主题)文件上传漏洞

漏洞利用 帆软上传主题获取shell(管理系统-外观配置) 添加主题上传的压缩包中放入shell.jsp马 (没有添加主题功能直接构造数据包) POST /WebReport/ReportServer?opfr_attach&cmdah_upload&filenametest.zip&widt…

uniapp中,子组件给父页面传值(父组件)

前言 最近在做的一个小程序项目中,有一个身份切换的功能,点击切换按钮时,子组件向父组件传递身份信息,父页面依据这个身份信息对页面进行显示与隐藏。 具体实现 子组件中定义一个点击事件,在这里是identitySwitching()方法 &l…

Vue项目中如何解决跨域详解

文章目录 一、跨域是什么二、如何解决CORSProxy方案一方案二方案三 一、跨域是什么 跨域本质是浏览器基于同源策略的一种安全手段 同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能 所谓同源&#x…

如何学习three.js

如何学习three.js 前言1. 基础概念场景(Scene): three.js中所有物体的容器。你可以把它想象成一个舞台,在这里添加物体、光源等。相机(Camera): 决定了哪部分场景会被渲染。最常用的是透视相机&…

SecureCRT6中文版安装资源,一键安装

SecureCRT 6 是一款由 VanDyke Software 开发的终端仿真程序,它为用户提供了一个安全的远程访问工具,可以通过 SSH、Telnet、Rlogin 和串口等协议连接到远程服务器或设备。 它适用于各种操作系统,如 Windows、Mac 和 Linux。它提供了强大的功…

SELinux、SELinux运行模式、破解Linux系统密码、firewalld防火墙介绍、构建基本FTP服务、systemd管理服务、设置运行模式

1 路漫漫其修远兮,吾将上下而求索 2 DNS服务器 作用:负责域名解析的服务器,将域名解析为IP地址 /etc/resolv.conf:指定DNS服务器地址配置文件 3 常用的网络工具 ip命令(Linux最基础的命令) 1.查看IP地址 [rootserv…

C#,入门教程(19)——循环语句(for,while,foreach)的基础知识

上一篇: C#,入门教程(18)——分支语句(switch-case)的基础知识https://blog.csdn.net/beijinghorn/article/details/124039953 一、for循环 当老师进入教室,从门口开始分别按行、列点名,看看哪位翘课&…

【脑筋急转弯系列】乒乓球称重问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

EndNote登录一直显示The username/password specified is not valid

EndNote登录一直显示The username/password specified is not valid EndNote20今天想打开之前的share library的时候一直显示 ‘The Username/password specified is not valid’,查了很多解决方案,现在献上解决方案: 该密码然后重新登陆…

js 回文串

思路: 判断一个字符串是否为回文字符串的基本思路是比较字符串的正序和倒序是否相同。 两者相同,则该字符串是回文字符串,否则不是。 要实现这一思路,我们可以使用 JavaScript 字符串的一些方法。我是忽略了所有的空格和符号&…

超融合之道:亚信安慧AntDB 8.0版本引领数据库创新

在当今多变的数据应用场景中,AntDB作为行业领先的超融合流式实时数仓,秉承着“融合实时”的研发理念,全面应对企业日益复杂的数据处理需求。通过SQL接口访问多种执行引擎,AntDB在实现交易、分析等多重能力的“超融合”方面取得了显…

【MySQL高级】——性能分析

数据库调优中,目标是 响应时间更快,吞吐量更大,利用宏观的监控工具和微观的日志分析帮助我们快速找到调优的思路和方式。 1. 数据库服务器优化步骤 整个流程划分成了 观察(Show status) 和 行动(Action&am…

记一次 .NET某收银软件 非托管泄露分析

一:背景 1. 讲故事 在我的分析之旅中,遇到过很多程序的故障和杀毒软件扯上了关系,有杀毒软件导致的程序卡死,有杀毒软件导致的程序崩溃,这一篇又出现了一个杀毒软件导致的程序非托管内存泄露,真的是分析多…

远程如何才能完整快速的传输大文件?

随着互联网技术的迅速进步,远程文件传输已经成为企业间合作与交流中不可或缺的一环。然而,在需要传输大文件的情况下,传统的文件传输方式往往会面临传输速度慢、文件易损等问题。因此,如何实现远程大文件的快速、安全、完整传输&a…

iOS UI掉帧和卡顿优化解决方案记录

UI卡顿原理 在 VSync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行…

教你用通义千问只要五步让千年的兵马俑跳上现代的科目三?

教你用五步让千年的兵马俑跳上现代的舞蹈科目三? 上面这个“科目三”的视频,只用了一张我上月去西安拍的兵马俑照片生成的。 使用通义千问,只要5步就能它舞动起来,跳上现在流行的“科目三”舞蹈。 全民舞王 第1步 打开通义千问…

设计师们必备的神秘利器!这款设计工具不容忽视!

「即时设计」与Figma类似,它是一种云设计工具,可以与多人实时合作,从设计到评估、交付、团队合作和版本管理。 作为一种国内工具,起初我们对它不是很乐观,但不得不说,经过深入使用,无论是迭代速…

【量化交易实战记】小明的破晓时刻——2023下半年新能源汽车板块的成功掘金之旅

在2023年的炎炎夏日,小明在不断的观察分析市场的过程中,突然敏锐地察觉到了新能源汽车市场的风云变幻。他日复一日地研读行业报告、追踪政策动向、分析公司财报,以及密切关注全球市场动态。那段时间里,新能源汽车行业仿佛迎来了一…