NATS 2.0是自代码发布以来最大的特性发布。NATS 2.0允许将NATS看作为一种共享实用工具,通过分布式安全、多租户、更大的网络和数据的安全共享大规模地解决问题。
基本原理
创建NATS 2.0是为了解决大规模分布式计算中的问题。
在坚持政策和遵从性的同时,将端到端(或端到端边缘)的身份管理与数据共享结合起来是非常困难的。当前的分布式系统随着规模的扩大,操作复杂性显著增加。围绕服务发现、连接、容量扩展以及应用程序的加载和更新出现了一些问题。灾难恢复很困难,尤其是当系统已经发展到由技术而非业务需求定义的孤岛中运营时。随着复杂性的增加,系统在时间和金钱方面的运行成本变得昂贵。它们变得脆弱,难以部署服务和应用程序,阻碍创新,增加了实现价值的时间和总拥有成本。
我们决定:
为了实现这一点,我们添加了一些对现有客户端透明的新特性,并且具有100%的向后客户端兼容性。
账户
帐户(Account)是安全隔离的通信上下文,允许NATS部署多租户。帐户允许用户将技术从业务驱动用例中分离出来,数据孤岛是设计出来而不是来自软件限制。当客户端连接时,它指定一个帐户,或者默认使用全局帐户进行身份验证。
会有一些服务需要共享帐户外的数据。数据可以在具有安全服务和流的帐户之间安全地共享。只有帐户所有者之间的相互协议才允许数据流,导入帐户对自己的主题空间具有完全的控制。
这意味着在帐户中可以设置限制,并且可以使用主题而不用担心与其他组或组织发生冲突。开发团队在不影响系统其他部分的情况下选择任何主题,并打开帐户,只导出或导入他们需要的服务和流。
帐户是简单、安全、和成本有效的。只需要管理一个NATS部署,但是组织和开发团队有更大的自治权进行自我管理,通过更快、更敏捷的开发实践,从而减少价值实现的时间。
服务和流
服务和流是在帐户之间共享消息的机制。
将服务看作帐户中的RPC端点。在该帐户后面可能有许多协同工作的微服务来处理请求,但是从帐户外部只公开了一个主题。
共享端点的服务定义:
用例包括大多数应用程序 - 任何接受请求并返回响应的应用程序。
流定义允许账户之间的连续数据流:
用例包括可观察性、度量和数据分析。读取数据流的任何应用程序或端点。
请注意,服务和流在零客户端配置或API更改的情况下运行。服务甚至可以在账户之间移动,对终端客户完全透明。
系统账户
系统帐户在已建立的主题模式下发布系统消息。这些是可能对操作员有用的内部NATS系统消息。
服务器发起的事件和数据包括:
具适当权限的工具及客户端可要求:
帐户服务器还将在帐户更改时发布消息。
使用这些信息和系统元数据,你可以构建有用的监视和异常检测工具。
全球部署
NATS 2.0支持全局部署,允许全局拓扑对广域网进行优化,同时扩展到边缘或设备。
自愈
自愈功能是NATS 1.X版本的一部分,我们确保它们继续在全球部署中工作。这些包括:
超集群
从概念上讲,超集群是NATS集群的集群。创建超集群来部署一个真正的全球NATS网络。超集群使用一种新颖的基于样条(spline)的技术,采用独特的拓扑方法,保持单跳语义,并通过带兴趣的图剪枝的乐观发送优化广域网流量。超集群为地理分布的队列订阅者提供透明、智能的支持。
灾难恢复
超集群天生支持灾难恢复。对于地理分布的队列订阅者,首选本地客户端,然后使用RTT查找超集群中包含匹配队列订阅者的最低延迟的NATS集群。
这是什么意思?
假设你在美国东海岸(US-EAST)有一组负载平衡服务,在欧洲(EU-WEST)有另一组负载平衡服务,以及由US-EAST的NATS集群与EU-WEST的NATS集群连接而成的超集群。美国的客户端将连接到US-EAST,而连接到该集群的服务将为这些客户端提供服务。欧洲的客户将自动使用连接到EU-WEST的服务。如果US-EAST的服务断开连接,US-EAST中的客户端将开始使用EU-WEST的服务。
一旦美国东部的服务重新连接到US-EAST,这些服务将立即开始为美国东部的客户提供服务,因为它们是NATS集群的本地客户。这是自动的,对客户端完全透明。在NATS服务器中没有额外的配置。
这是零配置灾难恢复。
叶节点
叶子节点是运行在特殊配置中的NATS服务器,允许hub和spoke拓扑扩展超集群。
叶节点还可以桥接单独的安全域,像物联网、移动、网络。它们是边缘计算、物联网中心或需要连接到全球NATS部署的数据中心的理想选择。使用环回接口与物理VM或容器安全性进行通信的本地应用程序也可以利用叶节点。
叶节点:
分散化安全性
操作员、帐户和用户
NATS 2.0安全性包括在NATS部署中定义操作员(Operator)、帐户(Account)和用户(用户)。
信任链
PKI(NKeys编码Ed25519)和已签名的JWT创建了操作员、帐户和用户的层次结构,创建了可伸缩和灵活的分布式安全机制。
这允许对安全的多租户NATS系统快速更改权限、身份验证和限制。