概述

NATS 是啥?
NATS是一种连接技术,为现代分布式系统提供支持。连接技术负责解决分布式系统中常见模式所涉及的寻址、发现和消息交换问题;例如提问与回答(即服务/微服务)以及生成和处理指令(即流处理)。

现代分布式系统面临的挑战 现代分布式系统的特点是高度互联的组件数量不断增加,并产生大量额外的数据。这些系统同时使用服务和流来实现业务价值。此外,它们还具有位置独立性和移动性,而不仅仅是传统意义上的前端技术。如今的系统及其后端流程、微服务和流处理同样需要具备位置独立性和移动性,同时还要确保安全性。

这些现代系统对那些用于将移动前端连接到相对静态后端的技术提出了挑战。现有技术通常通过主机名(DNS)或IP和端口进行寻址和发现,采用一对一通信模式,并且在身份验证和授权方面存在多种不同的安全机制。尽管这些现有技术并非完美,但在许多情况下已足够有效,但时代正在迅速变化。随着微服务、函数和流处理被要求向边缘迁移,这些技术和它们所依赖的假设正面临挑战。

为什么NATS连接技术对这些现代系统而言如此独特?

轻松实现M:N连接: NATS基于主题进行寻址和发现,而非主机名和端口。默认采用M:N通信模式,这是1:1通信模式的超集,意味着它既能实现一对一通信,也能实现更多功能。如果你有一个在开发阶段运行良好的1:1系统,那请问在生产环境中,为了绕过1:1的假设,还需要多少其他组件?例如负载均衡器、日志系统、网络安全模型,以及代理和边车(sidecar)。如果您的生产系统仅为了绕过所使用的连接技术(如HTTP或gRPC)的1:1限制,就需要引入所有这些组件,那么现在正是尝试NATS.io的时候了。

部署无处不在: NATS几乎可以部署在任何地方;无论是裸机、虚拟机、容器、Kubernetes内部,还是设备上,或者您选择的任何其他环境。NATS可以在部署框架内运行,也可以独立运行。

安全可靠: 同样,NATS默认安全,无需依赖于网络边界安全模型。当您开始考虑将后端微服务和流处理器移动化时,很多时候最大的障碍就是安全性。

可扩展且面向未来的部署

NATS基础设施和客户端能够实时通信所有拓扑变化信息。这意味着NATS部署发生变化时,NATS客户端无需更改。如果每次部署都需要更改客户端,就像每次移动运营商增加或更换基站时都必须重启手机一样荒谬。当然,这听起来很可笑,但请想想当今有多少系统将前端与后端紧密绑定,以至于任何变化都需要完全重启或至少重新配置前端。而使用NATS时,即使后端服务器被添加、移除或更改,NATS客户端和应用程序也无需进行此类更改。甚至DNS也只是用于初始联系的引导,之后NATS会透明地处理端点位置。

混合部署

利用NATS的另一个优势是可以实现SaaS/公用计算与独立拥有和运营的系统的混合部署。这意味着您可以共享一个NATS服务,核心微服务、流和流处理由多个团队或个人扩展,他们可能需要运行自己的NATS基础设施。您不必被迫选择其中一种方式。

适应性

当今的系统在面对新需求时可能会力不从心。随着现代系统持续演进,采用更多组件并处理海量数据,支持超越1:1通信的模式至关重要 —— 其中与DNS绑定的地址解析与服务发现机制尤为关键。像 NATS 这样的基础技术承诺提供最高的投资回报。当现代系统需要统一云、边缘计算、物联网及其他领域时,现有技术将无法胜任,而 NATS 可以做到。

使用场景

NATS可以运行在任何地方,从大型服务器和云实例,到边缘网关,甚至物联网设备。NATS的使用场景包括:

  • 云消息传递
    • 服务(微服务、服务网格)
    • 事件/数据流(可观测性、分析、机器学习/人工智能)
  • 命令与控制
    • 物联网和边缘
    • 遥测/传感器数据/命令与控制
  • 扩容或替代传统消息系统