我在 React Native 中构建一个聊天应用程序,后端在 Node.JS 中我正在使用 GKE 来部署服务器代码。
我正在使用云 sql postgresql,与内部 IP 连接。这行得通。我还使用内存存储(redis)。这是问题所在。
对于自动缩放,我计划在不同区域(目前为 europe-west1 和 us-central1)建立多个 GKE 集群。我已经配置了一个负载均衡器,其中一个后端包含所有实例组。我不知道这是正确/理想的解决方案,但它有效。问题在于您只能从同一区域内的实例连接到 redis 数据库。如果我使用 use-central1 作为我的 memorystore 实例的区域,我无法通过我创建的 eu-cluster 中的 vm 连接到它。
克服这个问题的最佳解决方案是什么?我在与 redis 实例相同的区域中创建了一个额外的 VM,并将 haproxy 配置为用作 memorystore 的反向代理,这样,我可以通过所有实例连接到 redis 数据库,无论它们在哪个区域在。但我不知道这是否是正确的解决方案?
编辑:
我正在使用 websockets (socket.io) 来发送聊天消息。因为我打算使用多台服务器,所以我需要一个集中的数据库来存储(引用)套接字 ID,以便用户可以向连接到其他服务器的用户发送消息。
我认为 redis 是正确的解决方案,原因有很多:
- 我可以使用 socket.io-redis 将套接字 ID 存储在 redis 上
- 快速响应时间
- 我不知道存储的数据大小,但绝对不是Mb的
我正在使用 postgresql 数据库来存储其他信息(如用户名、密码),但在我看来,redis 对于实时应用程序来说是一个更好的解决方案。