memorystore and instances in different regions (GCP)

4/25/2020

I'm building a chat app in React Native, and the backend is in Node.JS I'm using GKE to deploy the server code.

I'm using a cloud sql postgresql, connecting with internal IP. This works. I also use a memorystore (redis). Here is the problem.

For autoscaling, I'm planning to get multiple GKE clusters in different regions (for now, europe-west1 and us-central1). I have configured a load balancer with one backend containing all instance groups. I don't know of this is the correct/ideal solution, but it works. The problem lies in the fact that you can only connect to a redis database from an instance within the same region. If i use use-central1 as the region for my memorystore instance, I cannot connect to it through the vm's in the eu-cluster I created.

What is the best solution to overcome this problem? I've created an extra VM in the same region as the redis instance with haproxy configured to use as a reverse proxy to the memorystore, and this way, I can connect to the redis database through all instances, no matter what region they're in. But I don't know if this is the correct solution?

EDIT:

I'm using websockets (socket.io) for chat messages. Because I'm planning to use multiple servers, I need a centralized database to store (references to) the socket ID's, so users can send messages to users that are connected to other servers.

I'm thinking redis is the correct solution for a number of reasons:

  • I can use socket.io-redis to store the socket ID's on redis
  • fast response time
  • I don't know about the size of the data stored, but it's definitely not Mb's

I'm using a postgresql database to store other information (like username, passwords), but it seems to me that redis is a far better solution for real time applications.

-- yesterday
google-cloud-memorystore
google-cloud-platform
google-kubernetes-engine

0 Answers