【问题标题】:akka or similar alternative for golang to support distributed concurrency?akka 或类似的 golang 替代方案来支持分布式并发?
【发布时间】:2014-02-24 23:30:09
【问题描述】:

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

【问题讨论】:

    标签: go distributed-computing


    【解决方案1】:

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

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

    【讨论】:

    • 这比尝试在 Go 中采用 Akka 更好。 Akka 的并发模型基于 Erlang 的 Actor 模型,它(仅)通过将消息放入目标 Actor 的单个输入队列来操作。不可能编写数据驱动的同步结构。相反,在 Go 中,基本的通道模型是同步/阻塞消息传递。当发送者和接收者要解耦时,很容易缓冲这个。 Go 充分利用了这两种方法,并且比 Akka 模型更通用。
    • 嗨,您能详细解释一下 Akka 并发模型与 Go 的基于通道的方法的优缺点吗?或者我可以找到这些信息的任何来源?
    • @Rick-777 - 您能否详细说明 Akka 中无法使用数据驱动的同步结构?在 Akka 中,您可以进行同步,尽管我们的想法是您尝试尽可能少地进行同步。
    • 很简单,Akka 是一个受限的、受限的并发模型。它非常很好地实现了某些事情;尤其是具有容错能力的分布式计算是它的强项。然而,CSP从根本上是一种更通用的并发模型。使用 CSP,您可以根据需要做 Akka 所做的事情。但你不必这样做。使用 Akka,您将绑定到回调模型 - Akka 的参与者提供了一个很好的回调封装来处理消息接收;但仅此而已。你如何在机器人技术中进行锁步数据驱动的流量控制? Akka 不能,但 CSP 可以。
    【解决方案2】:

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

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

    那里有很多排队解决方案,对于用 Go 编写的非常好的解决方案,请查看 NSQ

    【讨论】:

    • 或者让你自己免于头疼,使用本应以这种方式使用的 Erlang 或 Elixir,并为您提供更多功能,包括监督。
    • Go 也被设计用于开发分布式系统。分布式系统开发并不容易,没有任何框架能让它变得容易。
    • Erlang 不是一个“框架”。它是一种功能完备的编程语言,擅长分布式计算。 Elixir 是该语言的一种更现代的变体。如果您的用例是多节点分布式计算,两者都远优于 Golang。 Golang only 在单个盒子上的并发性很强。对于跨越机器边界,使用 Golang 并不比使用 C 更好。
    【解决方案3】:

    晚了两年,但如果其他人正在寻找的话。 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 万条以上的远程消息。

    【讨论】:

      【解决方案4】:

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

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

      每秒 200 万条消息

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

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

      【讨论】:

        【解决方案5】:

        仅作记录NATS 是分布式系统的高性能解决方案。它是开源的,在MIT 许可下。 “核心 NATS 服务器充当构建分布式应用程序的中枢神经系统。”它有官方的clients 用于 Go、C#、Java、Ruby、Python、Node.js 以及社区提供的更多内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-17
          • 2019-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-20
          • 2017-10-15
          相关资源
          最近更新 更多