1. 技术规范参考
Scalebox应用是运行在Scalebox平台上的应用程序。典型的Scalebox应用程序包括高通量数据处理、大规模数据传输等。
1.1 Scalebox运行时组件
1.1.1 核心运行时组件
Scalebox的运行时环境包括以下核心组件:
controld:基于gRPC的控制服务,管理actuator和计算节点
actuator:启动器服务,通过SSH或外部调度器在计算节点上启动slot
database:PostgreSQL数据库,存储app、module、task、slot等元数据
agent:运行在计算节点上的代理,负责任务执行和状态管理
cluster-admin:与HPC调度系统交互的资源申请、管理的软件模块,也是一个系统级应用
1.1.2 组件间通信
控制平面通信:使用gRPC协议,端口50051
数据平面通信:通过消息队列和数据库
节点间通信:通过SSH或专用网络协议
1.2 应用定义规范(app.yaml完整schema)
应用定义文件是用于定义Scalebox应用程序(App)及其模块(Module)的yaml文本文件,还支持集群(Cluster)。
应用定义文件的格式示例如下:
name: perf-test.my-app
label: perf-test
version: 1.0.0
cluster: ${CLUSTER}
parameters:
initial_status: RUNNING
main_router: main-router
is_cluster_admin: yes
default_sleep_count: 20
comment: This is a sample app.
modules:
module-1:
arguments:
...
parameters:
...
...
module-2:
...
clusters:
cluster-1:
...
cluster-2:
...
应用定义文件分为主配置属性、module定义、cluster定义等部分。
若应用定义文件仅用于cluster的定义,则主配置下的所有属性不生效。
应用定义文件的缺省名为当前目录下的app.yaml。
关于主配置下的字段说明如下:
name: 应用名称,通常用点分的标识符构成
label: 在系统中显示的应用名,通常可以用中文标识。
version: 应用版本号
cluster: 应用中所有module的的缺省集群名
comment: 注释信息
parameters: 应用的参数列表
initial_status:应用的初始状态,取值为:’RUNNING’/’INITIAL’。若设为‘RUNNING’,则App创建后,直接进入运行状态;
main_router:指定应用中模块的缺省路由。若模块的后续模块(sink-module)为空,则为该模块指定main-router指定为后续模块;
default_sleep_count: 所有module的缺省max_sleep_count参数,缺省值为100(6秒为1个单位,计10分钟)
关于module、cluster的详细定义,见后续章节。
应用定义文件中的模板参数文件
除虚拟模板参数CLUSTER_DATA_DIR之外,模板变量必须先定义,再使用。以下是模板变量定义及优先排序(从低到高)
/etc/scalebox/environments${HOME}/.scalebox/environments${PWD}/scalebox.env${PWD}/${{env-defined}}.env${PWD}/${{env-defined}}_${{app-defined}}.env当前命令行中,已定义的环境变量
1.2 模块定义规范
my-module:
label: My First Module
base_image: scalebox/agent
cluster: my-cluster
command: docker run -d --network=host {{ENVS}} {{VOLUMES}} {{IMAGE}}
arguments:
...
parameters:
...
environmens:
...
volumes:
...
slots:
...
sink_modules:
...
sink_vmodules:
...
comment: This is new algorithm module.
关于Module的字段说明如下:
label: 应用界面中显示的Module
base_image: 容器镜像名
cluster: 集群名
command: 容器运行的命令模板
arguments: 容器端的标准变量,通常映射为环境变量 …
parameters: 模块的服务端参数 …
environmens: 环境变量 …
volumes: 物理路径,通过volume映射 …
slots: 模块的slot定义 …
slots:
- ${nodes}[:n]
- ${nodes}:${n}:${group_prefix}
第二行,用于host-bound场景下全局/分组slot定义。
nodes为slot所在节点
n为slot数量
分组前缀的正则表达式 分组slot的parameters中,设定group_prefix为组前缀
sink_modules: 标识Module间的物理关联,在跨集群应用中,用于标识跨集群的Module间的关联; …
sink_vmodules(串数组): 用于Module间的逻辑关系。
1.3 集群定义规范
cluster定义的示例如下:
mycluster:
label: My new clster
parameters:
uname: myuser
port: 10022
data_root: /global-fs/scalebox/mydata
local_ip_index: 2
num_of_executors: Inline cluster only
channel_size: channel size fo executor, Inline cluster only
grpc_server: 192.168.3.123:50051
total_resources:
num_cores: cpu cores
total_mem_gb:
total_disk_tb:
status: ON
comment:
label:
parameters:
port: 主机的缺省端口号
uname: 主机的缺省用户名
data_root: 集群的数据目录
local_ip_index: 用于提取本机IP地址的索引号(hostname -I)
grpc_server: ?有一个相同名称的外部字段。
remote_grpc_server:
pghost:
remote_pghost:
1.4 标识符命名规则
1.4.1 文件名命名规则
文件名字符:数字、英文字母大小写、下划线、点。
1.4.2 URI命名规则
App、Module等资源通过URI(Uniform Resource Identifier,统一资源标识符)作唯一标识。常见的URI主要包括URL(Uniform Resource Locator,统一资源定位符)、URN(Uniform Resource Name,统一资源名称)两大类。URI 指的是一个资源,URL 指的是用地址定位一个资源,URN 指的是用名称定位一个资源。 即URL 和 URN 是 URI 的子集。 App、Module等通过URN来定义。
1.4.3 版本号命名规则
App、Module等资源类型可以通过版本表示,版本定义遵循语义化版本. 版本格式如下:主版本号.次版本号.修订号,版本号递增规则如下: · 主版本号:当你做了不兼容的 API 修改, · 次版本号:当你做了向下兼容的功能性新增, · 修订号:当你做了向下兼容的问题修正。
先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
单线程性能对比
| 算法 | 参数值 | 硬件AES-NI(x64) | 软件实现(无AES-NI) | 说明 |
|---|---|---|---|---|
| AES-128-GCM | aes128-gcm@openssh.com | 5~7 GB/s | 150~200 MB/s | 最优选择,硬件加速极快 |
| AES-256-GCM | aes256-gcm@openssh.com | 3~5 GB/s | 120~150 MB/s | 稍慢但安全性更高 |
| ChaCha20-Poly1305 | chacha20-poly1305@openssh.com | 1~2 GB/s | 600~700 MB/s | 软件效率高,尤其在无AES-NI时比AES快 |