阅读更多

2顶
1踩

开源软件

原创新闻 Java开源并行计算组件Multi-Task

2016-09-01 09:10 by 见习记者 buptaa 评论(4) 有7147人浏览
1. Multi-Engine介绍

1.1 multi-engine是什么

Multi-engine是分布式多任务并行处理的基础组件:可通过Java注解对原有业务代码几乎无侵入地实现并行化,由multi-task、multi-engine、cluster-support三个独立可插拔的组件组成。各组件一起组合使用,也可根据所需feature独立使用其中的一两个组件。

该组件设计初衷是:为传统业务代码提供单机或集群并行处理的利器。应用方无需关心线程、锁、资源、通信、分布式故障等问题。而将工作重心更多地关注业务开发即可。遵循Amdahl加速定律,改善提升系统的处理效率,降低响应延迟。

Multi-engine可理解为与业务无关的单机或分布式计算模型封装,为“多任务处理引擎”。是一个轻量级的并行处理组件。重点应用场景为传统web或cron代码的单机或集群化并行计算,不解决T级别海量数据处理或弹性分布式数据集等问题(后者有更好的工具支持,如spark、hadoop等)。

1.2 multi-engine功能概述

1、multi-task组件 Multi-task组件为基础组件,提供单机多线程的并行处理模型,并预留用户自定义扩展接口。该组件封装了task定义的方式(接口或注解)、单机同构并行计算或异构计算等。作为容器持有了用户标注的可并行处理的task。该组件可独立使用,提供单机多任务处理的能力。

2、multi-engine组件 Multi-engine组件是multi-task的功能扩展,为分布式版的multi-task组件。组件接口及计算模型与multi-task一致,应用时选用对应的并行池化执行组件即可。该组件结合multi-task组件,开箱即用:实现分布式并行处理(无需其它协调设施或db存储)。组件通过heartbeat和gossip协议,sync集群信息。

3、cluster-support组件 Cluster-support组件是multi-engine的功能扩展,为multi-engine提供第三方元信息管理支持。可替代multi-engine原生的gossip信息同步。Cluster-support默认的分布式元信息管理是由Zookeeper实现的,用户也可自定义其它实现方式。以上3个组件一起使用时,需配置元信息管理的Zookeeper集群。

以上3个组件为预实现的组件,设计思路为可插拔、插件化支持。用户也可根据需求扩展已有组件。

2. 设计架构


广义上的Multi-Engine采用插件化的设计,由multi-task、multi-engine、cluster-support三个组件构成。各组件对应主要职责划分如下:

以上组件有3种使用方式:

Only multi-task:实现单机多线程版本的多任务并行处理。
Multi-task + Multi-engine: 无需其它设施,实现分布式多任务并行处理。
Multi-task + Multi-engine + Cluster-support: 实现Zookeeper方式协调的分布式多任务并行处理,需提供Zookeeper集群。
通信协议层,组件为了尽量减少网络开销,降低协议头负载,自定义了一套字节传输协议,packHead+protostuff/protobuf/json。同时也支持NsHead协议,或扩展定制其它协议。

框架的设计初衷是,尽量不改变用户的编程习惯(少侵入),使得用户轻松开发并行化的业务代码,提升改善系统的性能。

3. 使用方式&源码

Multi-Task(单机并行)或Multi-Engine(分布式并行)的使用方式和源码,可在github上查阅:https://github.com/wangchongjie/multi-task

2
1
评论 共 4 条 请登录后发表评论
4 楼 buptaa 2016-11-10 16:06
示例DEMO及更多说明也可参考:http://wangchongjie.com/2016/11/06/multi-engine/
3 楼 buptaa 2016-11-10 16:02
示例DEMO及更多说明也可参考:http://wangchongjie.com/2016/11/06/multi-engine/
2 楼 buptaa 2016-09-01 10:33
1 楼 buptaa 2016-09-01 10:33
Multi-Task源码:https://github.com/wangchongjie/multi-task

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics