「DeployLite」第二章:总体架构与系统设计(System Architecture & Design)

第 2 章:DeployLite 总体架构与系统设计,介绍了 DeployLite 平台的系统架构与设计,包括控制层、执行层、存储层、监控层等核心组件。

第二章:总体架构与系统设计(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 接口、身份认证、RBACGo + 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

  1. 触发(Trigger):Push / Tag / 手动执行 → API 接口。
  2. 调度(Schedule):Scheduler 分配任务 → 选取空闲 Runner。
  3. 执行(Execute):Runner 下载代码 → 运行构建步骤。
  4. 打包(Package):产出二进制或镜像 → 上传 Artifact Store。
  5. 部署(Deploy):根据 YAML 中环境配置执行发布。
  6. 验证(Verify):健康检查、回滚策略判定。
  7. 记录(Record):生成日志、指标与审计事件。

2.4 数据模型与实体(Data Model)

主要实体

实体名关键字段说明
Projectid, name, repo_url, owner_id项目信息
Pipelineid, project_id, yaml_config工作流定义
PipelineRunid, status, duration, triggered_by一次构建执行实例
JobRunid, pipeline_run_id, step, result单阶段执行记录
Artifactid, path, type, version, hash构建产出
Environmentid, name, variables, secrets环境配置
Deploymentid, artifact_id, env_id, status部署记录
Runnerid, status, capacity, region执行节点
Secretid, key, value(encrypted), scope密钥管理
AuditLogid, 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_seconds
    • runner_job_queue_length
    • deployment_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、钉钉、飞书、邮件
RegistryDocker 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)

安全模型

  1. 数据隔离

    • 组织级命名空间(OrgID 作用域)。
    • 数据库层级 row-level filtering。
  2. 最小权限原则(Least Privilege)

    • RBAC 角色限制 API 操作(读/写/执行/审批)。
    • 每个 Runner 仅能访问分配项目。
  3. 传输安全

    • 所有流量 HTTPS/TLS 1.3。
    • gRPC 通信使用双向 TLS。
  4. 存储加密

    • AES-256-GCM 加密 Secrets。
    • Artifact 哈希校验(SHA256)防篡改。
  5. 执行沙箱

    • 每个任务在独立容器 / 用户空间执行。
    • 临时文件在任务结束后销毁。
  6. 合规性

    • 数据保留策略(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)

调度核心目标:快速分配 + 资源利用最大化 + 多租户公平性

算法要点

  1. 任务队列

    • 使用 Redis Stream,每个 Runner 订阅自身标签对应任务。
  2. 分配策略

    • 优先满足低延迟项目;
    • 租户配额加权轮询;
    • Runner 健康度评分影响优先级。
  3. 任务重试

    • 最大重试 3 次,间隔递增。
    • 标记失败任务进入 dead-letter 队列。
  4. 调度日志

    • 每次任务分配写入 scheduler_events 表;
    • 可用于性能分析与审计。

2.19 可扩展与插件架构(Plugin System)

平台提供标准插件机制,支持在构建、打包、部署各阶段挂钩。

插件类型典型插件生命周期钩子
Step Plugincache, notify, helm, kubectl, terraform执行阶段(Pre/Post)
Policy Plugindeny_latest_tag, enforce_signed_imagePre-Deploy
Notification Pluginslack, dingding, emailOn Success/Failure
Runner Executorexec.docker, exec.ssh, exec.k8s全局注册

插件注册文件:

plugin:
  name: "cache"
  type: "step"
  entry: "plugins/cache/main.go"
  hook: "pre_build"

2.20 数据库设计概要(Database Schema Overview)

示例核心表结构(简化版):

表:projects

CREATE TABLE projects (
  id SERIAL PRIMARY KEY,
  org_id BIGINT NOT NULL,
  name VARCHAR(128) NOT NULL,
  repo_url TEXT,
  default_branch VARCHAR(64),
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

表:pipeline_runs

CREATE TABLE pipeline_runs (
  id SERIAL PRIMARY KEY,
  project_id BIGINT NOT NULL,
  status VARCHAR(16),
  triggered_by VARCHAR(128),
  duration_ms BIGINT,
  start_time TIMESTAMP,
  end_time TIMESTAMP
);

表:artifacts

CREATE TABLE artifacts (
  id SERIAL PRIMARY KEY,
  project_id BIGINT NOT NULL,
  version VARCHAR(64),
  type VARCHAR(32),
  storage_path TEXT,
  hash VARCHAR(128),
  size BIGINT,
  created_at TIMESTAMP
);

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页