GridGain 2.0 支持负载均衡、工作窃取和数据分区

  • Srini Penchikala
  • 沙晓兰

2008 年 3 月 12 日

话题:JavaDevOps语言 & 开发架构

最新版本的GridGain是一个基于 Java 的开源网格计算框架,其支持负载均衡和数据分区等特性。最近,GridGain Systems发布了该框架的2.0 版本。该版本包含“工作窃取”特性,这使得在过载(overload)节点上正在运行的调度任务可以被“窃取”到欠载(underloaded)节点上运行。

负载均衡特性支持几种不同的调度策略,比如轮询(Round Robin,默认的)、加权随机(Weighted Random)、自适应调度(Adaptive)、以及粘性负载均衡(Affinity/Strick Load)。另外,对于Oracle Coherence产品还有可定制的粘性负载均衡策略。

“工作窃取”SPI 能够动态地在网格各节点间均衡负载(它将调度工作从网格中的过载节点上卸载,再加载到欠载节点上)调度任务。这个特性既支持任务调度,同时也支持网格中所执行的任务的失败转移。网格“工作窃取”特性的设计概念,建立于由 Doug Lea 开发的 Java Fork/Join 框架之上,而且考虑到了Java SE 7。这个特性可以用来避免任务被堵塞在“慢”节点上,因为它们被“快”节点“窃取”了。失败转移 SPI 确保了工作能够被正确地转移到发送“窃取”要求的节点上。

如果你面对的是一个庞大的数据集的话,那你就必须对网格中各节点间的大量网络传输数据如指掌。GridGain 拥有如下一系列特性来对庞大的数据集之上的工作进行优化:

  • 数据分区和粘性负载平衡:这个特性通过在网格节点间对数据进行分区,并将网格工作精确地发送到数据所在的节点,从而对这些数据进行整合计算。
  • 节点分割(Node Segmentation):网格节点被分割为各个组,每个组分别工作于它们各自的数据集。如果网格中一些节点只负责将任务提交到网格(管理者),而其它节点组(工作者)只负责运行这些任务,在这样的情况下,节点分割这个特性很有用。
  • 中间检查点(Intermediate Checkpoints):在处理费时较长的工作的时候,周期性地保存中间任务状态常常很有用。检查点 SPI提供了这个特性,这样一来,即使任务失败转移到另一个节点,也无需再重新从头开始运行。

GridGain 2.0 版本中还包含了另外一些新特性

  • 监控:开发者可以通过GridNodeMetrics接口得到关于所有网格节点的运行参数。这些参数包涵了 CPU 和堆内存的信息,以及有关网格中活动的(active)、闲置的(idle)和被拒绝的(rejected)任务的详细情况。
  • 资源注射:GridGain 现在可以通过@GridUserResource 注解向任务和工作中注入任何资源。Spring 的应用程序上下文(Application Context)也可以通过使用@GridSpringApplicationContextResource注解来注入。
  • 网格工作上下文(Grid Job Context):该特性允许开发者通过使用GridJobContext接口对某项特定工作上附加属性,或者通过使用GridTaskSession向所有参与任务的工作添加属性。

GridGain 框架已经集成了一些开源和商业的框架及应用服务器,如JUnitAspectJSpringJBossJGroupsGlassFishWebLogicWebSphere、 Coherence、MuleJXInsight以及GigaSpaces等。

另外,还有一个分布式 JUnit4 GridGain 任务可以被用来跨网格运行 JUnit4 测试或测试套件,以加快所有测试的总体执行速度。分布式 JUnit 测试使用@GridifyTest注解来配置。如果在集成的开发服务器环境下,使用分布式 JUnit 测试就很有用,在这种情况下,每夜应用程序构建通常需要花费很长时间来运行一些单元和集成功能测试,而这个应用程序的整个测试套件是其中的一部分。

GradGain 可以通过GridTaskSessionAttributeListener接口来设置对异步通知的支持。另外,它也能够通过拥有用于管理任务的检查点(checkpoints)特性的GridTaskSession接口来处理工作间的依赖。

查看原文:GridGain 2.0 Supports Load Balancing, Work Stealing and Data Partitioning

JavaDevOps语言 & 开发架构