配置文件
Seele 的配置文件采用 TOML (opens in a new tab) 格式,且配置文件名固定为 config.toml
。在程序启动时,它会尝试在当前目录下读取配置文件,若文件不存在则会导致程序退出。当使用
Seele 提供的 Docker 镜像时,默认的当前目录为 /etc/seele
,因此你需要将配置文件挂载到此文件夹下才能让程序顺利读取到配置文件。
配置文件中的各个配置项如下表所示:
名称 | 类型 | 可选 | 简介 |
---|---|---|---|
log_level | string | 是 | 输入到控制台的日志等级,默认为 warn 。可选值: debug 、info 、warn 、error 和 off |
work_mode | string | 是 | 评测系统的工作模式,参见下文。 可选值: bare 、bare_systemd 、containerized 默认值: containerized |
thread_counts | object | 是 | 评测系统使用的线程数量,参见下文 |
paths | object | 是 | 一些文件夹和程序的目录,参见下文 |
telemetry | object | 是 | 观测性配置,参见下文 |
healthz | object | 是 | 健康探针配置,参见下文 |
http | object | 是 | 内置的 HTTP 客户端配置,参见下文 |
exchange | object | 是 | 参见 Exchange 配置 |
composer | object | 是 | 参见 Composer 配置 |
worker | object | 是 | 参见 Worker 配置 |
work_mode
配置
指定 Seele 运行的模式,这和评测系统的工作原理有关。
- 当作为普通用户运行评测系统程序时,请指定
bare
。 - 当使用 Systemd 运行评测系统程序时,请指定
bare_systemd
。 - 当使用 Seele 的容器镜像部署到 Docker 或 Kubernetes 等平台上运行时,请指定
containerized
(此值为默认值)。
thread_counts
配置
为了确保评测公平性,Seele 在启动时会严格地将每一个线程绑定到不同的 CPU 核心上。
默认情况下,令 N
为系统上存在的
CPU 核心数,Seele 会使用其中的 1
个核心运行主线程,使用另外的 1
个核心运行 1
个辅助线程(此线程被称为 Worker 线程),并使用剩余的 N-2
个核心运行 N-2
个辅助线程(此线程被称为 Runner 线程),评测系统会使用
Runner 线程运行安全沙箱,参见整体架构。
用户可以通过下表所示的 thread_counts
的属性改变 Worker 线程和 Runner 线程的数量:
名称 | 类型 | 可选 | 简介 |
---|---|---|---|
worker | number | 是 | Worker 线程数量 |
runner | number | 是 | Runner 线程数量 |
paths
配置
此配置的属性如下表所示:
名称 | 类型 | 可选 | 简介 |
---|---|---|---|
root | string | 是 | 默认值为 /etc/seele 。存储评测系统需要持久化的文件的根文件夹路径 |
tmp | string | 是 | 默认值为 /tmp 。存储评测任务文件夹的根文件夹路径 |
runj | string | 是 | 默认值为 /usr/local/bin/runj 。安全沙箱程序的路径 |
skopeo | string | 是 | 默认值为 /usr/bin/skopeo 。skopeo 程序的路径 |
umoci | string | 是 | 默认值为 /usr/bin/umoci 。umoci 程序的路径 |
telemetry
配置
观测性的相关配置。Seele 使用 OpenTelemtry (opens in a new tab) 提供的 SDK 导出 Tracing 和 Metrics 数据。在实践中,我们一般通过 OpenTelemetry 提供的 Collector (opens in a new tab) 收集 Seele 导出的观测性数据,然后将其分类发送到不同的观测性数据库中存储,如 Jaeger、Tempo 和 Prometheus 等,最后通过 Grafana 等前端工具查询数据。
telemetry
的属性如下表所示。当没有配置 telemetry
时,Seele 会关闭观测性功能。
名称 | 类型 | 简介 |
---|---|---|
collector_url | string | Collector 的 URL。目前仅支持 Grpc 协议 |
histogram_boundaries | number[] | Histogram 类型的 metrics 的 boundary 配置。参见观测性 |
healthz
配置
Seele 为 Kubernetes 提供了 HTTP 类型的健康探针,供后者检测评测系统的运行状态,并在系统出现问题时及时重启。此探针目前仅接入了 Amqp Exchange 的健康状态检查,如果你没有使用它,那么健康探针没有意义。
Seele 会在启动初始化完成后才会启动 HTTP 健康探针,如果你配置了预载容器镜像,那么需要配置 Kubernetes 的探针等待足够的时间。
此配置的属性如下表所示:
名称 | 类型 | 简介 |
---|---|---|
enabled | boolean | 是否开启健康探针 HTTP 端点 |
port | number | HTTP 端点的端口号 |
http
配置
此配置控制 Seele 内置的 HTTP 客户端的各项参数。后者目前用于:添加文件任务通过 HTTP URL 下载文件、上传文件通过 HTTP URL 上传文件。它的各项属性如下表所示:
名称 | 类型 | 默认值 | 简介 |
---|---|---|---|
user_agent | string | seele/版本号 | HTTP 请求头中的 User-Agent 值 |
connect_timeout_seconds | number | 8 | HTTP 请求的 TCP 连接请求超时 |
timeout_seconds | number | 60 | HTTP 请求的超时 |
pool_idle_timeout_seconds | number | 600 | 保留池化的 TCP 连接的时长 |
pool_max_idle_per_host | number | 8 | 每个 host 最大能够池化的 TCP 连接数量 |