akka或golang的类似替代方案支持分布式并发?

How*_*ard 27 distributed-computing go

我知道golang在内置支持方面非常擅长并发,但在我看来它们并不是分布式的,所以框架/库允许我们在分布式环境中编写生产者/消费者应用程序.

Jam*_*dge 23

如果您想在分布式程序中使用Go的通道概念,可以查看Go Circuit框架.

它提供了一个运行多进程程序的框架(可能分布在多台机器上),允许您使用通道在这些进程之间进行通信.

  • 很简单,Akka是一种受限制的有限并发模型.它很好地完成了某些事情; 特别是,具有容错能力的分布式计算是其强项.但是,CSP从根本上说是一种更通用的并发模型.使用CSP,如果你愿意,你可以做Akka所做的事情.但你没必要.使用Akka,你可以使用回调模型--Akka的actor提供了一个很好的回调封装来处理消息接收; 但就目前而言.你如何在机器人技术中进行锁步数据驱动的流量控制?Akka不能,但CSP可以. (5认同)
  • 这比尝试在Go中采用Akka更好.Akka的并发模型基于Erlang的actor模型,它通过将消息放入目标actor的单个输入队列来操作(仅).编写数据驱动的同步结构是不可能的.相反,在Go中,基本信道模型是同步/阻塞消息传递.当发送器和接收器要去耦时,很容易缓冲它.Go获得两种方法中的最佳方法,并且比Akka模型更通用. (4认同)

Cal*_*leb 10

这里不需要重新发明轮子......生产者/消费者应用程序通常使用消息队列构建.

使用这种方法,您应该尝试将问题分解为小的(理想情况下是幂等的)任务,构建可以排队这些任务的应用程序,然后使用另一个可以使这些任务出列并执行它们的工作程序.扩展很简单:只需添加更多工作人员.

那里有很多排队解决方案,对于一个用Go写的非常好的解决方案来看看NSQ.

  • Erlang不是一个"框架".它是一种功能完备的编程语言,擅长分布式计算.Elixir是一种更现代的语言变体.如果您的用例是多节点分布式计算,则两者都优于Golang.Golang强大的并发性*仅*在一个盒子上.对于跨越机器边界,使用Golang你不比使用C更好. (3认同)

Rog*_*son 6

迟了两年,但如果有人在找。 https://github.com/AsynkronIT/gam

GAM(Go演员模型)既支持Akka这样的演员,也支持Orleans这样的Virtual Grains。Protobuf代码生成支持像虚拟谷物这样的奥尔良女士,为您提供键入的消息和键入的谷物类型。参见 https://github.com/AsynkronIT/gam/blob/dev/examples/cluster/member/main.go https://github.com/AsynkronIT/gam/blob/dev/examples/cluster/shared/protos。原型

它的速度也非常快,每秒有100万以上的远程消息。


Ism*_*l H 5

Akka 基于 Actor 模型。为此,我邀请您测试一个不错的 Go 框架:https : //github.com/AsynkronIT/protoactor-go

据说它有很好的性能,因为它声称在节点之间传递:

每秒两百万条消息

虽然 Go 已经使用 CSP 实现了,但 Protoactor 补充道:

  • 解耦并发
  • 默认分发
  • 容错