我知道golang在内置支持方面非常擅长并发,但在我看来它们并不是分布式的,所以框架/库允许我们在分布式环境中编写生产者/消费者应用程序。 / p>
答案 0 :(得分:24)
如果您想在分布式程序中使用Go的通道概念,可以查看Go Circuit框架。
它提供了一个运行多进程程序的框架(可能分布在多台机器上),允许您使用通道在这些进程之间进行通信。
答案 1 :(得分:10)
这里不需要重新发明轮子......生产者/消费者应用程序通常使用消息队列构建。
使用这种方法,您应该尝试将问题分解为小的(理想情况下是幂等的)任务,构建可以排队这些任务的应用程序,然后使用另一个可以将这些任务出列并执行它们的工作程序。扩展很简单:只需添加更多工作人员。
那里有许多排队解决方案,一个用Go写的非常好的解决方案,看看NSQ。
答案 2 :(得分:6)
迟到两年但是如果有人在寻找。 https://github.com/AsynkronIT/gam
GAM(Go Actor Model)支持像演员一样的Akka,以及像Virtual Grains这样的奥尔良女士。 通过Protobuf代码生成支持像Orleans这样的Orleans女士,为您提供键入的消息和类型化的谷物类型。 看到 https://github.com/AsynkronIT/gam/blob/dev/examples/cluster/member/main.go https://github.com/AsynkronIT/gam/blob/dev/examples/cluster/shared/protos.proto
它也非常快,每秒1 mil +远程消息。
答案 3 :(得分:2)
仅为记录NATS是分布式系统的高性能解决方案。它是开源的并且在MIT许可下。 “核心NATS服务器充当了构建分布式应用程序的中枢神经系统。”它有Go,C#,Java,Ruby,Python,Node.js的官方clients以及社区提供的更多内容。
答案 4 :(得分:1)
Akka基于Actor模型。为此,我邀请您进行测试:https://github.com/AsynkronIT/protoactor-go
据称它具有很好的性能,因为它声称在节点之间传递:
每秒200万条消息
虽然Go已经使用CSP实现,但Protoactor补充道: