web-dev-qa-db-fra.com

akka ou une alternative similaire pour golang pour prendre en charge la simultanéité distribuée?

Je sais que golang est très bon en concurrence avec son support intégré, mais il me semble qu'ils ne sont pas distribués, alors quel serait le framework/bibliothèque nous permettant d'écrire des applications producteurs/consommateurs, dans un environnement distribué.

28
Howard

Si vous souhaitez utiliser les concepts de canal de Go dans un programme distribué, consultez peut-être le cadre Go Circuit .

Il fournit un cadre pour exécuter des programmes multi-processus (éventuellement répartis sur plusieurs machines), vous permettant d'utiliser des canaux pour communiquer entre ces processus.

24
James Henstridge

Pas besoin de réinventer la roue ici ... les applications producteurs/consommateurs sont généralement construites à l'aide d'une file d'attente de messages.

Avec cette approche, vous devez essayer de diviser votre problème en petites tâches (et idéalement idempotentes), créer une application qui peut mettre ces tâches en file d'attente, puis avoir une autre application de travail qui peut retirer ces tâches et les exécuter. La mise à l'échelle est facile: ajoutez simplement plus de travailleurs.

Il existe de nombreuses solutions de mise en file d'attente, pour une très bonne solution écrite en Go, jetez un œil à NSQ .

10
Caleb

Deux ans de retard mais si quelqu'un d'autre regarde. https://github.com/AsynkronIT/gam

GAM (Go Actor Model) prend en charge à la fois les acteurs comme Akka et Mme Orleans comme Virtual Grains. Les Ms Orleans comme Virtual Grains sont pris en charge via la génération de code Protobuf pour vous donner des messages et des types de grains typés. Voir https://github.com/AsynkronIT/gam/blob/dev/examples/cluster/member/main.gohttps://github.com/AsynkronIT/gam/blob /dev/examples/cluster/shared/protos.proto

Il est également extrêmement rapide, 1 mil + messages distants par seconde.

6
Roger Johansson

Pour mémoire NATS est une solution hautes performances pour les systèmes distribués. C'est open source et sous MIT licence. "Le cœur du serveur NATS agit comme un système nerveux central pour la création d'applications distribuées." et il a officiel clients pour Go, C #, Java, Ruby, Python, Node.js et bien plus encore fourni par la communauté.

2
Kaveh Shahbazian

Akka est basé sur le modèle d'acteur. Pour cela, il existe un framework Nice Go que je vous invite à tester: https://github.com/AsynkronIT/protoactor-go

On dit qu'il a de grandes performances car il prétend passer entre les nœuds:

deux millions de messages par seconde

Alors que Go implémente déjà CSP, Protoactor ajoute:

  • Accès simultané découplé
  • Distribué par défaut
  • Tolérance aux pannes
2
Ismail H