【Nacos架构 原理】内核设计之Nacos通信通道

embedded/2024/10/19 7:04:16/

文章目录

      • Nacos通信通道 (长链接)
        • 现状背景
        • 场景分析
          • 配置
          • 服务
        • 长链接核心诉求
          • 功能性诉求
          • 负载均衡
          • 连接生命周期

Nacos通信通道 (长链接)

现状背景

Nacos 1.X 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的。

产品推送模型数据一致性痛点说明
Nacos Config异步 Servlet基于MD5比对一致性http短连接,30秒定期创建销毁连接,GC压力大md5值计算也有一定开销,在可接受范围内
Nacos NamingHTTP/UDPUDP 推送 + 补偿查询丢包,云架构下无法反向推送

配置和服务器模块的数据推送通道不统一,http 短连接性能压力巨大,未来 Nacos 需要构建能够同时支持配置以及服务的长链接通道,以标准的通信模型重构推送通道。

场景分析
配置

配置对连接的场景诉求分析
在这里插入图片描述

  • SDK和Server之间
    • 客户端SDK需要感知服务节点列表,并按照某种策略选择其中一个节点进行连接;底层连接断开时,需要进行切换Server进行重连。
    • 客户端基于当前可用的长链接进行配置的查询,发布,删除监听,取消监听等配置领域的RPC语意接口通信。
    • 感知配置变更消息,需要将配置变更消息通知推送当前监听的客户端;网络不稳定时,客户端接收失败,需要支持重推,并告警。
    • 感知客户端连接断开事件,将连接注销,并且清空连接对应的上下文,比如监听信息上下文清理
服务
  • SDK 和 Server 之间
    • 客户端 SDK 需要感知服务节点列表,并按照某种策略选择其中一个节点进行连接;底层连接断开时,需要切换 Server 进行重连。
    • 客户端基于当前可用的长链接进行配置的查询,注册,注销,订阅,取消订阅等服务发现领域的RPC 语意接口通信。
    • 感知服务变更,有服务数据发生变更,服务端需要推送新数据到客户端;需要有推送 ack(SDK返回给服务端),方便服务端进行 metrics 和重推判定等。
    • 感知客户端连接断开事件,将连接注销,并且清空连接对应的上下文,比如该客户端连接注册的服务和订阅的服务。
  • Server 之间通信
    • 服务端之间需要通过长连接感知对端存活状态,需要通过长连接汇报服务状态(同步 RPC 能力)
    • 服务端之间进行 AP Distro 数据同步,需要异步 RPC 带 ack 能力。
长链接核心诉求

在这里插入图片描述

功能性诉求

客户端

  • 连接生命周期实时感知能力,包括连接建立,连接断开事件
  • 客户端调用服务端支持同步阻塞,异步future,异步 callback 三种模式
  • 底层连接自动切换能力
  • 响应服务端连接重置消息进行连接切换
  • 选址/服务发现
    服务端
  • 连接生命周期实时感知能力,包括连接建立,连接断开事件
  • 服务端往客户端主动进行数据推送,需要客户端进行 Ack 返回以支持可靠推送,并且需要进行失败重试
  • 服务端主动推送负载调节能力
负载均衡
  • 常见的负载均衡策略:随机,hash,轮询,权重,最小连接数,最快响应速度等
  • 短连接和长链接负载均衡的异同;
    • 短连接中,因为连接快速建立销毁,“随机,hash,轮询,权重”四种方式大致能够保持整体是均衡的,服务端重启也不会影响整体均衡,其中“最小连接数,最快响应速度”是有状态的算法,因为数据延时容易造成堆积效应.
    • 长连接因为建立连接后,如果没有异常情况出现,连接会一直保持断连后需要重新选择一个新的服务节点,当出现服务节点发布重启后,最终连接会出现不均衡的情况出现,“随机,轮询,权重”的策略在客户端重连切换时可以使用,“最小连接数,最快响应速度”和短连接一样也会出现数据延时造成堆积效应。长连接和短连接的一个主要差别在于在整体连接稳定时服务端需要一个rebalance的机制,将集群视角的连接数重新洗牌分配,趋向另外一种稳态
  • 客户端随机+服务端柔性调整:
    • 核心的策略是客户端+服务端双向调节策略,客户端随机选择+服务端运行时柔性调整。

    • 在这里插入图片描述

    • 客户端随机

      • 客户端在启动时获取服务列表,按照随机规则进行节点选择,逻辑比较简单,整体能保持随机。
    • 服务器柔性调整

      • (当前实现版本)人工管控方案:集群视角的系统负载控制台,提供连接数,负载等视图(扩展新增连接数,负载,CPU 等信息,集群间 report 同步),实现人工调节每个 Server 节点的连接数,人工触发reblance,人工削峰填谷

        • 提供集群视角的负载控制台:展示 总节点数量,总长链接数量,平均数量,系统负载信息
        • 每个节点的地址,长链接数量,与平均数量的差值,正负值
        • 对高于平均值的节点进行数量调控,设置数量上限(临时和持久化),并可指定服务节点进行切换
      • (未来终态版本)自动化管控方案:基于每个 server 间连接数及负载自动计算节点合理连接数,自动触发reblance,自动削峰填谷。实现周期较长,比较依赖算法准确性。

