|
| 1 | +# Service Manager 服务管理模块 |
| 2 | + |
| 3 | +Service Manager 是 ZeroOps 平台的核心服务管理模块,负责微服务的生命周期管理、部署协调和状态监控。 |
| 4 | + |
| 5 | +## 架构设计 |
| 6 | + |
| 7 | +### 分层架构 |
| 8 | + |
| 9 | +``` |
| 10 | +┌─────────────────┐ |
| 11 | +│ HTTP API │ ← REST API 接口层 |
| 12 | +├─────────────────┤ |
| 13 | +│ Service │ ← 业务逻辑层 |
| 14 | +├─────────────────┤ |
| 15 | +│ Database │ ← 数据访问层 |
| 16 | +├─────────────────┤ |
| 17 | +│ PostgreSQL │ ← 数据存储层 |
| 18 | +└─────────────────┘ |
| 19 | +``` |
| 20 | + |
| 21 | +- **API层** (`api/`): 处理HTTP请求和响应,参数验证 |
| 22 | +- **Service层** (`service/`): 核心业务逻辑,事务管理 |
| 23 | +- **Database层** (`database/`): 数据库操作,SQL查询 |
| 24 | +- **Model层** (`model/`): 数据模型和类型定义 |
| 25 | + |
| 26 | +## 核心功能 |
| 27 | + |
| 28 | +### 1. 服务信息管理 |
| 29 | + |
| 30 | +- **服务注册**: 创建和注册新的微服务 |
| 31 | +- **依赖管理**: 维护服务间的依赖关系图 |
| 32 | +- **版本管理**: 跟踪服务的多个版本 |
| 33 | +- **健康监控**: 实时监控服务健康状态 |
| 34 | + |
| 35 | +### 2. 部署管理 |
| 36 | + |
| 37 | +- **部署协调**: 管理服务的部署任务 |
| 38 | +- **灰度发布**: 支持渐进式部署策略 |
| 39 | +- **状态控制**: 暂停、继续、回滚部署 |
| 40 | +- **实例管理**: 跟踪服务实例的分布 |
| 41 | + |
| 42 | +### 3. 监控集成 |
| 43 | + |
| 44 | +- **指标收集**: 集成时序数据库(Prometheus格式) |
| 45 | +- **状态报告**: 服务运行状态实时上报 |
| 46 | +- **告警处理**: 异常状态检测和告警 |
| 47 | + |
| 48 | +## API接口 |
| 49 | + |
| 50 | +### 服务管理接口 |
| 51 | + |
| 52 | +| 方法 | 路径 | 描述 | |
| 53 | +|------|------|------| |
| 54 | +| GET | `/v1/services` | 获取所有服务列表 | |
| 55 | +| POST | `/v1/services` | 创建新服务 | |
| 56 | +| PUT | `/v1/services/:service` | 更新服务信息 | |
| 57 | +| DELETE | `/v1/services/:service` | 删除服务 | |
| 58 | +| GET | `/v1/services/:service/activeVersions` | 获取服务详情 | |
| 59 | +| GET | `/v1/services/:service/availableVersions` | 获取可用服务版本 | |
| 60 | +| GET | `/v1/metrics/:service/:name` | 获取服务监控指标 | |
| 61 | + |
| 62 | +### 部署管理接口 |
| 63 | + |
| 64 | +| 方法 | 路径 | 描述 | |
| 65 | +|------|------|------| |
| 66 | +| POST | `/v1/deployments` | 创建部署任务 | |
| 67 | +| GET | `/v1/deployments` | 获取部署任务列表 | |
| 68 | +| GET | `/v1/deployments/:deployID` | 获取部署任务详情 | |
| 69 | +| POST | `/v1/deployments/:deployID` | 更新部署任务 | |
| 70 | +| DELETE | `/v1/deployments/:deployID` | 删除部署任务 | |
| 71 | +| POST | `/v1/deployments/:deployID/pause` | 暂停部署 | |
| 72 | +| POST | `/v1/deployments/:deployID/continue` | 继续部署 | |
| 73 | +| POST | `/v1/deployments/:deployID/rollback` | 回滚部署 | |
| 74 | + |
| 75 | +## 数据模型 |
| 76 | + |
| 77 | +### 核心实体 |
| 78 | + |
| 79 | +#### Service (服务) |
| 80 | +```go |
| 81 | +type Service struct { |
| 82 | + Name string `json:"name"` // 服务名称(主键) |
| 83 | + Deps []string `json:"deps"` // 依赖关系列表 |
| 84 | +} |
| 85 | +``` |
| 86 | + |
| 87 | +#### ServiceInstance (服务实例) |
| 88 | +```go |
| 89 | +type ServiceInstance struct { |
| 90 | + ID string `json:"id"` // 实例ID(主键) |
| 91 | + Service string `json:"service"` // 关联服务名 |
| 92 | + Version string `json:"version"` // 服务版本 |
| 93 | +} |
| 94 | +``` |
| 95 | + |
| 96 | +#### ServiceState (服务状态) |
| 97 | +- 健康状态等级 |
| 98 | +- 状态报告时间 |
| 99 | +- 异常信息 |
| 100 | + |
| 101 | +#### DeployTask (部署任务) |
| 102 | +- 部署ID |
| 103 | +- 目标服务和版本 |
| 104 | +- 部署状态 |
| 105 | +- 创建和更新时间 |
| 106 | + |
| 107 | +### 数据库设计 |
| 108 | + |
| 109 | +使用 PostgreSQL 作为主数据库: |
| 110 | + |
| 111 | +- **services**: 服务基础信息表 |
| 112 | +- **service_instances**: 服务实例表 |
| 113 | +- **service_versions**: 服务版本表 |
| 114 | +- **service_states**: 服务状态表 |
| 115 | +- **deploy_tasks**: 部署任务表 |
| 116 | + |
| 117 | +## 使用示例 |
| 118 | + |
| 119 | +### 创建服务 |
| 120 | + |
| 121 | +```bash |
| 122 | +curl -X POST http://localhost:8080/v1/services \ |
| 123 | + -H "Content-Type: application/json" \ |
| 124 | + -d '{ |
| 125 | + "name": "user-service", |
| 126 | + "deps": ["database-service", "cache-service"] |
| 127 | + }' |
| 128 | +``` |
| 129 | + |
| 130 | +### 创建部署任务 |
| 131 | + |
| 132 | +```bash |
| 133 | +curl -X POST http://localhost:8080/v1/deployments \ |
| 134 | + -H "Content-Type: application/json" \ |
| 135 | + -d '{ |
| 136 | + "service": "user-service", |
| 137 | + "version": "v1.2.0", |
| 138 | + "strategy": "rolling" |
| 139 | + }' |
| 140 | +``` |
| 141 | + |
| 142 | +### 获取服务列表 |
| 143 | + |
| 144 | +```bash |
| 145 | +curl http://localhost:8080/v1/services |
| 146 | +``` |
| 147 | + |
| 148 | +响应示例: |
| 149 | +```json |
| 150 | +{ |
| 151 | + "items": [ |
| 152 | + { |
| 153 | + "name": "user-service", |
| 154 | + "deployState": "deployed", |
| 155 | + "health": "normal", |
| 156 | + "deps": ["database-service"] |
| 157 | + } |
| 158 | + ], |
| 159 | + "relation": { |
| 160 | + "user-service": ["database-service"] |
| 161 | + } |
| 162 | +} |
| 163 | +``` |
| 164 | + |
| 165 | +## 配置说明 |
| 166 | + |
| 167 | +### 数据库配置 |
| 168 | +```yaml |
| 169 | +database: |
| 170 | + host: localhost |
| 171 | + port: 5432 |
| 172 | + user: postgres |
| 173 | + password: password |
| 174 | + dbname: zeroops |
| 175 | + sslmode: disable |
| 176 | +``` |
| 177 | +
|
| 178 | +### 服务配置 |
| 179 | +```yaml |
| 180 | +service_manager: |
| 181 | + port: 8080 |
| 182 | + log_level: info |
| 183 | +``` |
0 commit comments