在不同主机上的网络服务器之间共享对象的最佳方式是什么

Whats the best way to share objects between webservers on different hosts

TLDR; 我想知道在 n 台机器上的 n 台网络服务器之间可靠地共享对象或其他数据的最佳方法是什么?

我看过 redis 之类的东西,但似乎这不是我在这里真正要找的东西。我现在在想 IPC over remote / RPC 之类的东西可能更合适?有没有更好的方法来做到这一点,因为它会在 30 秒的时间间隔内至少被调用 10 次,随着用户数量 运行ning 服务器的增长,它会呈指数增长。

示例和当前用例:

我 运行 一款多人游戏 mod 一款游戏,它的流量相当可观,我们开始注意到有时请求会被丢弃的情况。后端网络服务器是用 NodeJS 编写的,并且在几个地方也使用了 express。我们正在重组系统,现在我们开始重组系统的一部分,该部分处理来自 public 主机成员的每个服务器的心跳。然后将此信息共享给玩家,以便他们决定加入哪个服务器。

根据我自己的研究,我希望在多台不同的机器上托管该服务以实现冗余。然后这些机器通过 vlan / vswitch 链接,这样它们就有了一种安全的方法来相互通信。数据库系统已经设置为以这种方式进行复制,但是我看不到一种有利于性能的方式来处理对象共享,这些对象包含有关与每个网络主机通信的服务器的信息。

如果它有助于系统像这样工作:

Users server -> my load balancer -> webhost (backend).

Player -> my load balancer -> webhost (backend) returns info on all currently online servers.

在上面的示例中,当前使用的是处理所需请求和进程的单实例网络服务器。

社区提出答案时的一个想法:考虑阅读有关 Apache Thrift 的内容。它不像IPC,而更像RPC。如果你的服务器架构,或不同的组件或“后端网络”是“星型”......有一个“主”我应该考虑这种可能性。

如果你的后端架构不是这样的......而是一组“独立”的实体,我想到用一些“数据总线”来解决功能,比如私有 MQTT 代理和一组成员,为网络的其余部分订阅或发布数据。在我看来,对象的最佳序列化策略是 Google Protobuf。

Mqtt与nodeJS的集成非常简单,如果包的重量不是太大,你可以接受一些延迟,我真的建议你用Mqtt做一些测试publish/subscription 服务质量=2。替换您正在使用的底层通信库并不费力。

说到这里,好像还有一个解决方案:Kafka,这个好像挺有意思的(我还真不知道)。

您的选择将取决于您的数据的性质,主要是:数据包的重量、每个用户的频率,以及您愿意为最坏情况接受的延迟。