我有3个节点的群集,我使用ignite计算进行并行操作。在这里,我使用Apply method.when在3个节点的群集上执行作业。它需要15-20秒,而当我在单节点上运行作业时,需要3-5秒。因此,根据文档,当我使用更多的节点时,为什么它需要更少的时间,但在我的情况下,它完全相反,所以请您帮助我
发布于 2017-09-27 23:56:52
并不是所有情况下,增加节点数量都会带来性能提升。你看到它的方式可能会带来相反的效果。如果你的任务/作业是轻量级的,那么在其他节点上发送它们可能会增加开销,这对这类任务可能很重要。对于执行远程任务/作业,Apache Ignite序列化它们,通过TCP/IP在远程节点上传输。在远程节点上,这些作业被反序列化、执行,并以相同的方式(序列化、TCP/IP等)提供响应。
发布于 2017-09-28 19:33:25
当您从lambda中的外部类访问对象时,这些对象也将被序列化,这种行为会产生开销。正如我从代码中看到的,您实际上不需要访问lambda之外的任何对象,您可以将所有对象移动到lambda中。
此外,创建一个静态内部类比创建lambda更好。
此外,我建议在进行任何测量之前预热JVM和Ignite,并运行多个迭代。
在某些情况下,你可以使用@ComputeTaskNoResultCache注解,如果它适合你的情况,它可以带来巨大的改进。
我也推荐阅读this thread on Apache Ignite user list,它包含了一些关于提高计算网格性能的建议:
https://stackoverflow.com/questions/46446646
复制相似问题