负载平衡 - 当节点不需要相互了解时,我应该使用 Oort 还是使用 CometD 编写自己的转发?



我的应用程序将按如下方式工作:

我将有一堆副本服务器和一个负载均衡器。数据更新将在彗星D之外进行管理。编辑:如有必要,我仍然打算通知每个CometD服务器这些更新,以便他们可以响应客户端。

客户端仅订阅这些更新(即只读),因此 CometD 服务器节点不需要知道彼此的行为。

我是否正确认为我可以在每个客户端连接的负载均衡器上拥有服务器端"客户端"实例,其中每个实例侦听与其各自客户端相同的通道并将任何消息转发回它?如果是这样,这种方法有什么缺点,而不是使用 Oort?

阅读有关 Oort 的文档,似乎节点彼此"了解",而我不需要。就我而言,完全避免使用奥尔特会更好吗?我担心的是,如果我最终添加了许多节点,它们相互通信的事实可能意味着不必要的处理?

问题描述指定在 CometD 外部管理数据更新,但没有详细说明如何通知 CometD 服务器这些数据更新。

两种常见的解决方案是 A) 通知每个 CometD 服务器或 B) 使用 Oort。

在解决方案 A) 中,您有一个触发数据更新的事件,并且某些外部应用程序对数据库执行数据更新。此时,外部应用程序必须通知 CometD 服务器有数据更新。如果外部应用程序在 JVM 上运行,它可以使用 CometD Java 客户机向每个 CometD 服务器发送消息,通知它们数据更新;反过来,CometD 服务器将通知远程客户端。

在解决方案 B) 中,外部应用程序必须仅通知一个 CometD 服务器存在数据更新;Oort 群集将完成其余工作,在群集中广播该消息,然后广播到远程客户端。

解决方案 A) 不需要 Oort 群集,但要求外部应用程序准确了解所有节点,并向每个节点发送消息。

解决方案 B) 使用 Oort,因此外部应用程序只需要知道一个 Oort 节点。

Oort需要一些额外的处理,因为节点是互连的,但根据具体情况,这种处理可能可以忽略不计,或者"手动"通知每个CometD服务器(如解决方案A)的复杂性可能大于运行Oort。

我不明白您所说的"负载均衡器上的服务器端客户端实例"是什么意思。通常,负载均衡器不运行 JVM,因此无法在其上运行 CometD 客户端,因此这句话听起来不对。

除了 CometD 文档,您还可以查看这些幻灯片。

最新更新