01、NATS基础介绍

项目中使用到了 NATS,但是之前并没有接触过,所以特意去学习了下,网上找了些资料,相对来说,都不是很全的介绍,所以特意记录下笔记,方便自己掌握,也希望可以帮助到其他小伙伴。

重点:

本系列教程以 NATS2.2 之后的版本为例进行讲解,2.2 之后的版本加入了较多的特性,其中最大的便是 JetStream 相关的。

1、基础介绍

github

document

1.1、简介

NATS 是一种旨在为数字化系统、服务和设备提供简单、安全和高性能通信的解决方案。作为云原生计算基金会(CNCF)的一部分,NATS 提供了多达 40 种不同编程语言的客户端实现,并且其服务器可以灵活地在本地、云端、边缘计算甚至树莓派等多种环境下运行。

NATS 的设计注重简洁性和可靠性,使得构建分布式系统变得更加容易。通过使用发布者-订阅者模型,NATS 允许系统中的不同组件之间进行异步通信,从而实现实时数据传递、事件通知以及系统状态更新等功能。此外,NATS 还支持请求-响应模式,使得系统能够实现简单且可靠的请求处理和响应。

注意,这里除了常见的消息队列的使用模式外,NATS 还支持请求-响应模式,这相对其他消息队列而言算是一个比较大的不同。

由于其出色的性能和安全特性,NATS 成为了构建现代分布式系统的首选工具之一。其适用范围涵盖了从云端应用到边缘设备,使得系统设计者能够更加专注于应用逻辑的开发,而无需过多关注底层通信机制。

这里说一个关于 NATS 的故事,NATS 的最初版本并不是使用 Go 编写的,而是使用 Ruby 。后面 Derek 使用 Go 重写了 NATS,发现性能效果更好,于是现在慢慢将Ruby版本的服务器淘汰了,现在官网也只维护一个Go 版本的 server,也就是我们这里的 nats-server。

1.2、NATS设计目标

NATS的设计原则是:高性能、可伸缩能力、易于使用,基于这些原则,NATS的设计目标包括:

  1. 简单性(Simplicity): NATS 的设计注重简洁性,使其易于理解、部署和使用。开发者可以迅速上手,而不必花费过多时间在复杂的配置和设置上。

  2. 安全性(Security): NATS 提供多种安全性特性,包括身份验证、访问控制和加密传输,以确保通信在分布式系统中的保密性和完整性。

  3. 高性能(High Performance): NATS 被设计为高性能的消息传递系统,能够在低延迟的情况下处理大量的消息。这使得 NATS 在需要实时性和高吞吐量的应用场景中表现出色。

  4. 可扩展性(Scalability): NATS 支持多种部署模式,可以在不同的环境中进行扩展,从本地部署到云端和边缘计算,甚至是嵌入式设备。

  5. 异步通信(Asynchronous Communication): NATS 基于发布者-订阅者模型,支持异步通信,使得系统中的不同组件能够松耦合地进行消息交换,从而实现实时事件传递和消息广播。

  6. 可靠性和持久性(Reliability and Persistence): NATS 支持持久订阅和可靠消息传递,确保即使在订阅者断开连接或宕机的情况下,消息也不会丢失。

  7. 请求-响应模式(Request-Response Pattern): NATS 提供了请求-响应模式,允许应用程序发起请求并接收响应,从而实现简单可靠的通信流程。

  8. 适应不同规模(Suitable for Different Scales): NATS 适用于各种规模的应用,从小型应用到大规模分布式系统,都能够根据需要进行调整。

  9. 开放性和跨平台支持(Openness and Cross-Platform Support): NATS 提供了多种编程语言的客户端实现,支持跨平台操作系统,使开发者能够在不同环境中使用其功能。

1.3、NATS应用场景

以下是一些常见的NATS应用场景:

  1. 微服务通信: 微服务架构中的不同服务可以使用NATS来进行通信。NATS提供低延迟和高吞吐量的消息传递,有助于实现微服务之间的解耦和快速通信。

  2. 事件驱动架构: NATS能够支持事件驱动架构,用于处理实时事件、通知和更新。通过发布订阅模型,服务可以订阅感兴趣的事件,以便在事件发生时作出相应。

  3. 分布式系统协调: 在分布式系统中,NATS可以用作协调机制,帮助不同的节点之间协调操作、共享状态信息和进行通信。

  4. 实时数据处理: NATS可以用于实时数据流处理,例如传感器数据、日志流等。它可以将数据发送到消费者,用于实时分析、监控和警报。

  5. 异步通信: NATS支持异步通信模式,适用于需要将请求和响应解耦的场景。客户端可以发送请求消息,而不需要立即等待响应。

  6. 发布订阅系统: NATS的发布订阅模型使其非常适合构建发布订阅系统,用于向订阅者广播事件、消息或数据更新。

  7. 服务发现和动态配置: NATS可以用于服务发现,帮助服务在网络中找到彼此。它还可以用于动态配置管理,允许服务在运行时获取配置更新。

  8. 高可用性和容错: NATS支持集群模式,可以提供高可用性和容错性,确保系统的可用性和健壮性。

  9. 物联网(IoT)应用: NATS可以用于连接和管理物联网设备,将传感器数据传输到云端进行处理和分析。

注意:

NATS的设计注重简单性和性能,它可能不适用于所有应用场景,特别是需要复杂事务处理和持久性存储的情况。

1.4、NATS客户端介绍

NATS客户端的实现语言挺多的,基本上主流的语言都有,需要的可以直接去 nats-io 上面去找,这里有一个规律,NATS客户端的命名一般事 nats.具体的语言,比如 nats.gonats.pynats.java

