Nacos架构与原理 - 通信通道

这篇具有很好参考价值的文章主要介绍了Nacos架构与原理 - 通信通道。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Nacos架构与原理 - 通信通道

Nacos 长链接

⼀、现状背景

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

Nacos架构与原理 - 通信通道

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

Nacos架构与原理 - 通信通道


二、场景分析

1. 配置

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

Nacos架构与原理 - 通信通道

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 能力

三、长链接核心诉求

Nacos架构与原理 - 通信通道

1. 功能性诉求

客户端

 连接生命周期实时感知能力,包括连接建立,连接断开事件。
 客户端调用服务端支持同步阻塞,异步 Future,异步 CallBack 三种模式。
 底层连接自动切换能力。
 响应服务端连接重置消息进行连接切换。
 选址/服务发现。

服务端

 连接生命周期实时感知能力,包括连接建立,连接断开事件。
 服务端往客户端主动进行数据推送,需要客户端进行 Ack 返回以支持可靠推送,并且需要进行失败重试。
 服务端主动推送负载调节能力。


2. 性能要求

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


3. 负载均衡

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

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

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

Nacos架构与原理 - 通信通道

客户端随机

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

服务端柔性调

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

  • 集群视角的系统负载控制台,提供连接数,负载等视图(扩展新增连接数,负载,CPU 等信息,集群间 report 同步),实现人工调节每个 Server 节点的连接数,人工触发 reblance,人工削峰填谷。
  • 提供集群视角的负载控制台:展示 总节点数量,总长链接数量,平均数量,系统负载信息。
  • 每个节点的地址,长链接数量,与平均数量的差值,正负值。
  • 对高于平均值的节点进行数量调控,设置数量上限(临时和持久化),并可指定服务节点进行切换。

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

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

4. 连接⽣命周期

心跳保活机制

Nacos架构与原理 - 通信通道

我们需要什么

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

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

 防抖:

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

 断网演练:

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

5. 安全性

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

6. 低成本多语⾔实现

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

长链接选型对比

Nacos架构与原理 - 通信通道


基于长链接的⼀致性模型

1. 配置⼀致性模型

sdk-server ⼀致性

Nacos架构与原理 - 通信通道

server 间⼀致性

Nacos架构与原理 - 通信通道


Nacos架构与原理 - 通信通道
Server 间同步消息接收处理轻量级实现,重试失败时,监控告警。

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


2. 服务⼀致性模型

sdk-server 间⼀致性

Nacos架构与原理 - 通信通道


server 间⼀致性

Nacos架构与原理 - 通信通道

Nacos架构与原理 - 通信通道


核心模型组件设计

Nacos架构与原理 - 通信通道文章来源地址https://www.toymoban.com/news/detail-477561.html

到了这里,关于Nacos架构与原理 - 通信通道的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聊聊分布式架构04——RPC通信原理

    目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC(Remote Procedure Call)是一种远程过程调用协议,

    2024年02月07日
    浏览(38)
  • Spring架构篇--2.7.2 远程通信基础--Netty原理--ServerBootstrap

    前言:已经初始化了NioEventLoopGroup 的boosGroup 和 workerGroup ,那么ServerBootstrap的作用是干嘛的呢 ,本文在Spring架构篇–2.7.1 远程通信基础–Netty原理–NioEventLoopGroup 之后继续进行探究 1 首先回顾下 nettt 的使用demo: 可以看到ServerBootstrap 的对象做了一系列的配置后最终 通过 bind

    2024年02月08日
    浏览(31)
  • 万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)

    在执行docker pull时,会发现多个Pull complete 字样,就能体现分层,如果是一个文件,只会有一个Pull complete 。 概念:文件系统是计算机系统中用于组织和管理数据存储的一种方式。它定义了数据如何存储、命名、访问和修改的方式。 举例:如Windows自带的NTFS、FAT32、EXFAT,和L

    2024年04月14日
    浏览(39)
  • 5G高可靠低时延通信标准现状及产业进展

    摘要 :高可靠低时延通信(URLLC)是5G三大应用场景之一,为推动其产业发展,首先介绍国内外URLLC标准制定现状及未来演进路线,梳理我国不同应用场景对时延、可靠性的业务需求,再从技术实现和产业落地的角度,详述我国URLLC关键技术的研发现状和技术试验规划,最后提

    2024年01月16日
    浏览(47)
  • 小程序路由跳转---事件通信通道EventChannel(一)

    借助wx.navigateTo方法,在两个页面之间构建起数据通道,互相可以通过“派发事件”及“注册事件监听器”来实现基于事件的页面通信。基础库版本v2.7.3以上支持。 EventChannel.emit( strign eventName,any args ) 触发一个事件 EventChannel.on( strign eventName,EventCallback fn ) 持续监听一个事件 E

    2024年04月24日
    浏览(54)
  • 使用通信顺序进程(CSP)模型的 Go 语言通道

    在并发编程中,许多编程语言采用共享内存/状态模型。然而,Go 通过实现  通信顺序进程(CSP) 模型来区别于众多。在CSP中,程序由不共享状态的并行进程组成;相反,它们通过通道进行通信和同步操作。因此,对于有兴趣采用Go的开发人员来说,理解通道的工作原理变得至

    2024年02月10日
    浏览(46)
  • 研发提速:nacos+openfeign环境下的本地链接服务

    项目研发过程中,经常会遇到与测试人员工作重叠的情况,十分影响效率。 做了一个修改,可以在本地环境启动项目后和测试环境交互,并且不影响测试环境,理论上也可以用于线上环境的异常的快速处理。 准备事项如下: 一:搭建本地的nacos服务。 二:导入测试环境相应

    2024年02月08日
    浏览(38)
  • 卷积原理(卷积,padding填充,步长,多通道卷积)

    卷积可以用于对输入数据进行特征提取,特征提取的过程可以理解为通过卷积对输入特征进行加权运算,提取输入中的重要信息。 卷积运算的过程就是通过卷积核扫描输入矩阵的元素,将卷积核和扫描对应的元素相乘再相加,得到一个输出,通过不断地滑动,得到最后的输出

    2024年02月09日
    浏览(43)
  • State of GPT (ChatGPT 原理及现状介绍)

    演讲信息: 演讲人:Andrej Karpathy (现在OpenAI任职),之前是特斯拉视觉研发负责人,斯坦福深度学习入门课程 CS231N 讲师 演讲主题:受到微软 BUILD2023 邀请,介绍 GPT 的原理及研发现状,介绍大语言模型应用生态 第一部分介绍如何训练 ChatGPT (本演讲中有个更通用的名字: GP

    2024年02月07日
    浏览(55)
  • 简要介绍 | 心脏机械-电耦合理论:原理、研究现状与未来展望

    注1:本文系“简要介绍”系列之一,仅从概念上对心脏机械-电耦合理论进行非常简要的介绍,不适合用于深入和详细的了解。 心脏中精密的血流局部调控机制:electro-metabolic signaling(电-代谢通路) - 知乎 心脏是人体最重要的器官之一,负责将血液输送到全身各个组织和器

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包