Skip to content

Commit bd39081

Browse files
committed
简单的设计文档
1 parent 640bb46 commit bd39081

File tree

1 file changed

+49
-44
lines changed

1 file changed

+49
-44
lines changed

docs/cn/design/design.md

+49-44
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,75 @@
66

77
## 组件
88

9-
Bistoury涉及到的组件有用户系统,agent,proxy,ui,注册中心,负载均衡器,应用中心
9+
Bistoury涉及到的组件有用户系统,agent,proxy,ui,注册中心,负载均衡器,应用中心。
1010

1111
其中用户系统就是待诊断的正在运行的应用。
1212

13-
归属于Bistoury的必须要有的模块有三个:agent,proxy,ui。
13+
归属于Bistoury的必须要有的模块有三个:agent,proxy,ui.
14+
15+
一次命令执行的数据流向为 ui -> proxy -> agent -> proxy -> ui
16+
17+
## 一次命令的执行
18+
19+
### agent连接proxy
20+
21+
![agentConnectToProxy](../../image/design/agent_connect_to_proxy.png)
22+
23+
1. agent通过域名访问proxy
24+
2. 访问请求打到proxy2这台机器上
25+
3. proxy2返回自身ip和注册信息
26+
4. agent接收到注册信息
27+
5. agent注册到proxy2上,建立连接
28+
29+
### ui根据命令选择proxy
30+
31+
![agentConnectToProxy](../../image/design/ui_choose_proxy.png)
32+
33+
1. proxy集群机器全部注册到注册中心上
34+
2. ui从注册中心获取到全部的proxy地址信息
35+
3. ui从应用中心拿到要执行命令的机器信息
36+
4. ui请求proxy1,判断要执行命令的机器是否与proxy1连接
37+
5. ui请求proxy2,判断要执行命令的机器是否与proxy2连接
38+
6. proxy1返回结果为否
39+
7. proxy2返回连接存在
40+
41+
### 命令执行与结果返回
42+
43+
![agentConnectToProxy](../../image/design/command_execute.png)
44+
45+
1. ui将命令信息发给proxy2
46+
2. proxy2将命令发给agent
47+
3. agent将命令发给用户系统(如果需要访问用户系统的话)
48+
4. 用户系统将结果返回给agent(如果需要访问用户系统的话)
49+
5. agent将结果返回给proxy2
50+
6. proxy2将结果返回给ui
51+
52+
## 具体组件说明
1453

1554
### agent
1655

17-
agent接收从proxy传来的命令,执行具体命令,返回结果给proxy。
56+
agent和待诊断用户系统部署在同一台机器上,接收从proxy传来的命令,执行具体命令,返回结果给proxy。
1857

19-
agent应该和待诊断用户系统部署在同一台机器上,通过待诊断系统pid和待诊断系统连接,
20-
这也意味着,agent应该在每一台有用户系统的机器上部署。
58+
这也意味着,agent应该在每一台有用户系统的机器上部署,它通过待诊断系统pid和待诊断系统进行连接,
2159

2260
目前只支持一个agent对应一个系统,对单机多用户系统的支持还不好,这个在后续的开发计划中。
2361

2462
### proxy
2563

26-
proxy接收从ui传来的命令,传递命令给agent,接收从agent传来的结果并返回给ui
64+
proxy是一个后端服务,它接收从ui传来的命令,并将命令给agent,最后接收从agent传来的结果并返回给ui
2765

28-
proxy应该部署在多台独立机器上,有一个proxy集群提供服务
66+
proxy应该部署在多台独立机器上,作为proxy集群提供服务
2967

3068
### ui
3169

32-
ui接收从用户传来的命令,传递命令给proxy,接收从proxy传来的结果并展示给用户。
70+
ui提供图形化和命令行界面,接收从用户传来的命令,传递命令给proxy,接收从proxy传来的结果并展示给用户。
3371

3472
ui作为和用户交互的组件也应该部署在多台独立机器上。
3573

3674
### 负载均衡器
3775

