6
6
7
7
## 组件
8
8
9
- Bistoury涉及到的组件有用户系统,agent,proxy,ui,注册中心,负载均衡器,应用中心, 。
9
+ Bistoury涉及到的组件有用户系统,agent,proxy,ui,注册中心,负载均衡器,应用中心。
10
10
11
11
其中用户系统就是待诊断的正在运行的应用。
12
12
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
+ ## 具体组件说明
14
53
15
54
### agent
16
55
17
- agent接收从proxy传来的命令 ,执行具体命令,返回结果给proxy。
56
+ agent和待诊断用户系统部署在同一台机器上,接收从proxy传来的命令 ,执行具体命令,返回结果给proxy。
18
57
19
- agent应该和待诊断用户系统部署在同一台机器上,通过待诊断系统pid和待诊断系统连接,
20
- 这也意味着,agent应该在每一台有用户系统的机器上部署。
58
+ 这也意味着,agent应该在每一台有用户系统的机器上部署,它通过待诊断系统pid和待诊断系统进行连接,
21
59
22
60
目前只支持一个agent对应一个系统,对单机多用户系统的支持还不好,这个在后续的开发计划中。
23
61
24
62
### proxy
25
63
26
- proxy接收从ui传来的命令,传递命令给agent,接收从agent传来的结果并返回给ui 。
64
+ proxy是一个后端服务,它接收从ui传来的命令,并将命令给agent,最后接收从agent传来的结果并返回给ui 。
27
65
28
- proxy应该部署在多台独立机器上,有一个proxy集群提供服务 。
66
+ proxy应该部署在多台独立机器上,作为proxy集群提供服务 。
29
67
30
68
### ui
31
69
32
- ui接收从用户传来的命令 ,传递命令给proxy,接收从proxy传来的结果并展示给用户。
70
+ ui提供图形化和命令行界面,接收从用户传来的命令 ,传递命令给proxy,接收从proxy传来的结果并展示给用户。
33
71
34
72
ui作为和用户交互的组件也应该部署在多台独立机器上。
35
73
36
74
### 负载均衡器
37
75
38
76
agent需要在启动时就注册到一个proxy上,建立和proxy的连接,这就需要对proxy做一个负载均衡。
39
- 目前采用的是给proxy提供一个域名,agent在启动时通过域名访问一个url ,具体访问到的proxy会把自身的ip和一些信息返回给agent,agent再根据这个ip去建立一个netty连接。
77
+ 目前采用的是给proxy提供一个域名,agent在启动时通过域名访问 ,具体访问到的proxy会把自身的ip和一些信息返回给agent,agent再根据这个ip去建立一个netty连接。
40
78
41
79
为什么agent只注册到一个proxy而不是全部?一个proxy可以接受上万agent的连接,但机器越来越多,总有扛不住的时候。
42
80
@@ -60,15 +98,15 @@ ui采用的是遍历方式,那就需要知道所有proxy的地址,而proxy
60
98
61
99
应用中心是Bistoury用来获取用户的应用信息和机器信息的地方。
62
100
63
- Bistoury内置了一个简单的应用中心,但想要或者完整和舒适的体验 ,还是需要用户接入自己的应用中心(通过实现bistoury-application模块的相关api接入)。
101
+ Bistoury内置了一个简单的应用中心,但想要获得完整而舒适的体验 ,还是需要用户接入自己的应用中心(通过实现bistoury-application模块的相关api接入)。
64
102
65
103
Bistoury所有命令入口的第一级都是应用,在选择了应用后,如果有第二级入口那就是具体机器。
66
104
67
105
为什么要这么设置,是因为我们的应用往往部署在不止一台机器上。
68
106
69
107
- 你可能记不住具体部署的机器名,但应用名应该是很清楚的,或者说很容易通过关键字搜索到,然后再在应用下选择具体机器,更加方便和直观
70
108
71
- - 虽然部署在不同机器上,但是我们对外提供的服务是一个整体,从应用的维度考虑问题,视角更高
109
+ - 虽然部署在不同机器上,但是我们对外提供的服务是一个整体,从应用的维度考虑问题,可以获得更高的视角
72
110
73
111
- 可以在应用的层面做一些功能,比如我们已经提供了按应用grep日志等功能
74
112
@@ -81,39 +119,6 @@ Bistoury所有命令入口的第一级都是应用,在选择了应用后,如
81
119
- 一种是用户系统提供一个统一的url给agent获取用户pid等信息。ui通过ip或域名等信息选择proxy,并将用户系统端口号传给agent,
82
120
agent通过端口号访问本机url获取pid来连接应用。
83
121
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 )
99
122
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
118
123
119
124
0 commit comments