67 votes

Communication inter-processus

Je suis en train d'écrire une charge équilibrée du système de serveur en aller.

L'équilibrage de la charge serveur de communiquer avec plusieurs serveurs d'application et de traiter les demandes. Ces serveurs peuvent à la fois être en cours d'exécution sur le même ordinateur ou sur le réseau.

J'ai déjà compris la mise en réseau, mais maintenant j'ai besoin de trouver un moyen optimal pour l'équilibrage de charge pour communiquer avec une application serveur local. À l'aide de localhost-mise en réseau semble loin d'être optimale.

J'essaie de partager de la mémoire via l' shmget et shmat des appels-système, mais n'ai pas trouvé d'exemples de travail et l' syscall emballage est également complètement sans-papiers.

Quelqu'un peut-il me fournir un exemple de l'utilisation de ces appels ou une alternative réaliste qui fonctionne sur Aller pour faire de l'IPC?

77voto

Krzysztof Kowalczyk Points 1995

Aller a un RPC intégré (système dehttp://golang.org/pkg/rpc/) pour faciliter la communication entre Go processus. Voir aussi http://wh3rd.net/practical-go/#(41) pour un exemple.

Une autre option est d'envoyer gob-données codées (http://blog.golang.org/2011/03/gobs-of-data.html) via une connexion réseau.

Vous ne devriez pas faire l'impasse sur le réseau local sans analyse comparative. Par exemple, google Chrome utilise des canaux nommés pour l'IPC et du transfert d'un lot de données (par exemple de rendu des images) entre les processus:

Notre principal de communication inter-processus primitif est le canal nommé. Sur Linux et OS X, nous utilisons un par socketpair()

-- http://www.chromium.org/developers/design-documents/inter-process-communication

Si les tubes nommés sont assez bon pour cela, ils sont probablement assez bon pour votre cas d'utilisation. De Plus, si vous écrivez les choses bien, vous pouvez commencer à utiliser les canaux nommés (parce que c'est facile), et puis de passer à la mémoire partagée si vous trouvez la performance des canaux nommés, pas assez bon (mémoire partagée n'est pas facile quelle que soit la langue).

19voto

gsteff Points 1674

Je vous suggère de regarder 0mq. C'est une bibliothèque de messagerie conçu pour être facile et rapide de savoir si vous l'utiliser sur le réseau, pour les locaux de la CIB, ou même de la communication inter-thread. Il gère beaucoup de passages techniques de la CIB, comme les expéditeurs dos de l'envoi des demandes si le récepteur devient surchargé de messages, de cadrage, et de le reconnecter après l'échec. Et il a des bindings pour BEAUCOUP de langues, y compris Go, ce qui la rend utile pour le câblage des systèmes écrits en différentes langues.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X