免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 23488 | 回复: 34
打印 上一主题 下一主题

详细讨论一个常见的网络工具如何设计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-01 17:49 |只看该作者 |正序浏览
本帖最后由 duanjigang 于 2011-03-10 18:11 编辑

2011-03-10 18:00搞了三四天终于完成了一个版本,先做成了实时的反馈结果,测试一天,再调试多进程的异步方式,哈哈,测试命令如下:

  1. #test batch upload file
  2. ./cmclient -p 12345 -f ip1.conf -u 1.txt -d /tmp/1/2  -n 20

  3. #test batch run commds
  4. ./cmclient -p 12345 -f ip.conf -c "uname -a"  -n 20

  5. #test single host command running
  6. ./cmclient -p 12345 -h 10.32.20.200 -c "uname -a"  -n 20

  7. #test single host file upload
  8. ./cmclient -p 12345 -h 10.32.20.200 -u Makefile -d /tmp/  -n 20
复制代码
运行结果如下:

  1. deliver file [1.txt] to directory [/tmp/1/2]:
  2. 10.32.20.211
  3. success
  4. 10.32.20.200
  5. success
  6. 10.32.20.2
  7. failed
  8. run command [uname -a]:
  9. 10.32.20.211
  10. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  11. 10.32.20.224
  12. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  13. 10.32.20.227
  14. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  15. 10.32.20.228
  16. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  17. 10.32.20.231
  18. 10.32.20.200
  19. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  20. 10.32.20.214
  21. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  22. 10.32.20.217
  23. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  24. 10.32.20.218
  25. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  26. 10.32.20.219
  27. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  28. run command [uname -a]:
  29. 10.32.20.200
  30. Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
  31. deliver file [Makefile] to directory [/tmp/]:
  32. 10.32.20.200
  33. success
复制代码
========================================
需求是这样,做一个部署在客户端的程序和部署在服务端的程序,具体目标如下:
客户端通过参数方式,向多个服务端发送指令,客户端期望知道服务端执行的最终结果。

考虑到的问题是:
第一:接收命令的服务器可能比较多,上万台,因此,客户端需要多线程去发送,当然不能一个主机一个线程吧?应该给每个线程分配N个节点,尽量平均。
第二:客户端发给服务器的命令不一定就是立刻能返回的,可能执行时间比较长,比如让服务器去下载一个文件,然后返回当前目录的大小,因此,我想客户端不能在当前连接中等待服务端返回执行结果吧,也就是说,服务端需要启动一个线程或者进程异步去执行这个任务。
第三:如果服务端异步执行命令,等命令执行完以后,怎么通知客户端,我现在能想到的就是,客户端在分发命令时,把自己的IP和端口以及命令ID一并发给每个服务器,服务器上的线程执行完以后,再连接该命令对应的客户端的地址,把命令ID以及结果反馈给原来发送命令的客户端机器。

关于以上三点,不知诸位有无意见或者更好的方法,谢谢讨论!

附上我设计的结构图,欢迎讨论


2011-03-03
今天实现了个基本的模型,能跑起来了,把结构修改了下,更新上来,但是如果服务器过多的话,可能出现反馈时N对1的情况,会对客户端主机造成类似DOS synflood的攻击吧?呵呵,不知道是不是这样,专业人士帮分析下?详细信息见23楼

论坛徽章:
0
35 [报告]
发表于 2012-08-07 10:59 |只看该作者
终于看完了~~~

论坛徽章:
0
34 [报告]
发表于 2011-03-24 15:44 |只看该作者
有上的,只是没有鸟你,哇哈哈

论坛徽章:
0
33 [报告]
发表于 2011-03-22 09:44 |只看该作者
可以参照,集中配置管理的工具去开发优化,比如Puppet,Cfengine,Func等其他的开源系统去做,向资产管理和运 ...
vema 发表于 2011-03-21 16:39



    哈哈,我同事就建议参考puppet,哥一切都好,你丫最近没上QQ啊

论坛徽章:
0
32 [报告]
发表于 2011-03-21 16:39 |只看该作者
本帖最后由 duanjigang 于 2011-03-22 09:43 编辑

可以参照,集中配置管理的工具去开发优化,比如Puppet,Cfengine,Func等其他的开源系统去做,向资产管理和运维自动化方向去走?好久不见,你丫可好

论坛徽章:
0
31 [报告]
发表于 2011-03-10 18:09 |只看该作者
呵呵,修改了一天,终于重构完成,明天增加多进程的异步方式

论坛徽章:
0
30 [报告]
发表于 2011-03-10 15:49 |只看该作者
呵呵,今天把结构重构了下,发现客户端模型回到了cme_scanner的结构去,还是多线程。
区别是:
1:通讯由ssh的自动登录改成ICE的接口。
2:增加了文件传输功能。
关于cme_scanner的第一版本和第二版本请参考:

最早版本:http://linux.chinaunix.net/bbs/thread-1028015-1-1.html
第二版:http://bbs.chinaunix.net/thread-1263669-1-1.html

这个也算是第三版了吧,会带上异步回复结果的功能。

论坛徽章:
0
29 [报告]
发表于 2011-03-09 17:35 |只看该作者
我最终还是遵循了村长的原则,如果是需要异步返回结果的,就不需要客户端的主线程整理并打印运行结果信息,因此各个运行模块是独立的,运行完就退出,而且跟主线程没关系,因此采用多进程。
   如果是需要实时返回运行结果的方式,需要等待各个运行模块运行结束后,统一打印返回信息,从程序逻辑上说,这是多个运行模块协作的关系,共同完成结果列表,因此采用多线程。
  
修改下

论坛徽章:
0
28 [报告]
发表于 2011-03-09 17:24 |只看该作者
多进程遇到问题了,子进程和父进程输出的信息不能被重定向到一个文件中,悲惨喔。。
我改成多线程吧,唉。。让主线程集中输出信息

论坛徽章:
0
27 [报告]
发表于 2011-03-09 14:23 |只看该作者
今天把文件传输测试通了,呵呵。
分析下,基本上所有的任务都能分开成文件和命令来执行。
首先把任务在控制中心写成脚本文件。
其次,把文件通过工具传输到目的机器,
最后,通过工具远程执行脚本文件。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP