2. 核心概念
2.1 基本架构
Scalebox应用程序采用分层组织。模块层将算法封装为标准容器,并提供事件驱动式容器层接口;应用层通过主路由模块实现任务分发,并支持复杂的并行逻辑。
2.2 核心概念详解
| 概念 | 英文名称 | 中文名称 | 说明 |
|---|---|---|---|
| 应用程序 | App | 应用 | 完成特定计算任务的应用程序,包含多个Module。App可通过调用资源调度系统(如Slurm)动态获取所需的计算资源。 |
| 软件单元 | Module | 模块 | 构成应用程序App的基本可编程单元,是以容器化封装的程序代码集合。通常为一个独立算法组件,或跨节点间传输的组件等。组件间通过级联形成数据处理流水线。 |
| 执行实例 | Task | 任务 | 基本运行单位,输入数据在具体Module上的执行过程。 |
| 计算节点 | Host | 节点 | 执行计算任务的服务器节点。 |
| 资源单元 | Slot | 插槽 | 节点上与Module对应的计算资源切片,是Task细粒度运行调度的基础单位 |
2.3 应用(App)
应用组成
主路由模块:系统主程序,负责将任务分配给定制算法模块、公共基础模块,并维护整个应用的运行状态。
定制算法模块:用户业务模块,以消息驱动形式,实现特定算法功能。
公共基础模块:文件传输、目录列表等基础功能模块。
应用定义
应用通过YAML配置文件定义,包含:
应用名称和标识
模块定义和配置
参数设置
集群配置
2.4 模块(Module)
模块类型
算法模块:用户自定义的计算逻辑
传输模块:数据传输和文件操作
路由模块:消息路由和任务分发
辅助模块:目录列表、定时任务等
模块特性
容器化封装:独立运行环境,环境隔离
消息驱动:通过标准输入接收任务消息
无状态设计:支持重复执行和容错
多语言支持:支持Python、Go、C++、Java、Shell等多种语言
2.5 任务(Task)
任务生命周期
创建:应用创建时生成任务
就绪:任务准备就绪,等待执行
执行中:任务正在执行
完成:任务执行成功
失败:任务执行失败(可重试)
任务格式
任务体:任务输入数据,JSON格式或无空字符字符串
任务头:任务元数据,JSON格式字符串
任务ID:唯一标识符
2.6 运行槽(Slot)
Slot功能
资源分配:节点上的计算资源切片
任务执行:具体任务的执行环境
状态管理:管理任务的执行状态
2.7 集群(Cluster)
集群类型
单节点集群:测试、开发,单个节点同时充当管理节点和计算节点
内联集群:包括1个或多个头节点、若干个计算节点
外部集群:由外部资源调度系统管理的计算集群(如Slurm等)
集群组件
头节点:运行controld、actuator、database等控制服务
计算节点:执行具体计算任务
共享存储:可选,用于节点间数据共享
2.8 并行化方式
模块内并行
算法内部的代码级并行,如多线程、GPU加速等。
模块级并行
同一模块的多个实例并行处理不同数据,实现数据并行。
模块间并行
不同模块通过流水线方式并行执行,实现流水线并行。