19.1.2 总体架构分层与能力域

总体架构分层强调职责清晰、能力可复用与边界可治理,形成从资源到应用、从数据到运营的闭环。平台化运维的核心是将基础设施与运维能力服务化,通过统一入口和标准化接口实现跨团队协作、自动化交付与持续改进。

总体架构草图(原理)

文章图片

分层架构建议
- 接入与门户层:统一入口、导航与工作台,支持单点登录、工单入口、API网关与多租户界面。
- 业务与应用层:面向运维场景的应用服务,如发布、变更、故障、容量管理、资产与CMDB可视化等。
- 能力与服务层:沉淀通用运维能力,包含配置管理、作业编排、监控告警、日志与审计、权限与审批、自动化执行等。
- 数据与模型层:统一数据模型(资源、关系、指标、事件)、数据采集与清洗、指标与标签体系、元数据管理。
- 资源与基础设施层:计算、网络、存储、容器与中间件资源,涵盖主机、虚拟化、Kubernetes、数据库与消息系统等。

能力域划分与职责
- 资源管理域:资产全生命周期、资源池化、容量与成本管理、机房与云资源治理。
- 配置与标准化域:配置项规范、模板化、基线管理、合规模板与审计追踪。
- 自动化与编排域:作业执行引擎、流程编排、脚本库与插件体系、幂等与回滚机制。
- 监控与可观测域:指标、日志、链路与告警融合,事件归并与根因分析。
- 发布与变更域:灰度、蓝绿、金丝雀策略,风险评估、审批流与回退策略。
- 安全与权限域:身份认证、最小权限、操作审计、敏感操作双人复核。
- 数据分析与度量域:SLA、SLO、故障趋势、变更成功率、MTTR/MTBF统计与成本指标。

关键原则
- 以服务化接口为核心,平台能力以API优先暴露,支持多渠道集成。
- 数据驱动治理,统一指标口径与事件模型,沉淀可视化与分析能力。
- 解耦与可扩展,模块化插件设计,支持跨环境与多云资源接入。
- 自动化与安全并重,执行全链路审计,具备可回溯、可控与可恢复能力。

示例:用最小组件验证分层可用性(门户+能力+数据)

# 1) 使用 Docker 快速启动一个“入口+能力+数据”的最小可运行集合
# 入口层:Nginx 作为统一入口
# 能力层:Prometheus (监控能力) 作为能力服务示例
# 数据层:PostgreSQL 作为元数据/模型存储示例
mkdir -p /opt/ops-platform/{nginx,pg,prom}

cat >/opt/ops-platform/nginx/nginx.conf <<'EOF'
events {}
http {
  upstream prom { server 127.0.0.1:9090; }
  server {
    listen 8080;
    location /prom/ {
      proxy_pass http://prom/;
    }
  }
}
EOF

cat >/opt/ops-platform/docker-compose.yml <<'EOF'
version: "3.8"
services:
  nginx:
    image: nginx:1.25
    volumes:
      - /opt/ops-platform/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "8080:8080"
    network_mode: host
  postgres:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: ops123
      POSTGRES_DB: cmdb
    ports:
      - "5432:5432"
    network_mode: host
  prometheus:
    image: prom/prometheus:v2.48.0
    ports:
      - "9090:9090"
    network_mode: host
EOF

docker compose -f /opt/ops-platform/docker-compose.yml up -d
# 预期:访问 http://<host>:8080/prom/ 可以看到 Prometheus Web

示例:能力层服务化接口(API 优先)

# 假设能力层提供作业执行服务 API,模拟以 curl 调用
# 这里使用 httpbin 代替真实能力服务,体现 API 优先设计
docker run -d --name httpbin -p 9000:80 kennethreitz/httpbin

# 触发“作业执行”接口(示例)
curl -s -X POST http://127.0.0.1:9000/post \
  -H "Content-Type: application/json" \
  -d '{"job":"restart_nginx","targets":["10.0.0.11","10.0.0.12"],"dry_run":false}' | jq .
# 预期:返回请求内容,作为统一 API 入口的联调占位

示例:数据与模型层的统一资源模型(简化版)

-- 资源模型表(PostgreSQL)
CREATE TABLE cmdb_resource (
  id SERIAL PRIMARY KEY,
  resource_type VARCHAR(32) NOT NULL,
  name VARCHAR(64) NOT NULL,
  ip VARCHAR(32),
  region VARCHAR(32),
  tags JSONB,
  created_at TIMESTAMP DEFAULT NOW()
);

-- 关系表
CREATE TABLE cmdb_relation (
  id SERIAL PRIMARY KEY,
  from_id INT REFERENCES cmdb_resource(id),
  to_id INT REFERENCES cmdb_resource(id),
  rel_type VARCHAR(32) NOT NULL
);

安装与启动说明(最小化)

# 安装 Docker 与 Compose(Ubuntu 示例)
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker

# 校验
docker version
docker compose version

排错要点(分层验证)

# 入口层:Nginx 是否监听
ss -lntp | grep 8080

# 能力层:Prometheus 是否可访问
curl -s http://127.0.0.1:9090/-/healthy

# 数据层:PostgreSQL 是否可连接
psql -h 127.0.0.1 -U postgres -d cmdb -c "select 1;"

练习
1. 将入口层从 Nginx 替换为 API 网关(如 Kong/Traefik),并保留 /prom/ 代理路径。
2. 为 cmdb_resource 增加 owner 字段,并通过 SQL 查询统计不同 owner 的资源数量。
3. 新增一个能力服务(如日志服务 OpenSearch),并在入口层新增反向代理路径。
4. 在 Prometheus 中添加对 Nginx 的监控抓取,验证能力域可观测性闭环。