/sysmaster

sysMaster: redesign and reimplementation of process1

Primary LanguageRustMulan Permissive Software License, Version 2MulanPSL-2.0

sysMaster (http://sysmaster.online

挑战

1 号进程处于系统关键位置,负责系统初始化和运行时服务管理,当前面临如下挑战:

  • ①可靠性差: 位置关键,自身故障时必须重启操作系统才能恢复
  • ②复杂性高: systemd 成为 1 号进程事实上的标准。它引入了许多新的概念和工具,依赖繁杂,难以针对实际使用场景进行裁剪
  • ③兼容性弱: 对云、边、嵌入式场景的支持差,不满足全场景的诉求

行业诉求

  • 服务器、嵌入式场景对可靠性有极强诉求: 内存安全问题降至0:消减极难定位的内存问题,减少宕机影响
  • 系统不宕机,业务无影响: 借助永不宕机特性追求极致可靠
  • 高效智能运维成云场景痛点: 对HOST的运维缺乏高效手段:容器型OS对1号进程提出极简目标
  • 国产化替代要求核心软件自主可控: 聚焦关键开源软件:敏感/竞争力根组件,实现根技术完全自主可控

愿景

  1. 短期竞争力:极致的可靠性和系统启动速度
  • 永不宕机: 通过状态外置、savepoint等技术实现故障秒级自愈,保障1号进程持续在线,业务不受影响
  • 快速启动: 解耦去重、极简镜像,支撑服务器重启时间从3-5min优化到1min(友商5min)
  1. 长期竞争力:全场景应用、云平台运维效率提升
  • 全场景应用: 支持云边端等场景,统一init,支持裸机、虚机、容器
  • 容器型OS: kernel+sysMaster=容器OS底座,通过对接k8s、openstack等,与KubeOS一起支撑云场景下运维效率X倍提升

整体策略:聚焦功能最小系统,采用核心自研与非核心社区方案替代并行的策略,独立组件抽屉式替换的策略,实现systemd自研替代

  1. 分场景:结合不同的使用场景,将systemd功能拆分多层,按照场景由易到难的方式,逐步完成功能开发验证及替代。
  2. 多方案:无社区替代方案的核心功能和组件,采用自研重写的替代,其他的采用无供应风险的社区软件替代。
  3. 有节奏:一年一个核心竞争力,至24年完成3个核心竞争力的发掘,按照开发-落地-替代三条线开展工作。

sysMaster:全新1号进程实现方案,秒级故障自愈,保障系统全天在线

sysMaster 旨在改进传统的init守护进程,1+1+N架构。

  • init:新的1号进程,功能极简,代码千行,极致可靠
  • core:承担systemd原有核心功能,引入可靠性框架、插件机制,使其具备崩溃快速自愈、热升级、灵活组装能力
  • exts:使原本耦合的各组件功能独立,支持抽屉式替代systemd的对应组件,支持有节奏的分场景替换

极力构筑三大竞争力:

  1. 极致可靠 – 永不宕机
  • 极简架构:1+1+N,简化init;非核心功能组件化提供
  • 极致可靠:故障感知+秒级恢复, 根进程持续在线
  • 内存安全:内存问题降至0,故障后自愈
  1. 极度轻量 – 快速启动
  • 更少的资源:内存占用降低10%
  • 更快的速度:启动速度提升15%
  1. 极优体验 – 极简镜像
  • 易于运维:热升级、按需裁剪,方便的部署/运维
  • 兼容生态:提供systemd生态兼容、转换工具
  • 插件机制:支持灵活扩展多种服务类型

构建

首先,下载仓库代码,并执行命令来预装项目依赖,构建开发环境, 项目主要基于rust 1.57构建,使用``pre-commit`做git commit检查。

sh ./build.sh

其次,可以通过提供的脚本来构建程序。也可以参考.pre-commit-config.yaml中的动作构建。

sh ci/01-pre-commit.sh

# 格式检查
cargo clippy -vvv --all-targets --features "default" --all -- -Dwarnings

# 构建
cargo build --all --features "default" -v

# 测试
RUST_BACKTRACE=full cargo test --all-targets --all -v -- --nocapture --show-output --test-threads=1

使用

在各场景下的使用,可以参考tools目录下。

ls tools

也可访问,sysmaster.online 官网案例

代码目录结构说明

源码仓库以workspaces方式管理,每一个目录是一个package,每个package包含一个crate(lib或bin形式), 公共lib crate的目录带lib前缀,使用cargo new --lib libtests创建, daemon类型的bin crate的目录以d结尾。

/ (sysmaster)
|...init (init进程)
|...factory (系统配置)
|...libs (对外接口)
|     |...libtests (test lib crate)
|     |...cgroup (cgroup lib crate)
|     |...cmdproto(cmd proto lib crate)
|...exts (sysmaster-extends组件)
|     |...devmaster (daemon)
|     |...random-seed (bin)
|...core (sysmaster-core核心组件)
|     |...sysmaster (bin)
|     |...libcore (internal lib)
|     |...sctl (sysmaster cli)
|     |...coms (插件)
|          |...service (unit type crate)
|          |...socket  (unit type crate)
|          |...target  (unit type crate)
|...tools
|     |...musl_build
|     |...run_with_sd
|...docs (sysmaster.online)
|...build.sh (准备环境)

如:

  - lib crate: libs/event, libs/basic
  - bin crate: extends/init, sysmaster
  - daemon crate: extends/udevd, extends/logind