连接生命周期

心跳保活机制:

类型TCPnettyminagrpcrsockettb remote
心跳保活机制keepalive机制:通道无读写事件时,发送心跳包检测,可设置超时时间,间隔次数1.设置TCP参数

2.自定义心跳IdeHandler,监听通道读写事件
1.自定义心跳,KeepAliveFilter1.自定义心跳,ping-pong包探测1.自定义keep alive机制基于mina,KeepAliveFilter
事件通知正常关闭有事件通知有事件通知有事件通知有事件通知有事件通知有事件通知
断网异常keep alive机制,有事件通知tpc及自定义心跳,有事件通知自定义心跳,有事件通知自定义心跳,ping-pong包探测,无事件通知1.自定义心跳,有事件通知自定义心跳,有事件通知z自定义心跳,有事件通知。

http://www.ppmy.cn/embedded/121018.html

相关文章

Harmony 获取定位位置的方式

1、首先获取设备的位置信息,需要有位置权限 2、导入geoLocationManager模块,所有与基础定位能力相关的功能API,都是通过该模块提供的。 1 单次定位 单次获取当前设备位置,多用于查看当前位置、签到打卡、服务推荐等场景。 方式1: 获取系统缓存的最新位置,没有缓存位置会…

【azure-openai】批量翻译demo【python】【gradio】

要求:拥有azure-openai-api,上传文件为csv格式,utf-8编码。 注意:如果出现乱码,重新运行,换种方式打开,有时候wps会自动改编码。 实现功能:选择语言,使用gpt4omini&…

ADRC与INDI的关系

ADRC与INDI的关系 前言 一直热衷于把一些基础的东西想明白,这样才能更好地理解一些稍微复杂些的算法,在深入理解这些算法后才能更好地应用。 例如 用回路成型方法探究ADRC各参数对闭环系统的影响对比KF和RLS的关系互补滤波的原理以及参数整定&#xf…

【评测大语言模型(LLM)的效果】

评测大语言模型(LLM)的效果主要通过以下几种方法,定量和定性的不同角度: 1. 自动化评测指标: 这是通过算法或统计方法量化模型性能的常用方式,通常基于特定任务或标准答案。常见的评测指标包括&#xff1…

element-ui 通过按钮式触发日期选择器

element ui 写在前面1. 自定义的日期时间组件CustomDatePicker.vue2. 页面效果总结写在最后 写在前面 需求:elementui中日期时间选择器,目前只能通过点击input输入框触发日期选择器,我希望能通过其他方式触发日期选择器同时把input输入框去掉…

coco(json)、yolo(txt)、voc(xml)标注格式的相互转换

一般都是用labeleme进行标注 标注格式都是json 然后根据不同的格式进行数据标注转换: 1.逐个json转xml: 当我们在使用数据集训练计算机视觉模型时,常常会遇到有的数据集只给了单个的json annotation文件,而模型所需要的annotation是基于每…

5G NR物理信道简介

文章目录 NR 上行物理信道PRACHPUCCHPUSCH NR 下行物理信道PBCHPDCCHPDSCH NR 上行物理信道 PRACH PRACH(Physical Random Access Channel)物理随机接入信道,用于传导preamble 序列。PRACH 由循环前缀CP、前导序列和保护间隔三部分组成。 PUCCH PUCCH…

Docker 安装 ClickHouse 教程

Docker 安装 ClickHouse 教程 创建目录 首先,创建必要的目录用于存放 ClickHouse 的配置、数据和日志文件。 mkdir -p /home/clickhouse/conf mkdir -p /home/clickhouse/data mkdir -p /home/clickhouse/log chmod -R 777 /home/clickhouse/conf chmod -R 777 /…