问题描述
Akka Cluster 有哪些替代产品?目前看来,要实现分布式应用(意味着能够维护集群信息,从而能够跨节点分配工作负载以有效利用资源),akka-cluster 是唯一的选择。我看到有像 Erlang 这样的 Akka 替代品,但不是 akka-cluster。
有人知道有哪些其他技术提供了在集群节点上分配工作负载的方法吗?
解决方法
在 JVM 上,我认为您可以将分布式计算大致分为几类。
-
如果您想要分布式状态,Hazelcast(一种内存网格)之类的东西会起作用,但您需要自己组织使用/处理该数据的任务。
-
如果你想要分布式任务执行,Flink 和 Spark 可以做到。协调状态更改可能很困难,您可能必须将输入扭曲到它们的基本抽象(RDD 和流)中。
-
在复制日志(如 Kafka 和 Pulsar 中)之上的 Pubsub 与 Akka 一样,明确基于消息(实际上,分布式计算中的任何事情都基于消息:在某些时候,您有数据包通过线),但您可以非常快速地建立一堆服务和主题。
据我所知,Akka 是唯一(或至少是最成熟的)涵盖状态分布和任务分布的选项,而且它的静态化程度较低(在可扩展性方面:我特别考虑 Kafka 的排序如何保证随着规模的扩大而变得不那么有保证)。与通过 Kafka 交互的服务纠缠在一起相比,在 IDE 中进行交互的参与者纠缠在一起(尤其是在优先使用类型化 API 的情况下)可能更容易在 IDE 中进行跟踪。
补充一点意见,虽然根据我将 Kafka 用作哑管道的经验,它坚如磐石,但我不喜欢我在其主要供应商中观察到的在该领域过度承诺的趋势分布式计算,而我发现 Akka 的主要供应商非常坦率地认为没有灵丹妙药。
,您可以争辩说,在某些用例中,Apache Kafka 是 Akka Cluster 的替代品。
Kafka 本身作为一组代理运行。您的 Kafka 主题已分区并分布在该集群中。您可以与多个消费者一起阅读您的主题,这将成为您分配计算的工具。