3876
agent需要在启动时就注册到一个proxy上,建立和proxy的连接,这就需要对proxy做一个负载均衡。
39-
目前采用的是给proxy提供一个域名,agent在启动时通过域名访问一个url,具体访问到的proxy会把自身的ip和一些信息返回给agent,agent再根据这个ip去建立一个netty连接。
77+
目前采用的是给proxy提供一个域名,agent在启动时通过域名访问,具体访问到的proxy会把自身的ip和一些信息返回给agent,agent再根据这个ip去建立一个netty连接。
4078

4179
为什么agent只注册到一个proxy而不是全部?一个proxy可以接受上万agent的连接,但机器越来越多,总有扛不住的时候。
4280

@@ -60,15 +98,15 @@ ui采用的是遍历方式,那就需要知道所有proxy的地址,而proxy
6098

6199
应用中心是Bistoury用来获取用户的应用信息和机器信息的地方。
62100

63-
Bistoury内置了一个简单的应用中心,但想要或者完整和舒适的体验,还是需要用户接入自己的应用中心(通过实现bistoury-application模块的相关api接入)。
101+
Bistoury内置了一个简单的应用中心,但想要获得完整而舒适的体验,还是需要用户接入自己的应用中心(通过实现bistoury-application模块的相关api接入)。
64102

65103
Bistoury所有命令入口的第一级都是应用,在选择了应用后,如果有第二级入口那就是具体机器。
66104

67105
为什么要这么设置,是因为我们的应用往往部署在不止一台机器上。
68106

69107
- 你可能记不住具体部署的机器名,但应用名应该是很清楚的,或者说很容易通过关键字搜索到,然后再在应用下选择具体机器,更加方便和直观
70108

71-
- 虽然部署在不同机器上,但是我们对外提供的服务是一个整体,从应用的维度考虑问题,视角更高
109+
- 虽然部署在不同机器上,但是我们对外提供的服务是一个整体,从应用的维度考虑问题,可以获得更高的视角
72110

73111
- 可以在应用的层面做一些功能,比如我们已经提供了按应用grep日志等功能
74112

@@ -81,39 +119,6 @@ Bistoury所有命令入口的第一级都是应用,在选择了应用后,如
81119
- 一种是用户系统提供一个统一的url给agent获取用户pid等信息。ui通过ip或域名等信息选择proxy,并将用户系统端口号传给agent,
82120
agent通过端口号访问本机url获取pid来连接应用。
83121

84-
## 一次命令的执行
85-
86-
### agent连接proxy
87-
88-
![agentConnectToProxy](../../image/design/agent_connect_to_proxy.png)
89-
90-
1. agent通过域名访问proxy
91-
2. 访问请求打到proxy2这台机器上
92-
3. proxy2返回自身ip和注册信息
93-
4. agent接收到注册信息
94-
5. agent注册到proxy2上,建立连接
95-
96-
### ui根据命令选择proxy
97-
98-
![agentConnectToProxy](../../image/design/ui_choose_proxy.png)
99122

100-
1. proxy集群机器全部注册到注册中心上
101-
2. ui从注册中心获取到全部的proxy地址信息
102-
3. ui从应用中心拿到要执行命令的机器信息
103-
4. ui请求proxy1,判断要执行命令的机器是否与proxy1连接
104-
5. ui请求proxy2,判断要执行命令的机器是否与proxy2连接
105-
6. proxy1返回结果为否
106-
7. proxy2返回连接存在
107-
108-
### 命令执行与结果返回
109-
110-
![agentConnectToProxy](../../image/design/command_execute.png)
111-
112-
1. ui将命令信息发给proxy2
113-
2. proxy2将命令发给agent
114-
3. agent将命令发给用户系统(如果需要访问用户系统的话)
115-
4. 用户系统将结果返回给agent(如果需要访问用户系统的话)
116-
5. agent将结果返回给proxy2
117-
6. proxy2将结果返回给ui
118123

119124

0 commit comments

Comments
 (0)