v2 路由

在 NATS v2.10.0 中引入

连接池

在 v2.10.0 版本发布之前,集群中的两个服务器只有一个连接来传输所有账户的所有消息,当数据传输不够快时,这可能导致速度减慢和内存使用增加。

v2.10.0 版本引入了在两个服务器之间建立多个路由连接的能力。默认情况下,无需任何配置更改,将两个 v2.10.0+ 服务器集群在一起将创建 3 个路由连接。当然,这可以通过显式配置池大小来修改到不同的值。

cluster { pool_size: 3 }

池大小要求

每个连接将处理特定的账户子集,并且账户到池中特定连接索引的分配在集群中的任何服务器中都是相同的。要求集群中的每个服务器具有相同的池大小值,否则,集群将无法建立,并出现类似以下的错误:

[ERR] 127.0.0.1:6222 - rid:6 - Mismatch route pool size: 3 vs 4

应对连接丢失

如果池中的给定连接断开,自动重新连接会照常发生。但是,在断开连接期间,由该连接处理的账户的流量将停止(即,流量不会通过其他连接路由),这与单个路由连接时的情况相同。

配置重载

请注意,虽然集群的 pool_size 配置参数可以通过配置重载更改,但服务器之间的连接可能会断开,因为服务器之间会存在不匹配。但是,可以通过在所有服务器上设置相同的值来进行滚动重载。客户端和其他连接(包括专用账户路由 - 参见下一节)将不会关闭。

监控

启用监控后,您会看到 /routez 页面现在有比以前更多的连接,这是正常的。

禁用连接池

可以通过将 pool_size 配置参数设置为 -1 来禁用路由连接池。在这种情况下,服务器将表现为 v2.10.0 之前的服务器,并在其对等服务器之间创建单个路由连接。

请注意,在该模式下,不能定义 accounts 列表(参见下面的"账户固定")。

账户固定

除了连接池之外,v2.10.0 版本还引入了配置将具有专用路由连接的账户列表的能力。

cluster { accounts: [acc1, acc2] }

请注意,默认情况下,服务器将为系统账户创建专用路由(不需要特定配置)。

拥有专用路由可以提高性能并减少延迟,但另一个好处是,由于路由专用于一个账户,账户名称不需要添加到消息路由协议中。由于账户名称可能很长,这减少了在所有其他情况下需要传输的字节数。

应对连接丢失

如果账户路由连接断开,自动重新连接会照常发生。但是,在断开连接期间,该账户的流量将停止。

配置重载

accounts 列表可以被修改,并且可以向服务器发送配置信号。所有服务器都需要具有相同的列表,但是,可以执行滚动配置重载。

例如,将账户添加到服务器 A 的列表并发出配置重载不会产生错误,即使集群中的其他服务器尚未在其列表中拥有该账户。专用连接尚未建立,但当前处理该账户的池连接中的该账户流量将停止。当配置重载发生在其他服务器上时,将建立专用连接,并且该账户的流量将恢复。

当从列表中删除账户并发出配置重载时,该账户的连接将关闭,并且该账户的流量将停止。仍然配置了该账户专用连接的其他服务器将无法重新连接。当它们也被发送配置重载(使用更新的 accounts 配置)时,账户流量现在将由池中的连接处理。

请注意,accounts 列表更改的配置重载不会影响现有的池连接,因此不应影响其他账户的流量。

监控

启用监控后,路由连接的信息现在有一个名为 account 的新字段,显示此路由所属的账户名称。

禁用连接池

如连接池部分所述,如果 pool_size 设置为 -1,则不能配置 accounts 列表,也不会使用。

连接到旧服务器

虽然建议同一集群中的所有服务器具有相同的版本号,但 v2.10.0 服务器可以连接到旧服务器,并在这种情况下创建到该服务器的单个路由。这允许将 v2.10.0 版本轻松部署到运行旧版本的现有集群中。

压缩

v2.10.0 版本引入了在具有路由连接的服务器之间配置压缩的能力。当前使用的压缩算法是 S2,Snappy 的扩展。默认情况下,路由不使用压缩,需要显式启用。

cluster { compression: { mode: accept } }

压缩模式

有几种压缩模式,并且路由服务器之间不需要具有相同的模式。

  • off - 显式禁用服务器与对等服务器之间任何路由的压缩。
  • accept(默认)- 不启动压缩,但将接受其连接的对等服务器的压缩模式。
  • s2_fast - 应用压缩,但优化速度而非压缩比。
  • s2_better - 应用压缩,提供速度和压缩比的平衡。
  • s2_best - 应用压缩并优化压缩比而非速度。
  • s2_auto - 根据服务器与对等服务器之间测量的往返时间(RTT)选择适当的 s2_* 模式。参见下面的 rtt_thresholds

往返时间阈值

当使用 s2_auto 压缩时,它依赖于 rtt_thresholds 选项,这是一个包含三个延迟阈值的列表,用于指示增加或减少压缩模式。

cluster { compression: { mode: s2_auto rtt_thresholds: [10ms, 50ms, 100ms] } }

默认的 rtt_thresholds 值是 [10ms, 50ms, 100ms]。读取此值的方式是,如果 RTT 低于 10ms,则不应用压缩。一旦达到 10ms,应用 s2_fast,依此类推,剩余两个阈值分别用于 s2_betters2_best

配置重载

compression 配置可以通过配置重载更改。如果值从 off 更改为其他任何值,则连接将关闭并重新创建,与将压缩模式设置为某个值并通过设置为 off 来禁用的方式相同。

对于所有其他压缩模式,模式会动态更改,无需关闭路由连接。

监控

启用监控后,路由连接的信息现在有一个名为 compression 的新字段,显示当前的压缩模式。它可以是 off 或上面描述的任何其他模式。请注意,s2_auto 不会显示,而是显示 当前模式,例如 s2_bests2_uncompressed

如果连接到旧服务器,compression 字段将显示 not supported

连接到旧服务器

可以将配置了压缩模式的 v2.10.0+ 服务器连接到不支持压缩的旧服务器。连接将简单地不使用压缩。