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. Mybatis 拦截器实现单数据源内多数据库切换 | 京东物流技术团队

    物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示: 现 ...

  2. 如何优雅的写 css 代码

    CSS(全称 Cascading Style Sheets,层叠样式表)为开发人员提供声明式的样式语言,是前端必备的技能之一,基于互联网上全面的资料和简单易懂的语法,CSS 非常易于学习,但其知识点广 ...

  3. 使用Java读取Excel文件数据

    通过编程方式读取Excel数据能实现数据导入.批量处理.数据比对和更新等任务的自动化.这不仅可以提高工作效率还能减少手动处理的错误风险.此外读取的Excel数据可以与其他系统进行交互或集成,实现数据的 ...

  4. Harbor系统文章01---Linux安装Harbor

    1.切换到指定目录下载harbor安装包 wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v ...

  5. javaScript随机图片

    <script type="text/javascript"> //<!CDATA[ var pic = []; pic[0] = "链接"; ...

  6. x86 x64 arm64的区别

    我们常说的高通 865,麒麟990 不是 CPU 是 SoC(System On Chip),SoC 除了 CPU 外,还有 GPU,还有可选的浮点数加速器,专用于深度模型的加速器,等等.除此以外,S ...

  7. 【主流技术】实战之 Spring Boot 中集成微信支付(小程序)

    前言 微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的. 以下是经过真实商业项目实践的集成步骤,包括注册流程.调用过程.代码demo(经过脱敏)等,希望我的分享 ...

  8. 【九】强化学习之TD3算法四轴飞行器仿真---PaddlePaddlle【PARL】框架

    相关文章: [一]飞桨paddle[GPU.CPU]安装以及环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简 ...

  9. C/C++ Qt 编译打包项目

    Qt程序编译后,需要去qt目录拷贝几个文件,与qt程序放在一起该程序才可以脱离开发环境而独立运行下去,在开发环境下编译好代码以后,还需要进行以下操作将其打包才可以在别的机器上正常运行. QT的下载地址 ...

  10. 并发编程-JUC的三个常用工具类

    1.CountDownLatch:减法计数器 代码实例 public class CountDownLatchTest { public static void main(String[] args) ...