Nacos架构与原理 - 通信通道

简介: Nacos架构与原理 - 通信通道

Nacos 长链接


⼀、现状背景


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


b47c1d09adbd43969db01701650b8850.png


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


二、场景分析


1. 配置


配置对连接的场景诉求分析

6967d53e041f43b99dd2b91f89ed9d85.png


SDK 和 Server 之间


客户端 SDK 需要感知服务节点列表,并按照某种策略选择其中⼀个节点进行连接;底层连接

断开时,需要进行切换 Server 进行重连。


客户端基于当前可用的长链接进行配置的查询,发布,删除,监听,取消监听等配置领域的 R

PC 语意接口通信。


感知配置变更消息,需要将配置变更消息通知推送当前监听的客户端;网络不稳定时,客户端

接收失败,需要支持重推,并告警。


感知客户端连接断开事件,将连接注销,并且清空连接对应的上下文,比如监听信息上下文清

理。



Server 之间通信

   单个 Server 需要获取到集群的所有 Server 间的列表,并且为每⼀个 Server 创建独立的长链接;连接断开时,需要进行重连,服务端列表发生变更时,需要创建新节点的长链接,销毁下线的节点长链接。


   Server 间需要进行数据同步,包括配置变更信息同步,当前连接数信息,系统负载信息同步,负载调节信息同步等。



2. 服务


SDK 和 Server 之间


客户端 SDK 需要感知服务节点列表,并按照某种策略选择其中⼀个节点进行连接;底层连接断开时,需要切换 Server 进行重连


客户端基于当前可用的长链接进行配置的查询,注册,注销,订阅,取消订阅等服务发现领域的 RPC 语意接口通信

感知服务变更,有服务数据发生变更,服务端需要推送新数据到客户端;需要有推送 ack,方便服务端进行 metrics 和重推判定等


感知客户端连接断开事件,将连接注销,并且清空连接对应的上下文,比如该客户端连接注册的服务和订阅的服务




Server 之间通信
  • 服务端之间需要通过长连接感知对端存活状态,需要通过长连接汇报服务状态(同步 RPC 能力)
  • 服务端之间进行 AP Distro 数据同步,需要异步 RPC 带 ack 能力



三、长链接核心诉求



1. 功能性诉求

客户端

 连接生命周期实时感知能力,包括连接建立,连接断开事件。

 客户端调用服务端支持同步阻塞,异步 Future,异步 CallBack 三种模式。

 底层连接自动切换能力。

 响应服务端连接重置消息进行连接切换。

选址/服务发现。



服务端

 连接生命周期实时感知能力,包括连接建立,连接断开事件。

 服务端往客户端主动进行数据推送,需要客户端进行 Ack 返回以支持可靠推送,并且需要进行失败重试。

 服务端主动推送负载调节能力。


2. 性能要求

能够支持百万级的长链接规模及请求量和推送量,并且要保证足够稳定。


3. 负载均衡

常见的负载均衡策略:随机,hash,轮询,权重,最小连接数,最快响应速度等


短连接和长链接负载均衡的异同:在短连接中,因为连接快速建立销毁,“随机,hash,轮询,权重”四种方式大致能够保持整体是均衡的,服务端重启也不会影响整体均衡,其中“最小连接数,最快响应速度”是有状态的算法,因为数据延时容易造成堆积效应;长连接因为建立连接后,如果没有异常情况出现,连接会⼀直保持,断连后需要重新选择⼀个新的服务节点,当出现服务节点发布重启后,最终连接会出现不均衡的情况出现,“随机,轮询,权重”的策略在客户端重连切换时可以使用,“最小连接数,最快响应速度”和短连接⼀样也会出现数据延时造成堆积效应。


长连接和短连接的⼀个主要差别在于在整体连接稳定时,服务端需要⼀个 rebalance 的机制,将集群视角的连接数重新洗牌分配,趋向另外⼀种稳态


客户端随机+服务端柔性调整: 核心的策略是客户端+服务端双向调节策略,客户端随机选择+服务端运行时柔性调整。


0d4396af8dde425490c6449e39e9d429.png


客户端随机

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


服务端柔性调

(当前实现版本) 人工管控方案


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


   提供集群视角的负载控制台:展示 总节点数量,总长链接数量,平均数量,系统负载信息。


   每个节点的地址,长链接数量,与平均数量的差值,正负值。


   对高于平均值的节点进行数量调控,设置数量上限(临时和持久化),并可指定服务节点进行切换。


 (未来终态版本)自动化管控方案


   基于每个 server 间连接数及负载自动计算节点合理连接数,自动触发 reblance,自动削峰填谷。实现周期较长,比较依赖算法准确性。



