【发布时间】:2014-02-24 23:30:09
【问题描述】:
我知道 golang 的内置支持非常擅长并发,但在我看来它们不是分布式的,所以框架/库允许我们在分布式环境中编写生产者/消费者应用程序。
【问题讨论】:
我知道 golang 的内置支持非常擅长并发,但在我看来它们不是分布式的,所以框架/库允许我们在分布式环境中编写生产者/消费者应用程序。
【问题讨论】:
如果您想在分布式程序中使用 Go 的通道概念,不妨查看 Go Circuit 框架。
它为运行多进程程序(可能分布在多台机器上)提供了一个框架,允许您使用通道在这些进程之间进行通信。
【讨论】:
这里不需要重新发明轮子...生产者/消费者应用程序通常使用消息队列构建。
使用这种方法,您应该尝试将问题分解为小的(理想情况下是幂等的)任务,构建一个可以将这些任务排入队列的应用程序,然后让另一个工作应用程序可以将这些任务出列并执行它们。扩展很容易:只需添加更多工作人员。
那里有很多排队解决方案,对于用 Go 编写的非常好的解决方案,请查看 NSQ。
【讨论】:
晚了两年,但如果其他人正在寻找的话。 https://github.com/AsynkronIT/gam
GAM(Go Actor Model)既支持 Akka 之类的演员,也支持 Ms Orleans 之类的 Virtual Grains。 通过 Protobuf 代码生成支持像 Virtual Grains 这样的 Ms 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
它也非常快,每秒 100 万条以上的远程消息。
【讨论】:
Akka 基于 Actor 模型。为此,我邀请您测试一个不错的 Go 框架:https://github.com/AsynkronIT/protoactor-go
据说性能很好,因为它声称在节点之间传递:
每秒 200 万条消息
虽然 Go 已经使用 CSP 实现,但 Protoactor 补充说:
【讨论】: