将“存在”扩展到多个服务器
如何扩展到多个服务器的存在?
我的意思是接近用户在线/连接状态的实时数据。
我最初的想法
服务器
挑战:如何知道其中一台服务器是否崩溃? 它可能没有机会“注销”。
- 如果websocket服务器联机,用TTL将服务器主机写入Redis
- websocket服务器每隔X秒更新TTL(心跳)以防止删除
- 如果服务器脱机或崩溃,TTL将从Redis中删除该服务器
现在我知道可靠和接近实时(取决于TTL和心跳间隔我使用)通过做一个简单的查询哪些服务器在线。 我试图想到更简单甚至更“实时”的事情,但我不知道其他防弹方法是否知道其中一台服务器是否崩溃。
用户
挑战:如何知道用户的在线状态是否有效:服务器没有崩溃等?
- 如果用户连接,则将用户在线状态和服务器主机写入Redis
- 如果用户断开连接,请将Redis中的用户状态更新为脱机并删除主机
- 如果我想知道用户是否在线:
- 从Redis查询用户对象
- 如果用户状态在线 ,则从用户对象获取服务器主机
- 从Redis查询服务器主机
- 如果服务器主机存在,服务器在线 – 用户在线状态有效
我没有使用TTL的用户,因为这将是很多Redis的开销和用户对象包含元数据我不想删除,例如lastTimeOnline
。
我现在已经使其可扩展,但我需要做出几个请求,以了解用户状态,我也需要担心Redis缩放。 有没有一种方法可以在没有我刚制作的所有开销的情况下进行扩展?