[erlang-questions] Help creating distributed server cache
Thu Dec 6 22:43:22 CET 2012
I'm currently developing a gaming server which stores player information
that can be accessed from any of our games via a REST API.
So far I've thought of two ways to structure and cache player data:
1. When a client requests data on a player, spawn 1 player process. This
process handles: all subsequent requests from clients for this player,
retrieving the player data from the DB when created and periodically
updating the DB with any new data from clients. If the player is not
requested by another client within... say 30 minutes, the player process
2. Just keep previously requested data in a distributed LRU cache (e.g.,
memcached, redis, mnesia)
Out of the two, I prefer #1 since it would allow me to separate the
functionality of different "data types" (e.g., player data, game data).
There are just 2 problems with doing it this way that I'd like your
thoughts and help with:
I. I would have to implement some sort of "LRU process cache" so I could
terminate processes to free memory for new ones.
II. If a load balancer connects a client to node #1, but the process for
the requested player is on node #2, how can the player process on node
#2 send the data to the socket opened for the client on node #1. Is it
possible to somehow send an socket across nodes? The reason I ask, is
that I'd like to prevent sending big messages across nodes.
Thanks for the help!
More information about the erlang-questions