Skip to content

Commit 96686f1

Browse files
committed
Merge remote-tracking branch 'qiniu/develop'
2 parents 8e4957f + 9f38ef2 commit 96686f1

File tree

8 files changed

+1106
-38
lines changed

8 files changed

+1106
-38
lines changed

docs/deploy/README.md

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
┌─────────────────┐ 方法调用 ┌─────────────────┐ 网络通信 ┌─────────────────┐
2727
│ 调度系统 │ ──────────────▶ │ 发布系统 │ ──────────────▶ │ 实例节点 │
2828
│ │ │ │ │ │
29-
│ • 发布指令 │ │ • 执行发布操作 │ │ • 服务实例 │
30-
│ • 批次规划 │ │ • 状态跟踪 │ │ • 版本更新 │
29+
│ • 发布指令 │ │ • 发布操作 │ │ • 服务实例 │
30+
│ • 批次规划 │ │ • 实例管理 │ │ • 版本更新 │
3131
│ • 健康检查 │ │ • 回滚操作 │ │ • 状态上报 │
3232
│ │ │ │ │ │
3333
└─────────────────┘ └─────────────────┘ └─────────────────┘
@@ -80,25 +80,30 @@
8080

8181
### 4.1 DeployService接口
8282

83+
#### 4.1.1 接口定义
84+
8385
发布服务接口,负责发布和回滚操作的执行。
8486

8587
```go
8688
type DeployService interface {
87-
ExecuteDeployment(params *DeployParams) (*OperationResult, error)
89+
DeployNewService(params *DeployNewServiceParams) (*OperationResult, error)
90+
DeployNewVersion(params *DeployNewVersionParams) (*OperationResult, error)
8891
ExecuteRollback(params *RollbackParams) (*OperationResult, error)
8992
}
9093
```
9194

92-
#### 4.1.1 ExecuteDeployment方法
95+
#### 4.1.2 方法说明
9396

94-
触发指定服务版本的发布操作
97+
**DeployNewService方法**: 部署新服务并创建指定数量的实例
9598

96-
#### 4.1.2 ExecuteRollback方法
99+
**DeployNewVersion方法**: 触发指定服务版本的发布操作
97100

98-
对指定实例执行回滚操作,支持单实例或批量实例回滚
101+
**ExecuteRollback方法**: 对指定实例执行回滚操作,支持单实例或批量实例回滚
99102

100103
### 4.2 InstanceManager接口
101104

105+
#### 4.2.1 接口定义
106+
102107
实例管理接口,负责实例信息查询和状态管理,发布模块和服务管理模块都需要使用。
103108

104109
```go
@@ -108,20 +113,70 @@ type InstanceManager interface {
108113
}
109114
```
110115

111-
#### 4.2.1 方法说明
116+
#### 4.2.2 方法说明
112117

113-
**GetServiceInstances**: 获取指定服务的实例详细信息,可选择按版本过滤
118+
**GetServiceInstances方法**: 获取指定服务的实例详细信息,可选择按版本过滤
114119

115-
**GetInstanceVersionHistory**: 获取指定实例的版本历史记录
120+
**GetInstanceVersionHistory方法**: 获取指定实例的版本历史记录
116121

117122
## 5. 内部工具函数
118123

119-
**ValidatePackageURL**: 验证包URL的有效性和安全性
124+
### 5.1 **ValidatePackageURL**: 验证包URL的有效性
125+
```go
126+
func ValidatePackageURL(packageURL string) error
127+
```
120128

121-
**GetServiceInstanceIDs**: 根据服务名和版本获取实例ID列表,用于内部批量操作
129+
### 5.2 **GetServiceInstanceIDs**: 根据服务名和版本获取实例ID列表
130+
```go
131+
func GetServiceInstanceIDs(serviceName string, version ...string) ([]string, error)
132+
```
122133

123-
**GetInstanceHost**: 根据实例ID获取实例的IP地址
134+
### 5.3 **GetInstanceIP**: 根据实例ID获取实例的IP地址
135+
```go
136+
func GetInstanceIP(instanceID string) (string, error)
137+
```
124138

125-
**GetInstancePort**: 根据实例ID获取实例的端口号
139+
### 5.4 **GetInstancePort**: 根据实例ID获取实例的端口号
140+
```go
141+
func GetInstancePort(instanceID string) (int, error)
142+
```
143+
144+
### 5.5 **CheckInstanceHealth**: 检查实例的健康状态
145+
```go
146+
func CheckInstanceHealth(instanceID string) (bool, error)
147+
```
126148

