Java開源并行計算組件Multi-Task
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
來自:http://www.iteye.com/news/31827-parallel-Task-Java-framework