2、NATS与其他消息队列比较

详细的介绍可以直接看官方文档上面的介绍。

这里摘选觉得比较重要的比较。

Delivery Guarantees(交付保证):

Project Quality of Service / Guarantees
NATS At most once, at least once, and exactly once is available in JetStream.
gRPC At most once.
Kafka At least once, exactly once.
Pulsar At most once, at least once, and exactly once.
Rabbit At most once, at least once.

Message Retention and Persistence(消息保留和持久性):

Project Message Retention and Persistence Support
NATS Supports memory, file, and database persistence. Messages can be replayed by time, count, or sequence number, and durable subscriptions are supported. With NATS streaming, scripts can archive old log segments to cold storage.(支持内存、文件和数据库持久性。消息可以按时间、计数或序列号重播,并且支持持久订阅。使用NATS流,脚本可以将旧的日志段归档到冷存储中。)
gRPC N/A
Kafka Supports file-based persistence. Messages can be replayed by specifying an offset, and durable subscriptions are supported. Log compaction is supported as well as KSQL.(支持基于文件的持久性。可以通过指定偏移量来重播消息,并且支持持久订阅。日志压缩和KSQL一样受支持。)
Pulsar Supports tiered storage including file, Amazon S3 or Google Cloud Storage (GCS). Pulsar can replay messages from a specific position and supports durable subscriptions. Pulsar SQL and topic compaction is supported, as well as Pulsar functions.(支持分层存储,包括文件、亚马逊S3或谷歌云存储(GCS)。Pulsar可以从特定位置重播消息,并支持持久订阅。支持Pulsar SQL和主题压缩,以及Pulsar函数。)
Rabbit Supports file-based persistence. Rabbit supported queue-based semantics (vs log), so no message replay is available.(支持基于文件的持久性。Rabbit支持基于队列的语义(相对于日志),因此没有可用的消息重播。)

01、NATS基础介绍的更多相关文章

  1. NATS—基础介绍

    1. 介绍 NATS(Message bus): 从CloudFoundry的总架构图看,位于各模块中心位置的是一个叫nats的组件.NATS是由CloudFoundry的架构师Derek开发的一个开 ...

  2. NATS_01:NATS基础介绍

    1.介绍 NATS(Message bus): 从CloudFoundry的总架构图看,位于各模块中心位置的是一个叫nats的组件.NATS是由CloudFoundry的架构师Derek开发的一个开源 ...

  3. 【01】emmet系列之基础介绍

    [01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 相关网址 官网:http: ...

  4. 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用

    043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...

  5. 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”

    011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...

  6. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  7. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  8. OSPF基础介绍

    OSPF基础介绍 一.RIP的缺陷 1.以跳数评估的路由并非最优路径 2.最大跳数16导致网络尺度小 3.收敛速度慢 4.更新发送全部路由表浪费网络资源 二.OSPF基本原理 1.什么是OSPF a& ...

  9. shell脚本编程基础介绍

    Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...

  10. 黑马_13 Spring Boot:01.spring boot 介绍&&02.spring boot 入门

    13 Spring Boot: 01.spring boot 介绍&&02.spring boot 入门 04.spring boot 配置文件 SpringBoot基础 1.1 原有 ...

随机推荐

  1. Linux查看登录用户记录信息

    Linux查看登录用户记录信息 登录成功的信息 last 可以简单统计一下: last |awk '{print $3}' |sort |uniq -c |sort -k1nr 登录失败的 就是 la ...

  2. vue面试题(一)正在重新整理

    1.输入一个 URL到浏览器整个过程发生了什么?ok 1.浏览器查找当前 URL是否存有缓存,并检查这个缓存是否过期 2.DNS 解析 URL 对应的 IP 3.根据 IP 建立 TCP 连接(三次握 ...

  3. 【代码分享】使用 avx2 + 查表法,优化凯撒加密

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 接上一篇:[代码分享]使用 avx512 + 查表法,优化 ...

  4. 【代码分享】使用 terraform, 在 ZeroSSL 上申请托管在 cloudflare 上的域名对应的证书

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 接上一篇:<使用 terraform, 在 Let' ...

  5. 【JS 逆向百例】37网游登录接口参数逆向

    声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:37网游登录 主页:https://www.37.co ...

  6. 【一文搞定】Linux、Mac、Windows安装Docker与配置教程!

    目录 一.Windows 安装 1.1 安装与启用 Hyper-V 1.2 安装 WSL 1.3 Docker Desktop 官方下载 1.4 安装Docker Desktop 二.MacOS 安装 ...

  7. vim 从嫌弃到依赖(0)——概述

    最近我想开一个新的系列,记录我使用vim的相关心得.初次接触vim是在大学操作系统实践课程中,跟着Linux一块进行学习的.当初我是百般嫌弃它的,想要进行编辑还要按下其他键,我想要移动光标居然还的切换 ...

  8. paddle DeBug 三步定位PARL飞桨报错原因,快速解决程序问题

    相关文章: [一]-环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简介 [五]-Sarsa&Qlea ...

  9. LyScript 实现Hook改写MessageBox

    LyScript 可实现自定义汇编指令的替换功能,用户可以自行编写一段汇编指令,将程序中特定的通用函数进行功能改写与转向操作,此功能原理是简单的Hook操作. 插件地址:https://github. ...

  10. Linux 系统下查找文件命令

    Linux 系统下查找文件命令,融合多部Linux经典著作,去除多余部分,保留实用部分. 查命令绝对路径: which用于查找并显示给定命令的绝对路径,环境变量中PATH参数也可以被查出来. [roo ...