将“存在”扩展到多个服务器

如何扩展到多个服务器的存在?

我的意思是接近用户在线/连接状态的实时数据。


我最初的想法

服务器

挑战:如何知道其中一台服务器是否崩溃? 它可能没有机会“注销”。

  • 如果websocket服务器联机,用TTL将服务器主机写入Redis
  • websocket服务器每隔X秒更新TTL(心跳)以防止删除
  • 如果服务器脱机或崩溃,TTL将从Redis中删除该服务器

现在我知道可靠和接近实时(取决于TTL和心跳间隔我使用)通过做一个简单的查询哪些服务器在线。 我试图想到更简单甚至更“实时”的事情,但我不知道其他防弹方法是否知道其中一台服务器是否崩溃。

用户

挑战:如何知道用户的在线状态是否有效:服务器没有崩溃等?

  • 如果用户连接,则将用户在线状态和服务器主机写入Redis
  • 如果用户断开连接,请将Redis中的用户状态更新为脱机并删除主机
  • 如果我想知道用户是否在线:
    1. 从Redis查询用户对象
    2. 如果用户状态在线 ,则从用户对象获取服务器主机
    3. 从Redis查询服务器主机
    4. 如果服务器主机存在,服务器在线 – 用户在线状态有效

我没有使用TTL的用户,因为这将是很多Redis的开销和用户对象包含元数据我不想删除,例如lastTimeOnline


我现在已经使其可扩展,但我需要做出几个请求,以了解用户状态,我也需要担心Redis缩放。 有没有一种方法可以在没有我刚制作的所有开销的情况下进行扩展?