「DeployLite」第二章:总体架构与系统设计
By Leeting Yan
第二章:总体架构与系统设计(System Architecture & Design)
2.1 系统架构总览(Architecture Overview)
平台采用 分层 + 模块化 架构设计,分为 4 个核心层级:
| 层级 | 模块 | 功能描述 |
|---|---|---|
| 控制层(Control Plane) | API Server、Web UI、Scheduler、Metadata Store | 负责用户交互、任务调度与元数据管理 |
| 执行层(Runner Plane) | Runner Agent、Job Executor | 执行实际的构建、测试、部署任务 |
| 存储层(Storage Plane) | Artifact Store、Cache、Secret Store、Database | 存放制品、日志、缓存与配置信息 |
| 监控层(Observability Plane) | Metrics、Logs、Tracing、Audit | 提供平台可观测与安全审计能力 |
架构示意(逻辑层)
+------------------------------------------------------------+
| Web UI / API |
+----------------------------+-------------------------------+
| Scheduler | Policy Engine |
+----------------------------+-------------------------------+
| Metadata Store | Secret Store |
+----------------------------+-------------------------------+
| Artifact & Cache | Database (PostgreSQL) |
+------------------------------------------------------------+
| Runner Plane |
| Runner Agent <-> Job Executor <-> Build Container/VM |
+------------------------------------------------------------+
| Observability: Logs / Metrics / Tracing |
+------------------------------------------------------------+
2.2 模块划分(Module Overview)
| 模块名 | 描述 | 技术栈 |
|---|---|---|
| API Server | 提供 REST/gRPC 接口、身份认证、RBAC | Go + Gin/Fiber + JWT |
| Scheduler | 分配任务至 Runner 队列,支持优先级与配额 | 内置调度器(Go channels + Redis) |
| Runner Agent | 执行构建任务,回传日志与状态 | Go 单二进制,支持容器模式 |
| Artifact Service | 管理构建制品(包/镜像/SBOM) | MinIO / S3 / 本地存储 |
| Secret Service | 管理加密环境变量与密钥 | AES-256 + Vault/内置安全模块 |
| UI Console | 前端界面管理与展示 | Vue3 + Vite + Tailwind |
| Policy Engine | 负责策略与审批校验 | OPA / 自研 DSL |
| Audit Logger | 记录用户操作、任务结果、回滚历史 | PostgreSQL + Kafka (可选) |
2.3 数据流与工作流(Data Flow & Workflow)
流程:从 Commit 到 Deployment
- 触发(Trigger):Push / Tag / 手动执行 → API 接口。
- 调度(Schedule):Scheduler 分配任务 → 选取空闲 Runner。
- 执行(Execute):Runner 下载代码 → 运行构建步骤。
- 打包(Package):产出二进制或镜像 → 上传 Artifact Store。
- 部署(Deploy):根据 YAML 中环境配置执行发布。
- 验证(Verify):健康检查、回滚策略判定。
- 记录(Record):生成日志、指标与审计事件。
2.4 数据模型与实体(Data Model)
主要实体
| 实体名 | 关键字段 | 说明 |
|---|---|---|
| Project | id, name, repo_url, owner_id | 项目信息 |
| Pipeline | id, project_id, yaml_config | 工作流定义 |
| PipelineRun | id, status, duration, triggered_by | 一次构建执行实例 |
| JobRun | id, pipeline_run_id, step, result | 单阶段执行记录 |
| Artifact | id, path, type, version, hash | 构建产出 |
| Environment | id, name, variables, secrets | 环境配置 |
| Deployment | id, artifact_id, env_id, status | 部署记录 |
| Runner | id, status, capacity, region | 执行节点 |
| Secret | id, key, value(encrypted), scope | 密钥管理 |
| AuditLog | id, actor, action, target, time | 操作审计 |
2.5 Runner 执行架构(Runner Execution Engine)
-
采用 pull-based 模式:Runner 定期向控制平面请求任务(避免外网访问问题)。
-
每个 Runner 可定义:
capacity(最大并发任务数);tags(如 region、type);isolation_mode(docker/k8s/host);
-
支持多租户隔离:每个租户可绑定专属 Runner 组。
执行流程
Runner Start
↓
Register -> Control Plane
↓
Poll Jobs (Redis Queue)
↓
Execute Job Steps
↓
Stream Logs to API
↓
Upload Artifacts
↓
Report Status (Success/Failed)
2.6 Pipeline Engine(流水线引擎)
- 设计模式:基于 DAG(有向无环图)的状态机。
- 每个 Stage:定义输入/输出 Artifact、依赖、执行条件(when)、环境变量。
- 支持条件执行与审批。
状态机示例
Stage: build → test → package → deploy
Transitions:
build.success -> test.start
test.success -> package.start
package.success -> deploy.approval
deploy.approval -> deploy.start
-
失败策略(Failure Policy):
- stop-on-failure(默认)
- continue-on-failure(警告但不中断)
- rollback-on-failure(触发自动回滚)
2.7 存储系统设计(Storage Design)
| 类型 | 技术方案 | 说明 |
|---|---|---|
| 元数据存储 | PostgreSQL | 所有 Project/Pipeline/Run/Logs 索引信息 |
| 制品存储 | MinIO / S3 / OSS | 构建产物(Binary/Docker 镜像/SBOM) |
| 缓存存储 | Redis / FS Cache | 模块缓存、依赖缓存 |
| 日志存储 | Filebeat + ES / Loki | 流式日志 |
| Secret 存储 | 内置 AES + Vault 接口 | 统一加密管理 |
| 监控数据 | Prometheus + Grafana | 指标监控与报表 |
2.8 网络与安全设计(Network & Security)
-
通信加密:所有模块之间通过 HTTPS/gRPC TLS。
-
身份认证:
- 平台登录:JWT + RefreshToken;
- Runner 注册:基于 Token + Fingerprint;
-
访问控制(RBAC):
- 组织级:Owner / Maintainer / Developer / Viewer;
- 环境级:可配置访问与部署权限;
-
安全策略:
- 每次部署执行沙箱隔离(容器或用户空间)。
- Secret 注入时只读,任务完成自动清理。
- 日志中屏蔽敏感值(masking)。
2.9 可扩展性与高可用(Scalability & HA)
- 控制平面支持多副本部署(K8s StatefulSet)。
- Runner 可弹性水平扩容(HPA / Docker swarm)。
- Scheduler 采用 Redis Stream 队列 + 任务分片机制。
- API Server 提供幂等接口(防重复触发)。
- 支持集群化部署:控制平面与执行平面可分离运行。
2.10 可观测性与日志链路(Observability)
-
Metrics(Prometheus):
pipeline_run_duration_secondsrunner_job_queue_lengthdeployment_success_rate
-
Tracing:
- 每个 JobRun 带 traceId,可串联 build → deploy → verify 全链路。
-
Logging:
- 实时流式日志(WebSocket + Chunk 存储)。
-
Audit Trail:
- 用户操作、API 调用、部署事件、审批流全记录。
-
Error Aggregation:
- 构建失败原因聚合统计(依赖错误 / 超时 / 网络 / 配置)。
2.11 系统交互与外部集成(Integrations)
| 类型 | 对接内容 |
|---|---|
| VCS(版本控制) | GitHub、GitLab、Gitee、Bitbucket |
| 通知渠道 | Slack、钉钉、飞书、邮件 |
| Registry | Docker Hub、Harbor、GHCR、Aliyun CR |
| Secret 后端 | HashiCorp Vault、AWS Secrets Manager |
| 监控系统 | Prometheus、Grafana、ELK Stack |
| 云平台适配 | AWS、Aliyun、Tencent、Google Cloud |
2.12 性能目标(Performance Goals)
| 模块 | 指标 | 目标值 |
|---|---|---|
| Scheduler | 调度延迟 | ≤ 500ms |
| Runner | 启动任务延迟 | ≤ 1s |
| Artifact Upload | 吞吐量 | ≥ 50MB/s |
| Pipeline Engine | 状态流转延迟 | ≤ 100ms |
| API Server | 平均响应时间 | ≤ 200ms |
| UI Console | 页面加载时间 | ≤ 2s |
| 并发构建数 | 单节点 | ≥ 100 |
| 日志写入延迟 | ≤ 1s |
2.13 模块依赖与接口关系(Dependencies)
graph LR
A["Web UI"] --> B(API Server)
B --> C[Scheduler]
B --> D[Artifact Service]
B --> E[Secret Service]
C --> F[Runner Agent]
F --> D
F --> G[Cache Store]
B --> H[Database]
B --> I[Policy Engine]
B --> J[Audit Logger]
H --> J
2.14 关键技术选型(Tech Stack)
| 层级 | 技术方案 | 选型理由 |
|---|---|---|
| 后端 | Go + Fiber / Gin | 高性能、轻量、单二进制可分发部署,生态成熟 |
| 前端 | Vue3 + Vite + TypeScript + TailwindCSS | 构建快速、组件灵活、适合复杂控制台场景 |
| 数据库 | PostgreSQL | 支持 JSONB、事务强、适合复杂查询 |
| 缓存队列 | Redis | 用于调度队列、分布式锁、速率限制 |
| 制品存储 | MinIO (S3 兼容) | 自托管,便于分区与权限控制 |
| 日志系统 | Loki / ElasticSearch / Filebeat | 可选方案,Loki 默认轻量实现 |
| 监控 | Prometheus + Grafana | 业界标准指标体系 |
| Secret 管理 | AES-256 + Vault Adapter | 默认内置加密,可接入外部 Vault |
| 策略引擎 | OPA (Open Policy Agent) | 支持 Rego 策略语言,灵活强大 |
| 容器运行 | Docker / containerd / K8s Pod 模式 | 多环境可适配 |
| 通信协议 | REST + gRPC 双栈 | REST 便于集成,gRPC 适合高频内部通信 |
| 身份认证 | JWT + Refresh Token + OAuth2 Provider | 支持外部身份接入 |
| 配置文件 | YAML + JSON Schema 校验 | 简洁、易维护、支持自动验证 |
| 自动化构建 | Makefile + GoReleaser / Node Build Kits | 构建一致性强 |
| 文档生成 | OpenAPI + Swagger UI + Redoc | 自动化接口文档 |
| 部署平台 | Kubernetes / Docker Compose | 自托管与集群部署双支持 |
2.15 安全与合规设计(Security & Compliance Design)
安全模型
-
数据隔离
- 组织级命名空间(OrgID 作用域)。
- 数据库层级 row-level filtering。
-
最小权限原则(Least Privilege)
- RBAC 角色限制 API 操作(读/写/执行/审批)。
- 每个 Runner 仅能访问分配项目。
-
传输安全
- 所有流量 HTTPS/TLS 1.3。
- gRPC 通信使用双向 TLS。
-
存储加密
- AES-256-GCM 加密 Secrets。
- Artifact 哈希校验(SHA256)防篡改。
-
执行沙箱
- 每个任务在独立容器 / 用户空间执行。
- 临时文件在任务结束后销毁。
-
合规性
- 数据保留策略(Retention Policy)符合 GDPR。
- 审计日志 ≥ 180 天可追溯。
2.16 RBAC 权限模型(Role-Based Access Control)
| 角色 | 权限范围 | 能力描述 |
|---|---|---|
| Owner | 全组织 | 创建项目、删除 Runner、设置策略、管理成员 |
| Maintainer | 项目级 | 修改配置、部署、审批发布、回滚 |
| Developer | 项目级 | 触发构建、查看日志、上传制品 |
| Viewer | 只读 | 查看状态与历史记录 |
| Auditor | 全平台 | 查看所有审计日志与报表 |
权限设计采用 RBAC + Policy Hook 混合模式:
- RBAC 控制“谁能访问什么”;
- Policy 控制“在什么条件下允许”。
2.17 多租户架构(Multi-Tenancy Design)
| 类型 | 模式 | 特征 |
|---|---|---|
| 逻辑多租户(默认) | 单数据库 + org_id 字段隔离 | 性能高,易扩展 |
| 物理多租户(高级) | 每租户独立数据库 Schema | 适合企业版隔离要求 |
租户资源配额:
- 最大并发任务数(Concurrency)
- 存储上限(GB)
- 每月构建分钟数(Build Minutes)
- 成员数量限制
超限触发通知或自动降级(如暂停 Runner 分配)。
2.18 Scheduler 调度算法(Task Scheduling Algorithm)
调度核心目标:快速分配 + 资源利用最大化 + 多租户公平性
算法要点
-
任务队列
- 使用 Redis Stream,每个 Runner 订阅自身标签对应任务。
-
分配策略
- 优先满足低延迟项目;
- 租户配额加权轮询;
- Runner 健康度评分影响优先级。
-
任务重试
- 最大重试 3 次,间隔递增。
- 标记失败任务进入 dead-letter 队列。
-
调度日志
- 每次任务分配写入
scheduler_events表; - 可用于性能分析与审计。
- 每次任务分配写入
2.19 可扩展与插件架构(Plugin System)
平台提供标准插件机制,支持在构建、打包、部署各阶段挂钩。
| 插件类型 | 典型插件 | 生命周期钩子 |
|---|---|---|
| Step Plugin | cache, notify, helm, kubectl, terraform |
执行阶段(Pre/Post) |
| Policy Plugin | deny_latest_tag, enforce_signed_image |
Pre-Deploy |
| Notification Plugin | slack, dingding, email |
On Success/Failure |
| Runner Executor | exec.docker, exec.ssh, exec.k8s |
全局注册 |
插件注册文件:
|
|
2.20 数据库设计概要(Database Schema Overview)
示例核心表结构(简化版):
表:projects
|
|
表:pipeline_runs
|
|
表:artifacts
|
|