127-
**CheckInstanceHealth**: 检查单个实例是否有响应,用于发布前验证目标实例的可用性
149+
### 5.6 **GetAvailableHosts**: 获取所有可用的主机列表
150+
```go
151+
func GetAvailableHosts() ([]string, error)
152+
```
153+
154+
### 5.7 **GetHostIp**: 根据主机名获取主机IP地址
155+
```go
156+
func GetHostIp(hostName string) (string, error)
157+
```
158+
159+
### 5.8 **CheckHostHealth**: 检查主机的健康状态
160+
```go
161+
func CheckHostHealth(hostIpAddress string) (bool, error)
162+
```
163+
164+
### 5.9 **SelectHostForNewInstance**: 为新实例选择合适的主机
165+
```go
166+
func SelectHostForNewInstance(availableHosts []string, service string, version string) (string, error)
167+
```
168+
169+
### 5.10 **GenerateInstanceID**: 根据服务名生成实例ID
170+
```go
171+
func GenerateInstanceID(serviceName string) (string, error)
172+
```
173+
174+
### 5.11 **GenerateInstanceIP**: 生成实例IP地址
175+
```go
176+
func GenerateInstanceIP() (string, error)
177+
```
178+
179+
### 5.12 **GenerateInstance**: 创建实例
180+
```go
181+
func GenerateInstance(instanceID string, instanceIP string) error
182+
```

docs/deploy/interface.md

Lines changed: 165 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,45 @@
1515

1616
```go
1717
type DeployService interface {
18-
ExecuteDeployment(params *DeployParams) (*OperationResult, error)
18+
DeployNewService(params *DeployNewServiceParams) (*OperationResult, error)
19+
DeployNewVersion(params *DeployNewVersionParams) (*OperationResult, error)
1920
ExecuteRollback(params *RollbackParams) (*OperationResult, error)
2021
}
2122
```
2223

23-
### 2.2 ExecuteDeployment方法
24+
### 2.2 结构体定义
2425

25-
**方法描述**: 触发指定服务版本的发布操作
26-
27-
**方法签名**:
26+
**DeployNewServiceParams结构体**:
2827
```go
29-
ExecuteDeployment(params *DeployParams) (*OperationResult, error)
28+
type DeployNewServiceParams struct {
29+
Service string `json:"service"` // 必填,服务名称
30+
Version string `json:"version"` // 必填,目标版本号
31+
totalNum int `json:"totalNum"` // 必填,新建实例数量
32+
PackageURL string `json:"package_url"` // 必填,包下载URL
33+
}
3034
```
3135

32-
**输入参数**:
36+
**DeployNewVersionParams结构体**:
3337
```go
34-
type DeployParams struct {
38+
type DeployNewVersionParams struct {
3539
Service string `json:"service"` // 必填,服务名称
3640
Version string `json:"version"` // 必填,目标版本号
3741
Instances []string `json:"instances"` // 必填,实例ID列表
3842
PackageURL string `json:"package_url"` // 必填,包下载URL
3943
}
4044
```
4145

42-
**返回结果**:
46+
**RollbackParams结构体**:
47+
```go
48+
type RollbackParams struct {
49+
Service string `json:"service"` // 必填,服务名称
50+
TargetVersion string `json:"target_version"` // 必填,目标版本号
51+
Instances []string `json:"instances"` // 必填,实例ID列表
52+
PackageURL string `json:"package_url"` // 必填,包下载URL
53+
}
54+
```
55+
56+
**OperationResult结构体**:
4357
```go
4458
type OperationResult struct {
4559
Service string `json:"service"` // 服务名称
@@ -49,26 +63,44 @@ type OperationResult struct {
4963
}
5064
```
5165

52-
### 2.3 ExecuteRollback方法
66+
### 2.3 DeployNewService方法
5367

54-
**方法描述**: 对指定实例执行回滚操作,支持单实例或批量实例回滚
68+
**方法描述**: 部署新服务并创建指定数量的实例
5569

5670
**方法签名**:
5771
```go
58-
ExecuteRollback(params *RollbackParams) (*OperationResult, error)
72+
DeployNewService(params *DeployNewServiceParams) (*OperationResult, error)
5973
```
6074

61-
**输入参数**:
75+
**输入参数**: `*DeployNewServiceParams` - 新服务部署参数
76+
77+
**返回结果**: `*OperationResult` - 操作结果
78+
79+
### 2.4 DeployNewVersion方法
80+
81+
**方法描述**: 触发指定服务版本的发布操作
82+
83+
**方法签名**:
6284
```go
63-
type RollbackParams struct {
64-
Service string `json:"service"` // 必填,服务名称
65-
TargetVersion string `json:"target_version"` // 必填,目标版本号
66-
Instances []string `json:"instances"` // 必填,实例ID列表
67-
PackageURL string `json:"package_url"` // 必填,包下载URL
68-
}
85+
DeployNewVersion(params *DeployNewVersionParams) (*OperationResult, error)
6986
```
7087

71-
**返回结果**: `*OperationResult` - 使用通用的操作结果结构体
88+
**输入参数**: `*DeployNewVersionParams` - 版本发布参数
89+
90+
**返回结果**: `*OperationResult` - 操作结果
91+
92+
### 2.5 ExecuteRollback方法
93+
94+
**方法描述**: 对指定实例执行回滚操作,支持单实例或批量实例回滚
95+
96+
**方法签名**:
97+
```go
98+
ExecuteRollback(params *RollbackParams) (*OperationResult, error)
99+
```
100+
101+
**输入参数**: `*RollbackParams` - 回滚参数
102+
103+
**返回结果**: `*OperationResult` - 操作结果
72104

