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

时间:2017-10-23 08:31:50

标签: node.js websocket redis

如何将状态扩展到多个服务器?

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

我最初的想法

服务器

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

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

现在我通过简单的查询可靠且近乎实时地知道(取决于我使用的TTL和心跳间隔)哪些服务器在线。我试着想一些更简单甚至“更实时”的东西,但我不知道有任何其他防弹方法可以知道其中一台服务器是否已经崩溃。

用户

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

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

我没有为用户使用TTL,因为这会给Redis带来很多开销,而用户对象包含我不想删除的元数据,例如lastTimeOnline

我现在已经使它可扩展,但我需要做几个请求来了解用户状态,我还需要担心Redis扩展。有没有办法在没有我刚制作的所有开销的情况下扩展它?

0 个答案:

没有答案