一、业务实例形态技术栈
| 名称 | 内核隔离 | 配置文件 | 数据映射 | native 技术特点 | 典型用途 |
|---|---|---|---|---|---|
| WASM | 程序 > 沙盒 | 程序内部;无系统边界 | *.wasm | WASI preopen 只读 | 微秒级;无,进程内执行;capability 权限模型最细 | 插件、边缘函数 |
| systemd | 进程 > 系统服务 | 独立进程;共享内核与 rootfs | configuration.nix [systemd.services] | BindPaths | 毫秒级;无;DynamicUser 自动分配 UID,NixOS 一等公民 | 数据库、中间件、批处理 |
| bubblewrap / firejail | 进程 > 沙盒 | 独立进程;namespace 隔离 | programs.firejail | ro-bind 只读挂载 | 毫秒级;几乎无;namespace + seccomp 约束单进程 | 浏览器、外来二进制 |
| wine / proton | 进程 > 本地软件 | 独立进程;无隔离 | user.reg / system.reg | WINEPREFIX | 秒级;无隔离;ABI 翻译层,只覆盖用户态,DXVK/VKD3D 直用原生 GPU | Windows 小程序 |
| distrobox | 容器 > 本地软件 | 独立 rootfs,共享内核 | distrobox.ini | --volume 挂载 | 秒级;共享内核,开销低;借用宿主内核与显卡,任意发行版用户空间 | 闭源工具、外来发行版 |
| nixos-container | 容器 > 无头容器 | 独立 rootfs,共享内核 | configuration.nix [containers.<name>] | bindMounts | 秒级;共享内核,开销低;用宿主同一套 NixOS 模块描述,改配置即重建 | 隔离服务、开发环境 |
| podman | 容器 > 无头容器 | 独立 rootfs,共享内核 | <name>.container [Container] | -v 卷挂载 | 秒级;共享内核,开销低;rootless 无守护进程,quadlet 纳入 systemd | 中间件、应用服务 |
| docker | 容器 > 无头容器 | 独立 rootfs,共享内核 | compose.yaml | volumes 声明 | 秒级;共享内核,开销低;声明式生成 systemd 单元,compose 生态最兼容 | 应用服务栈 |
| Flatpak | 容器 > 沙盒 | 独立 rootfs,共享内核 | *.json / *.yaml | --filesystem 授权 | 秒级;共享内核,开销低;沙箱基于 bubblewrap,依赖非特权用户命名空间 | 桌面 GUI 应用 |
| Kata Containers | 虚拟机 > 沙盒 | 容器接口,轻 VM 边界 | configuration.toml | runtime 存储配置 | 百毫秒级;轻量虚拟化;容器接口 + 轻 VM 隔离 | 不可信代码、多租户容器 |
| gVisor | 虚拟机 > 沙盒 | 容器接口,用户态内核边界 | config.json | runtime 存储配置 | 亚秒级;用户态内核拦截系统调用;容器接口 + 强隔离 | 不可信代码、多租户容器 |
| microVM | 虚拟机 > 虚拟系统 | 独立内核,最小设备模型 | flake.nix [microvm] | virtiofsd / 9p 挂载 | 约 125–300ms;轻量虚拟化;声明式等同 NixOS,后端可换 | 单服务隔离 |
| Incus | 虚拟机 > 虚拟系统 | 独立内核 | configuration.nix [virtualisation.incus] | storage pool | 数秒(VM);完整虚拟化(VM) | 开发环境、系统测试 |
| KVM | 虚拟机 > 虚拟系统 | 独立内核与设备模型 | *.xml | zvol + virtiofsd | 数十秒;完整虚拟化;支持 OVMF、设备直通、外部快照 | Windows 应用、设备直通 |
虚拟化的级别归纳(四级)
| 级别 | 相对上一级新增的判据 | 代表技术 | 边界实质 | 隔离强度 |
|---|---|---|---|---|
| L1 程序(进程内) | 无独立进程 | WASM | 执行器级沙箱,跑在调用方进程里,没有系统边界 | 最弱 |
| L2 进程 | 独立进程 | systemd、bubblewrap / firejail、wine / proton | 进程独立,但仍用宿主 rootfs,靠 UID / namespace / seccomp 约束 | 弱 |
| L3 容器 | 独立 rootfs | nixos-container、podman、docker、Incus、distrobox、Flatpak | 用户空间独立,共享宿主内核 | 中 |
| L4 虚拟机 | 独立内核 | microVM、KVM | 独立内核与设备模型,内核不共享 | 强 |
业务实例形态分类方法:
- ① 大类:它能不能伤害系统环境?→ 是则本地软件/服务/任务,或沙盒/容器/系统
- ② 本机类:看跑一次就用(命令或窗口)?→ 是则本地软件,或服务/任务
- ③ 隔离类:隔离层度?应用被关起来则是沙盒;无头最小系统则是无头容器;一套硬件和系统则是虚拟系统
二、逐业务选型建议
| 业务 | 虚拟化级别 | 特征 |
|---|---|---|
| 数据库(postgres / mysql / redis) | 容器 | 有状态、数据不可重建;以随机小写与 sync 同步写为主,对 fsync 语义与延迟敏感;数据文件互相引用(表空间 / redo / 字典),不能单文件回退; 备份要与存储快照对齐,靠 redo / WAL 重放;需要稳定属主与 0700 目录权限 |
| 对象存储(minio)、消息(nats / redis) | 容器 | 有状态、体量大、直连磁盘;以顺序与大块写为主,吞吐敏感、随机小写少;靠网络接口交付(S3 / 消息协议);多版本并存与多实例是常见需求 |
| 中间件(向量库 qdrant、搜索等) | 容器 | 有状态但数据可由源文件重建(索引类);内存占用大、随机读写混合;版本迭代快,跨版本并存与多实例常见;对宿主环境无特殊依赖 |
| git 自托管(forgejo / gitea) | 容器 | 有状态、以大量小文件与元数据为主,元数据操作密集;需要对外 HTTPS 入口与 SSH 端口;数据可靠性要求高,但仓库通常另有远端副本 |
| tailscale | 容器 | 无业务数据;必须操作宿主网络栈(路由表、iptables / nftables、TUN 设备);全机唯一出口,天然单例;依赖外网长连接 |
| wireguard / 其他 VPN | 容器 | 无业务数据;依赖内核模块与网络命名空间;需要稳定地址与路由;控制面天然属于宿主网络 |
| 反向代理与证书(caddy / traefik) | 容器 | 无业务数据,只有配置与证书;必须独占 80 / 443;对众多上游做端口级转发;证书续期是周期性动作 |
| frp(frpc) | 容器 | 无业务数据;与外部 frps 维持长连接;对外暴露面由穿透规则决定,不易收敛;需要能直接出网 |
| 私有文件服务(只给本机实例用) | 容器 | 数据是共享素材,以只读为主;消费方是容器 / 虚拟机,需走 NFS / virtiofsd / 9p;跨边界共享的锁语义不可靠,不能有并发写者 |
| 私有文件服务(对外提供 Web 访问) | 容器 | 有状态且直接暴露在公网;攻击面大;需要 HTTPS、账号权限与审计;数据重要,必须能恢复到某一时刻 |
| 日常文件处理 GUI(压缩 / PDF / 重命名) | 程序 | 无状态、跑完即退;需要直接读写本机文件系统;图形界面要显示与 GPU;对启动速度不敏感,但对文件权限与编码环境敏感 |
| 浏览器 | 虚拟机 | 图形交互 + GPU 加速;长期联网、攻击面大;profile 与缓存体积大但可重建;依赖剪贴板、输入法、音视频与硬件解码 |
| Win (微信 / Office / 网银 UKey / 游戏) | 虚拟机 | 依赖真 Windows 内核与 Win32 全栈;网银 UKey 需 USB 原始访问(内核态驱动);游戏与 Office 需要 GPU / D3D 与显示;应用数据在内部结构中,不能单文件迁移 |
| GPU 计算与编码 | 容器 | 需要宿主 GPU 驱动与设备节点;算力密集、长时间占用;对 CPU / GPU 亲和与显存敏感;本身无状态(输入输出走磁盘或网络) |
| IDE(vscode、trae) | 虚拟机 | 本地项目文件 + 索引缓存(索引可重建);文件监听量大(inotify watch);GUI 需要显示与 GPU;依赖工具链与插件生态的特定版本 |