Skip to content

Latest commit

 

History

History
33 lines (17 loc) · 4.25 KB

service_infrastructure.md

File metadata and controls

33 lines (17 loc) · 4.25 KB

NATS服务架构

NATS是一种客户端/服务器架构系统,因为你使用nats客户端应用程序(调用某种NATS客户端库的应用程序)连接到提供NATS服务的NATS服务器集群。NATS服务器集群,为其客户端应用程序提供NATS服务。

NATS是非常灵活和可扩展的,允许服务基础设施小到在本地机器上运行的单个进程,大到作为“NATS互联网”的叶节点,叶节点集群都以安全的方式互连一个全球共享的NATS超级集群。

无论使用的NATS服务基础架构的大小和复杂程度如何,客户端应用程序所需的唯一配置是一个或多个NATS服务器的位置(NATS URL),以及它们的凭据(取决于所需的安全性)。

注意,如果你的应用程序是用Golang编写的,那么你甚至可以选择将NATS服务器功能嵌入到应用程序本身(然而,你需要使用NATS-server的配置信息来配置你的应用程序实例)。

你实际上不需要运行NATS服务,而是可以直接使用由NATS服务提供商(例如 Synadia 的 NGS)提供的公共NATS基础服务,将NGS视为“NATS互联网”(字面意思是“InterNATS” ) 和 Synadia 作为“InterNATS 服务提供商”。

NATS服务架构的演变

首先,你通常会在本地开发机器上运行一个nats-server实例,你的应用程序在进行应用程序开发和本地测试时连接到它。

接下来,你可能希望在虚拟私有云、区域或某个本地位置开始测试和运行这些应用程序和服务器,因此你将在你的 虚拟私有云/区域/某个位置/etc…中部署单个NATS服务器或NATS服务器集群,并且在每个位置让应用程序连接其本地 nats-server 或 nats-server 集群。然后,你可以将这些本地 nats-servers 或本地 nats-server 集群连接在一起,方法是让它们连接到“主干”集群或超级集群的叶节点,或者通过网关连接将它们直接连接在一起。

如果你有很多客户机应用程序(即应用程序部署到终端用户设备在互联网上,或例如很多物联网设备)或在很多地方的多个服务器,然后,你将通过在多个地方、多个云提供商和虚拟私有云中部署NATS服务器集群来扩展你的NATS服务基础设施,并将这些集群连接到一起,形成一个全球超级集群,然后设计一个方案,智能地将你的客户端应用程序接入到“正确且最近”的NATS服务器集群。

运行你自己的NATS服务基础架构

你可以部署和运行你自己的nats-server实例的NATS服务基础设施,该实例由服务器、服务器集群、超级集群和叶节点NATS服务器组成。

虚拟化和容器化注意事项

虽然你当然可以使用 Kubernetes、Nomad 或 Docker Swarm 等容器编排系统来部署你的 NATS 服务器基础架构,而且大多数人都这样做,但我们的建议是 NATS 服务基础架构就是这样:基础架构。这意味着它最好在与容器基础架构相同的级别上运行,而不是在其中运行。

这是因为虚拟化、容器化和重定向的每一层都可能成为问题和延迟的来源,容器编排系统提供的服务(例如,检测进程是否仍在运行并相应地重定向网络流量以提供HA的形式)已经由NATS本身实现得更好、更快。

问问你自己这个问题:如果你想要最好的性能、可靠性和最快的容错,你是使用Kubernetes/Nomad/Swarm在容器中运行你的数据库服务器,还是直接在vm中运行,或者尽可能接近裸机?

NATS服务器实际上是“消息路由器”。它们不断地通过网络获取数据并通过网络发送数据。如果启用了JetStream,它们还会不断地读写文件。它们经过高度优化,并具有许多内置的心跳、故障转移和流量控制机制。 NATS 服务器进程、网络和磁盘之间的层数越少,它的工作速度就越快,可能发生故障的东西或出现配置错误的地方就越少。并且你不依赖某些代理、端口映射或 DNS 技巧来让你的客户端应用程序连接到 NATS 服务器实例,因为你的容器编排系统会移动它们,而如果在 VM 中运行它们可以简单地重新启动,客户端将继续使用相同的已知 IP 地址或 CNAME。