Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment concevoir redis pub/sub pour un système de messagerie instantanée ?

Comme toujours, vous devez comparer des choses comme celle-ci pour votre propre cas d'utilisation - il n'est pas possible de donner des conseils généraux. Vous devrez peut-être augmenter le nombre maximal de fichiers ouverts sur votre système, soit à l'échelle du système, soit pour l'utilisateur redis. Cela s'applique également à l'utilisateur exécutant votre serveur Web, bien sûr.

Cela dit, vous devez vous assurer d'écouter socket.on('disconnect') et quit() l'abonné redis lorsqu'un utilisateur part. Vous pourriez également être intéressé de savoir que socket.io a un backend redis, qui exploite redis pub/sub, et il a également le concept de salles, donc vous pourriez vous épargner des ennuis en l'utilisant puisque vous dépendez déjà de socket .io.

Modifier : Après une vérification rapide, je reçois ce message d'erreur de Redis après 991 abonnés :

Ready check failed: Error: Error: ERR max number of clients reached

Voici le fichier par défaut redis.conf :

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able ot configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
#
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 10000

Mon système (Ubuntu 11.11) est livré avec un nofile par défaut limite de 1024, donc mon test rapide devrait échouer après 992 clients connectés, ce qui semble à peu près juste après le test (j'ai aussi un client pour l'éditeur). Ma suggestion pour vous est d'inspecter votre nofile limit (sur mon système, c'est dans /etc/security/limits.{conf,d/*} et vos redis maxclients réglage, puis benchmark, benchmark, benchmark !