学习笔记:NATS--自适应边缘和分布式系统的连接技术。(更新中)
1. NATS: 自适应边缘和分布式系统 的连接技术
nats可以做什么:
负责寻址,发现和交换消息,这些消息提供给分布式系统,用来驱动常见的模式:询问和回答(微服务)、创建和处理(增删改)、流处理(消息加工)
为什么需要NATS技术:
随着微服务、功能函数和流处理被要求转移到边缘,现有(用于连接移动前端和静态后端的1:1通信模式,如HTTPorGRPC)技术受到了挑战。
NATS连接技术的特性:
-
M:N连接:NATS根据主题而不是主机名和端口来管理寻址和发现。
-
在任何地方部署、安全、混合部署
-
可扩展的部署:NATS基础设施和客户端实时沟通所有拓扑变化。即当NATS部署发生变化时,NATS客户端不需要改变
-
适应性:nats支持更多组件的利用和更多数据的处理。nats支持M:N的通信模式。nats提供的寻址和发现功能与DNS所绑定。以上特性决定了nats对新系统和新需求的适应性。
2. 什么是NATS:面向消息的中间件
nats用来做什么:
-
构建分布式和可拓展的C/S应用;
-
以一般方式实时存储和分发数据。(兼容各自环境和语言)
NATS 服务基础设施是什么?
NATS 服务由一个或多个 NATS 服务器进程提供,这些进程配置相互互连,提供NATS 服务基础架构。(集群,具有可拓展性)
NATS 客户端如何连接到 NATS 服务器?
-
URL: 一个 'NATS URL'。这是一个字符串(以 URL 格式),指定可以访问 NATS 服务器的 IP 地址和端口,以及要建立的连接类型(普通 TCP、TLS 或 Websocket)。
-
认证(如需登录):认证 前端传来的信息,用于向 NATS 服务器标识自己。 NATS 支持多种身份验证方案(用户名/密码、去中心化 JWT、令牌、TLS 证书和带挑战的 Nkey)。
NATS是如何设计消息传递的?
-
发布者:对数据进行编码、框架化为消息,最后发出。
-
消息的寻址和标识过程:依赖主题字符串,而非网络位置(域名,IP,Port)。
-
订阅者:接收消息,解码并处理消息。
该设计的好处:
- 各程序可共享通用的消息处理代码(复用)
- 各程序之间隔离了资源和相互依赖关系(解耦)
- 可通过增加消息处理方法进行扩展。
3. 基于主题的消息传递
主题:
是形成名称(用于查找对象)的字符串。建议使用ASCII字符。NATS的发布和监听消息严重依赖_Subjects_。
主题层次结构:
主题字串的通配符:
- 匹配单个标记:第一个通配符是
*
,它将匹配单个标记。(可在同一主题重复出现)
- 匹配多个标记:第二个通配符是
>
,它将匹配一个或多个标记,并且只能出现在主题的末尾。(分接头:为 > 创建一个订阅者,可监控NATS集群上的所有消息)
4. 核心NATS
核心NATS是什么?
核心NATS是NATS服务基础设施提供的基本功能和服务质量(QoS)集。其功能是发布/订阅,具有基于主题的寻址和队列,以及“最多一次”服务质量。(不包括nats-server启用JetStream后提供的功能和服务)
1、发布和订阅
NATS如何发布和订阅?
NATS实现了1:N通信的消息分发模型。在此模型中,订阅者从特定主题中持续监听消息,而发布者随时向特定主题发送消息。订阅者可以通过主题字串通配符 注册一系列的主题(即监听多个群聊)。此1:N的通信模式可被称为分发
NATS的消息组成:
- 主题
- 以二进制数组形式载荷的内容
- 头部header
- 可选项:回复地址
消息的默认最大载荷为1M,可自行增加至64M
分布式系统中的请求-响应模式:
即,进程发送请求后,或是以异步方式接收响应,或是超时等待。
此模式需要具备以下特性:位置透明性,可扩展性,可观测性。
2、请求和响应
NATS如何实现请求-响应模式?
- 使用NATS内核的通信机制:发布-订阅。订阅者随时用自己的收件箱 将请求发送到特定主题中。持续监听特定主题的发布者用发来的收件箱将响应回复给订阅者。
- 多个NATS响应者会自动地形成动态队列组。因此,手动去添加或移除订阅者,影响不了响应者队列对消息的发送行为。
- NATS程序在连接断开前会排空缓冲,以减小进程规模。
- 基于发布-订阅机制,NATS程序可以查看请求和响应,以测量延迟、监视异常、直接可扩展性等。
- NATS允许多个响应者,其中第一个送达的响应被利用,额外的响应被丢弃。这可以减少响应的延迟和抖动
无响应者的情况:
当请求被发送到一个没有订阅者的主题时,如果客户端设置了消息的可选项:no_responder messages ,那么则会立刻收到一个状态码为503,没有body的回复。