简单节点发现方法

vof42yt1  于 2021-06-21  发布在  Storm
关注(0)|答案(3)|浏览(301)

我开始在一个系统上工作,该系统将需要发现集群中的节点并发送这些节点作业。我知道有无数的系统可以解决这个问题,但我不清楚每一个系统的复杂性,以及哪一个最适合我的具体需求。
我们的要求是一个应用程序应该能够发出工作要求。每个请求将指定要处理的多个数据段。集群中的节点应该获得这些作业请求,并判断所请求的数据段是否“方便”。应用程序将需要跟踪某个节点正在处理哪些数据段,如果有需要强制某些节点处理的数据段(所有节点都可以访问所有数据,但它们应该更愿意处理它们已经缓存的数据段),则可能会发送进一步的请求。
这是一个非常典型的map/reduce问题,但是我们不想使用标准的hadoop解决方案,因为我们试图避免将初步结果写入文件的开销。这更像是一个流问题,我们希望节点对它们读取的数据执行过滤,然后通过网络套接字将其发送到将合并所有节点的结果的应用程序。
我快速浏览了akka、apachespark(流媒体)、storm和简单的upnp,我不确定哪一个最适合我的需要。有一件事至少对spark不利,那就是它似乎需要在网络上设置zookeeper,这是一个我们希望能够避免的复杂问题。
有没有一个简单的库可以执行类似于“通过网络多播自动发现节点”的操作,然后允许您简单地来回发送消息来协商哪个节点将处理哪个数据段?阿克卡能帮我吗?如何在集群中添加/发现节点?同样,我们希望将配置开销保持在最低限度,这就是upnp/ssdp看起来不错的原因。
对于如何使用上述解决方案或其他库或解决方案的任何建议,我们将不胜感激。

bmvo0sr5

bmvo0sr51#

请参阅使用akka 2跨节点平衡工作负载。
这篇文章描述了一个使用akka的工作分配算法。该算法不使用组播来发现worker。有一个众所周知的主地址和工人注册主。除此之外,尽管它很符合你的要求。
它的另一个变体在akka工作模式中描述。
我已经在很多项目中使用了这种模式-它工作得很好。

zpqajqem

zpqajqem2#

您可以使用akka集群:http://doc.akka.io/docs/akka/current/java/cluster-usage.html. 但是,它不使用多播,而是使用gossip协议来处理节点向上/向下的消息。您可以使用集群感知路由器(参见akka集群文档和http://doc.akka.io/docs/akka/current/java/routing.html)要将消息路由到集群,有几种不同类型的路由器,这取决于您的需要和您所说的“方便”的含义。如果“方便”只是指哪个演员目前是免费的,你可以使用最小的邮箱路由器。如果它与消息的内容有关,则可以使用一致的哈希路由器。

t3irkdon

t3irkdon3#

storm对于离线和在线的工作节点来说是相当有弹性的。然而,就像spark一样,它确实需要zookeeper。
好消息是,storm附带了一个姐妹项目,使部署变得轻而易举:https://github.com/nathanmarz/storm-deploy/wiki
如果你在ec2上运行香草风暴 storm-deploy 项目可能就是你要找的。

相关问题