开发一个 Agent 服务,需要注意(考虑)哪些点啊,求指导 🤣

2019-02-27 01:10:35 +08:00
 ns2250225
RT,最近业务需要做一个配置更新的 Agent,配置控制端用了 Nacos,目标节点机器( Nginx,Mysql,Redis 等),想实现一个 Agent,部署到 [目标节点机器] 上面,一个是上报节点功能的健康情况,一个是负责接受 [控制端] 的更新配置请求。
实现的语言不限(最好是 Golang 或 Python ),暂时考虑到的问题有:
( 1 )怎样保持 Agent 长期正常地工作
( 2 )使用 HTTP 还是 WebSocket 来连接 [控制端]
( 3 ) Agent 自动怎样识别 [目标节点机器] 上的服务是什么
...
PS:
走过路过千万不要错过呀,留下建议吧,共同交流学习,立个 F,实现之后会开源,💪
5582 次点击
所在节点    程序员
24 条回复
THaGKI9
2019-02-27 02:46:52 +08:00
1. supervisor
2. websocket 吧,考虑到上传下达的需求都有
3. 不懂
hanxiV2EX
2019-02-27 03:31:28 +08:00
sshd 比较合适,控制端用 ssh 远程执行命令就能获取健康。想要更新文件可以用 scp
cnnblike
2019-02-27 03:32:48 +08:00
aws 有一个专门的服务叫 cloudwatch,你找下 CloudWatch Agent 就成了
wispedia
2019-02-27 08:18:10 +08:00
1.简单点,写个定时检查进程在不在的 shell 脚本,配个 crontab
2.http
3.agent 检查当前机器上存活的进程名
firebroo
2019-02-27 08:19:43 +08:00
1. 健康检查 2. rpc 3.没懂
zw1027
2019-02-27 08:49:52 +08:00
4 楼说完了
STRRL
2019-02-27 09:04:09 +08:00
说一个自己已经实现了吧
1 supervisor
2 grpc
3 由于目标是 Java 进程,用 attach api 拿主类类名
thisisgpy
2019-02-27 09:29:40 +08:00
我司 Agent 推送数据到 Kafka
Moker
2019-02-27 09:32:01 +08:00
可以参考一下 prometheus 的实现
1.可以用守护进程 supervisor
2.http 就行 主动去拉
ns2250225
2019-02-27 09:33:17 +08:00
@STRRL supervisor 是自己另外安装配置的,还是做成 Agent 本身集成的功能呀
ns2250225
2019-02-27 09:34:06 +08:00
@Moker 有没有可能把 supervisor 的功能,集成到 Agent 里面呀,让他自己管理自己
tianshiyeben
2019-02-27 09:40:29 +08:00
https://github.com/tianshiyeben/wgcloud
看看,应该可以满足你的需求,监控 linux 服务器和应用程序的状态,包括 cpu,内存使用情况等
ns2250225
2019-02-27 09:45:47 +08:00
@firebroo 哈哈,我参考了你的 slave_sync.py ,那个 graceful_reload 的命令收下拉,👍,打算用 python2 写,因为我们的服务器都是 centos6.9 的,😭,想把 supervisor 的功能集成到 Agent 里面
ns2250225
2019-02-27 09:51:34 +08:00
我想到一个方法:就是程序自己启动一个子进程或线程去监听自己,如果自己挂了,就重新提起来,这样可以吗
STRRL
2019-02-27 09:53:42 +08:00
@ns2250225 外面的
因为我的实现里,还是一个 C/S 模型,我没办法保证 C 出问题以后,还能够有能力整治自己。
xkeyideal
2019-02-27 10:25:40 +08:00
好了很多回答,为什么第二个问题大家都考虑使用 http,websocket 或 grpc 呢,http 不能解决全双工的需求,ws 和 grpc 虽然能解决全双工的需求,但是实际需求有多少是从 agent 给 server 发消息,长连接需要解决断线重连的问题。

问题二我给的解决思路:加入一个 MQ,任务的下达通过 mq,agent 信息的长传也通过 mq,能很好的解耦
leaderOrg
2019-02-27 10:27:26 +08:00
有点很重要的,就是对宿主机的影响,你要严格控制自己的 cpu 内存 io 占用
ry_wang
2019-02-27 11:08:12 +08:00
这两年我们组主要的一个工作就是自行开发了内部的配置管理平台,负责 CDN 服务器的日常管理。目前覆盖服务器几万台,每天落到 Agent 端的任务接近 100 万次

难点主要由以下四个,花费了我们大量的时间和精力。

1. 网络连通性。CDN 节点的网络条件比较极端,各种无法互联互通。为此我们还单独实现了一套代理集群,供自己和其他业务使用。
2. 状态一致性。Agent/Server 间数据的一致性问题,资产、任务等一系列信息
3. Agent 系统资源占用。
4. 安全性。尽量避免用户直接执行 SHELL 命令,而是统一使用我们的封装。同时 SHELL JOB 将所有命令进行了封装,可能引起危险的操作全都堵死。

楼主说的这几个问题。

1. APP 更新及存活检查。我们参考了 open-falcon 的设计,采用 Agent+Updater 的模式,互备检测激活
2. 通信交互一期我们采用了 HTTP 的定时主动上报方式,不过目前已经在做迁移到 UDP 的准备工作
3. 这个和业务逻辑相关了,靠 Agent 服务发现或者 Server 主动下发都可以。

PS,我之前也发过招聘贴,一直有效,大家踊跃投简历呀
Moker
2019-02-27 11:37:30 +08:00
@ns2250225 不能自己管理自己 整个经常都退出了 要依赖外部 类似 newrelic 是会主动去 system 注册一个服务
doublleft
2019-02-27 13:15:52 +08:00
@ry_wang 设计的时候有参考过类似的开源项目吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/539074

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX