Skip to content

Commit c162ac4

Browse files
author
谢育政
committed
docs: 更新文档
1 parent 06cff1e commit c162ac4

4 files changed

Lines changed: 160 additions & 8 deletions

File tree

README.md

Lines changed: 160 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,173 @@
11
<img src="https://github.com/troopstack/troop/raw/master/assets/troop.png" width="200">
22
<br>
3-
Troop is an operation and maintenance automation infrastructure, a server centralized management system.
3+
Troop是基于Go语言开发的运维自动化管理工具,能够对服务器实现批量操作,并且完美支持Linux和Windows系统。
44

5-
## Documentations
6-
- [Getting Started](https://github.com/kurolz/troop-service)
7-
- [Troop API](https://troop.docs.apiary.io/)
8-
- [Architecture](https://www.processon.com/view/link/5dc23dace4b04913a28be048)
95

10-
## Build from source
6+
## 文档
7+
- [快速安装](https://github.com/kurolz/troop-service)
8+
- [API文档](https://troop.docs.apiary.io/)
119

12-
```bash
10+
## 源码启动
11+
```shell
1312
git clone https://github.com/troopstack/troop
1413
cd troop
1514
./control build
1615
```
1716

18-
## Contributors
17+
## 模块
18+
- 服务端:General
19+
- 客户端:Scout
20+
- 文件服务器:FileManager
21+
- 命令行工具:Client
22+
23+
## 类或术语说明
24+
- General: Troop系统中的服务端,是所有Scout的控制器。
25+
- Scout: Troop系统中的客户端,是运行在每台服务器上的Agent。
26+
- 握手: 密钥交换过程,服务端和客户端互相交换并保存对方的「RSA公钥」和「AES密钥」。
27+
28+
## 特点
29+
- 高可用:Scout和General通过单向RPC通信,Server无状态可横向扩缩
30+
- 安全性:传输过程中的所有数据都通过RSA或旋转AES加密
31+
- 速度快:充分利用Go语言的特性提高性能
32+
- 可扩展:任何语言编写的脚本或二进制文件,可作为插件下发给Scout
33+
- 自升级:Scout和插件互相管理,通过Scout管理插件的版本,反过来通过插件也能管理Scout的版本
34+
35+
## 用户交互
36+
- API调用
37+
- 命令行工具
38+
39+
## 系统架构图
40+
![系统架构图](assets/infra.png)
41+
42+
## 任务下发
43+
##### 默认支持三种基础任务:
44+
- 检测连通性
45+
- 执行Command
46+
- 推送文件
47+
48+
##### 有四种指定任务执行主机的方式:
49+
1. 指定一个或多个主机名执行
50+
3. 指定操作系统执行
51+
4. 指定带Tag的主机执行
52+
5. 指定带Tag的主机中任意一台执行
53+
54+
##### 任务下发过程如下图:![任务下发过程](assets/taskPush.png)
55+
56+
57+
## 数据安全性
58+
Troop服务端和客户端之间的交互通过公私钥和旋转密钥来加密数据。
59+
- 客户端第一次启动时会生成一对自己的「RSA密钥」。
60+
- 客户端和服务端每次重启都会重新生成自己的「AES密钥」。
61+
- 客户端每次重启都会向服务端发起一次握手,把主机信息包括公钥和AES推送给服务端,服务端接收校验后保存主机信息,并返回自己的AES给客户端保存。
62+
- 服务端每次重启都会通知所有客户端重新握手。
63+
64+
##### 密钥使用:
65+
- 客户端RSA密钥(A):为了保证B密钥不泄露,服务端向客户端传输B密钥时通过A密钥加密。
66+
- 服务端AES密钥(B):服务端向客户端推送的消息使用B密钥加密。
67+
- 客户端AES密钥(C):客户端向服务端推送任务结果使用C密钥加密。
68+
69+
70+
##### 客户端和服务端握手交换密钥的过程如下图:![握手过程](assets/handshake.png)
71+
72+
73+
## 插件
74+
使用插件来扩展功能,来完成一些个性化任务。
75+
76+
插件是任意编程语言编写的脚本打包成的二进制文件,并且提供执行参数。所有插件通过Git管理,自动下发到Scout。
77+
78+
Troop自带了**ScoutManager**插件。如果成千上万台机器上安装了Scout,Scout的更新维护就成了大问题。服务端可以向ScoutManager下发停止、重启、升级Scout等任务。从而实现自升级,不需要手动到服务器上维护Scout。
79+
80+
插件通过规范的文件名来管理版本。
81+
82+
##### 插件命名规则:
83+
- **Linux**[插件名]-[操作系统]-v[版本号]
84+
- **Windows**[插件名]-[操作系统]-v[版本号].exe
85+
86+
如ScoutManager插件:
87+
- **Linux**: scout_manager-linux-v1.0.2
88+
- **Windows**: scout_manager-win-v1.0.2.exe
89+
90+
91+
## 空闲内存占用
92+
93+
| 服务 | 内存 |
94+
|------|------|
95+
| General | 72MB |
96+
| FM | 50MB |
97+
| Scout | 6MB |
98+
99+
## 性能测试对比
100+
<table>
101+
<tr>
102+
<th rowspan="3">场景</th>
103+
<th colspan="3">耗时(s)</th>
104+
<th colspan="3">成功率(成功 / 所有)</th>
105+
<tr>
106+
<tr>
107+
<th>Troop</th>
108+
<th>SaltStack</th>
109+
<th>Ansible</th>
110+
<th>Troop</th>
111+
<th>SaltStack</th>
112+
<th>Ansible</th>
113+
<tr>
114+
<tr>
115+
<td>ifconfig命令测试</td>
116+
<td>0.230</td>
117+
<td>0.735</td>
118+
<td>5.557</td>
119+
<td>15 / 15</td>
120+
<td>15 / 15</td>
121+
<td>15 / 15</td>
122+
</tr>
123+
<tr>
124+
<td>小文件(21Byte)分发</td>
125+
<td>0.302</td>
126+
<td>0.612</td>
127+
<td>6.368</td>
128+
<td>15 / 15</td>
129+
<td>15 / 15</td>
130+
<td>15 / 15</td>
131+
</tr>
132+
<tr>
133+
<td>大文件(30k)分发</td>
134+
<td>0.355</td>
135+
<td>0.672</td>
136+
<td>6.292</td>
137+
<td>15 / 15</td>
138+
<td>15 / 15</td>
139+
<td>15 / 15</td>
140+
</tr>
141+
<tr>
142+
<td>文件读取</td>
143+
<td>0.192</td>
144+
<td>0.740</td>
145+
<td>5.519</td>
146+
<td>15 / 15</td>
147+
<td>15 / 15</td>
148+
<td>15 / 15</td>
149+
</tr>
150+
<tr>
151+
<td>批量脚本执行(5s等待)</td>
152+
<td>5.208</td>
153+
<td>6.032</td>
154+
<td>7.614</td>
155+
<td>15 / 15</td>
156+
<td>15 / 15</td>
157+
<td>15 / 15</td>
158+
</tr>
159+
<tr>
160+
<td>多机器(45台,5s等待)</td>
161+
<td>5.495</td>
162+
<td>6.937</td>
163+
<td>6.889</td>
164+
<td>45 / 45</td>
165+
<td>45 / 45</td>
166+
<td>45 / 45</td>
167+
</tr>
168+
</table>
169+
170+
## 开发者
19171

20172
<a href="https://github.com/troopstack/troop/contributors"><img src="https://opencollective.com/troop/contributors.svg?button=false" /></a>
21173

assets/handshake.png

368 KB
Loading

assets/infra.png

330 KB
Loading

assets/taskPush.png

333 KB
Loading

0 commit comments

Comments
 (0)