我有3个节点集群,我在这里使用点火计算进行并行操作我使用Apply方法。当用三个节点集群执行我的作业时需要15-20秒,当我用单个节点运行我的作业时它需要3- 5秒,为什么会发生。按照文档,当我使用更多节点时,它需要更少的时间,但在我的情况下,它完全相反,所以请你帮助我
答案 0 :(得分:2)
并非所有情况下节点的增加都会带来性能提升。如何看待它可以带来逆效应。如果您的任务/作业是轻量级的,那么在其他节点上发送它们会增加开销,这对于这类任务来说可能很重要。对于执行远程任务/作业,Apache Ignite将它们序列化,通过TCP / IP在远程节点上传输。在远程节点上,这些作业被反序列化,执行并以相同的方式给出响应(序列化,TCP / IP等)。
答案 1 :(得分:1)
在从lambda中的外部类访问对象的情况下,这些对象也将被序列化,并且此行为会产生开销。正如我从代码中看到的那样,你真的不需要访问lambda中的任何对象,你可以将所有对象移动到lambda中。
此外,最好创建一个静态内部类而不是lambda。
另外,我建议在进行任何测量之前预热JVM和Ignite并运行多次迭代。
在某些情况下,您可以使用@ComputeTaskNoResultCache注释,如果它符合您的情况,它可以带来巨大的改进。
我还建议阅读this thread on Apache Ignite user list,它包含一些改进计算网格性能的建议: