2017-04-11 1 views
0

J'ai lu mes documents, la plupart des exemples sont pour les cas d'utilisation de base.sujets dynamiques avec pub-sub avec zmq, cela va-t-il bien?

Où simplement un processus publie un événement X et un autre s'abonne à l'événement X.

Mais dans mes applications X est plutôt variable. alors disons que j'ai X signifie mon utilisateur. Donc, je peux faire publier à partir d'un événement serveur comme user-ID signifie que si j'ai 1000s d'utilisateur connecté au serveur, ce sera OK pour publier et s'abonner à tant de sujets dynamiques, puis 20 autres serveurs s'abonnent à cette 1000s sujets sur ce serveur.

Voyons l'exemple.

J'ai 10 serveurs. chaque serveur avec 1000 utilisateurs connectés. Donc total 10k utilisateurs. J'ai besoin d'envoyer des données X de chaque utilisateur à un autre utilisateur.

donc je l'ai fait.

serveur X publient user-ID des données (1 Publish utilisateur connecté, 1K publie)

serveur Y abonner user-ID données (10k abonnez-vous demande à envoyer chaque serveur)

Quelle devrait être de façon optimale de pub sous avec des sujets dynamiques, donc moins de bande passante utilisée entre les serveurs?

:: Avis

ID utilisateur

est juste un exemple où ID est le numéro dynamique, et publier des données en temps réel qui ne peut être stockée nulle part.

Répondre

1

La correspondance d'abonnement ZeroMQ est implémentée dans le socket PUB avec un préfixe trie. C'est une structure de données très efficace, et je m'attendrais à ce que les abonnements 10K et 10K msg/s ne posent aucun problème.

La socket PUB envoie uniquement des messages pour les abonnements correspondants (il n'y a donc pas de "gaspillage"). Si un message ne correspond à aucun abonnement, le socket PUB le supprimera. Les messages correspondants sont uniquement envoyés aux sockets SUB qui s'y sont abonnés.

Lorsque vous ajoutez ou supprimez un abonnement, la prise SUB envoie un message à sa ou ses prises PUB connectées. Chaque socket PUB mettra alors à jour son sujet trie.

Je pense que 10k subs et 10k msgs/s ne posent aucun problème, mais la meilleure chose à faire serait d'écrire du code de test et de l'essayer. Une bonne chose à propos de ZeroMQ est que ce n'est pas beaucoup de travail pour tester différentes architectures.

+0

Mais quelqu'un a dit que seule SUB socket stocker la liste de l'abonnement et PUB simplement messaegs de multidiffusion tous les SUB même ils ne sont pas abonnés ... et SUB filtre tous les messages ... –

+0

Je pense que cela a fonctionné comme ça dans le passé. Mais ma compréhension est les versions récentes de ZeroMQ gérer les abonnements dans le socket PUB. – colini

1

Pour autant que je sais que dans l'éditeur API pyzmq peut envoyer des messages à tout sujet

socket.send("%d %d" % (topic, messagedata)) 

et abonnés définir un filtre sur ces sujets pour le sujet de leurs intérêts avec setsockopt

topicfilter = "10001" 
socket.setsockopt(zmq.SUBSCRIBE, topicfilter) 

Je pense que vous pouvez pleinement mettre en œuvre votre plan.

+0

Ce n'est pas ma question .. ma question est un peu sur le flux ou la logique optimale ... cela va-t-il être bon d'avoir 10k appel de publication et 10k appels d'abonnement? –

+0

@dev.mraj 10k publier des appels est ok, mais qu'entendez-vous par 10k appels d'abonnement? 10k appels de la méthode setsockopt ou 10k clients? cause setsockopt est cher. – DontPanic

+0

J'ai eu ce dont j'ai besoin merci bro ..... –