4. 连接⽣命周期


心跳保活机制

bb6a6b656a664578b09ff0388cf657ab.png


我们需要什么


 低成本快速感知:客户端需要在服务端不可用时尽快地切换到新的服务节点,降低不可用时间,并且能够感知底层连接切换事件,重置上下文;服务端需要在客户端断开连接时剔除客户端连接对应的上下文,包括配置监听,服务订阅上下文,并且处理客户端连接对应的实例上下线。


   客户端正常重启:客户端主动关闭连接,服务端实时感知

   服务端正常重启 : 服务端主动关闭连接,客户端实时感知


 防抖:

   网络短暂不可用: 客户端需要能接受短暂网络抖动,需要⼀定重试机制,防止集群抖动,超过阈值后需要自动切换 server,但要防止请求风暴。


 断网演练:

   断网场景下,以合理的频率进行重试,断网结束时可以快速重连恢复。




5. 安全性

支持基础的鉴权,数据加密能力。



6. 低成本多语⾔实现

在客户端层面要尽可能多的支持多语言,至少要支持⼀个 Java 服务端连接通道,可以使用多个主流语言的客户端进行访问,并且要考虑各种语言实现的成本,双边交互上要考虑 thin sdk,降低多语言实现成本



长链接选型对比

b5272a5d26e149f68a28deeba40b4737.png




基于长链接的⼀致性模型


1. 配置⼀致性模型


sdk-server ⼀致性


7929402319aa41169e46f26b910c9876.png


server 间⼀致性


Server 间同步消息接收处理轻量级实现,重试失败时,监控告警。

断网:断网太久,重试任务队列爆满时,无剔除策略。


2. 服务⼀致性模型


sdk-server 间⼀致性


2c888ea943164516be86290a641e5493.png

server 间⼀致性


fe961db5e7fe447983ecaeee34ec7a49.png


核心模型组件设计


相关文章
|
1月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
86 3
|
8天前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
220 89
|
2月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
98 1
|
17天前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
72 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
1天前
|
存储 缓存 监控
ClickHouse 架构原理及核心特性详解
ClickHouse 是由 Yandex 开发的开源列式数据库,专为 OLAP 场景设计,支持高效的大数据分析。其核心特性包括列式存储、字段压缩、丰富的数据类型、向量化执行和分布式查询。ClickHouse 通过多种表引擎(如 MergeTree、ReplacingMergeTree、SummingMergeTree)优化了数据写入和查询性能,适用于电商数据分析、日志分析等场景。然而,它在事务处理、单条数据更新删除及内存占用方面存在不足。
45 21
|
1天前
|
存储 消息中间件 druid
Druid 架构原理及核心特性详解
Druid 是一个分布式、支持实时多维OLAP分析的列式存储数据处理系统,适用于高速实时数据读取和灵活的多维数据分析。它通过Segment、Datasource等元数据概念管理数据,并依赖Zookeeper、Hadoop和Kafka等组件实现高可用性和扩展性。Druid采用列式存储、并行计算和预计算等技术优化查询性能,支持离线和实时数据分析。尽管其存储成本较高且查询语言功能有限,但在大数据实时分析领域表现出色。
34 19
|
1天前
|
存储 SQL NoSQL
Doris 架构原理及核心特性详解
Doris 是百度内部孵化的OLAP项目,现已开源并广泛应用。它采用MPP架构、向量化执行引擎和列存储技术,提供高性能、易用性和实时数据处理能力。系统由FE(管理节点)和BE(计算与存储节点)组成,支持水平扩展和高可用性。Doris 适用于海量数据分析,尤其在电商、游戏等行业表现出色,但资源消耗较大,复杂查询优化有局限性,生态集成度有待提高。
27 15
|
4天前
|
数据采集 存储 NoSQL
AArch64架构调用链性能数据采集原理
本次分享的主题是AArch64架构调用链性能数据采集原理,由阿里云苏轩楠分享。主要分为五个部分: 1. 术语解释 2. Frame Pointer RegisterStack Unwind 3. Dwarf-based Stack Unwind 4. /BRBE/CSRE Stack Unwind 5. Kernel-space Stack Unwind&eBPF Unwinders
|
1月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。