73105
## 3. InstanceManager接口
74106

@@ -83,7 +115,7 @@ type InstanceManager interface {
83115
}
84116
```
85117

86-
### 3.2 数据结构定义
118+
### 3.2 结构体定义
87119

88120
**InstanceInfo结构体**:
89121
```go
@@ -136,6 +168,7 @@ instanceID string // 必填,实例ID
136168

137169
**返回结果**: `[]*VersionInfo` - 版本历史数组
138170

171+
139172
## 4. 内部工具函数
140173

141174
### 4.1 ValidatePackageURL函数
@@ -171,13 +204,13 @@ version ...string // 选填,指定版本号进行过滤,未输入则默
171204

172205
**返回结果**: `[]string` - 实例ID数组
173206

174-
### 4.3 GetInstanceHost函数
207+
### 4.3 GetInstanceIP函数
175208

176209
**函数描述**: 根据实例ID获取实例的IP地址
177210

178211
**函数签名**:
179212
```go
180-
func GetInstanceHost(instanceID string) (string, error)
213+
func GetInstanceIP(instanceID string) (string, error)
181214
```
182215

183216
**输入参数**:
@@ -218,3 +251,112 @@ instanceID string // 必填,实例ID
218251
```
219252

220253
**返回结果**: `bool` - 健康检查结果,true表示实例有响应,false表示无响应
254+
255+
### 4.6 GetAvailableHosts函数
256+
257+
**函数描述**: 获取所有可用的主机列表
258+
259+
**函数签名**:
260+
```go
261+
func GetAvailableHosts() ([]string, error)
262+
```
263+
264+
**输入参数**: 无
265+
266+
**返回结果**: `[]string` - 可用主机列表,获取失败时返回错误信息
267+
268+
### 4.7 GetHostIp函数
269+
270+
**函数描述**: 根据主机名获取主机IP地址
271+
272+
**函数签名**:
273+
```go
274+
func GetHostIp(hostName string) (string, error)
275+
```
276+
277+
**输入参数**:
278+
```go
279+
hostName string // 必填,主机名称
280+
```
281+
282+
**返回结果**: `string` - 主机的IP地址,获取失败时返回错误信息
283+
284+
### 4.8 CheckHostHealth函数
285+
286+
**函数描述**: 判断主机运行状态,用于发布前验证目标主机的可用性
287+
288+
**函数签名**:
289+
```go
290+
func CheckHostHealth(hostIpAddress string) (bool, error)
291+
```
292+
293+
**输入参数**:
294+
```go
295+
hostIpAddress string // 必填,主机IP地址
296+
```
297+
298+
**返回结果**: `bool` - 健康检查结果,true表示主机有响应,false表示无响应
299+
300+
### 4.9 SelectHostForNewInstance函数
301+
302+
**函数描述**: 为新实例选择合适的主机
303+
304+
**函数签名**:
305+
```go
306+
func SelectHostForNewInstance(availableHosts []string, service string, version string) (string, error)
307+
```
308+
309+
**输入参数**:
310+
```go
311+
availableHosts []string // 必填,可用主机列表
312+
service string // 必填,服务名称
313+
version string // 必填,版本号
314+
```
315+
316+
**返回结果**: `string` - 选择的主机名,选择失败时返回错误信息
317+
318+
### 4.10 GenerateInstanceID函数
319+
320+
**函数描述**: 根据服务名生成实例ID
321+
322+
**函数签名**:
323+
```go
324+
func GenerateInstanceID(serviceName string) (string, error)
325+
```
326+
327+
**输入参数**:
328+
```go
329+
serviceName string // 必填,服务名称
330+
```
331+
332+
**返回结果**: `string` - 生成的实例ID,生成失败时返回错误信息
333+
334+
### 4.11 GenerateInstanceIP函数
335+
336+
**函数描述**: 生成实例IP地址
337+
338+
**函数签名**:
339+
```go
340+
func GenerateInstanceIP() (string, error)
341+
```
342+
343+
**输入参数**: 无
344+
345+
**返回结果**: `string` - 生成的实例IP地址,生成失败时返回错误信息
346+
347+
### 4.12 GenerateInstance函数
348+
349+
**函数描述**: 创建实例
350+
351+
**函数签名**:
352+
```go
353+
func GenerateInstance(instanceID string, instanceIP string) error
354+
```
355+
356+
**输入参数**:
357+
```go
358+
instanceID string // 必填,实例ID
359+
instanceIP string // 必填,实例IP地址
360+
```
361+
362+
**返回结果**: `error` - 创建失败时返回错误信息

0 commit comments

Comments
 (0)