- 論壇徽章:
- 0
|
本帖最后由 duanjigang 于 2011-03-10 18:11 編輯
2011-03-10 18:00搞了三四天終于完成了一個(gè)版本,先做成了實(shí)時(shí)的反饋結(jié)果,測(cè)試一天,再調(diào)試多進(jìn)程的異步方式,哈哈,測(cè)試命令如下:
- #test batch upload file
- ./cmclient -p 12345 -f ip1.conf -u 1.txt -d /tmp/1/2 -n 20
- #test batch run commds
- ./cmclient -p 12345 -f ip.conf -c "uname -a" -n 20
- #test single host command running
- ./cmclient -p 12345 -h 10.32.20.200 -c "uname -a" -n 20
- #test single host file upload
- ./cmclient -p 12345 -h 10.32.20.200 -u Makefile -d /tmp/ -n 20
復(fù)制代碼 運(yùn)行結(jié)果如下:
- deliver file [1.txt] to directory [/tmp/1/2]:
- 10.32.20.211
- success
- 10.32.20.200
- success
- 10.32.20.2
- failed
- run command [uname -a]:
- 10.32.20.211
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.224
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.227
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.228
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.231
- 10.32.20.200
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.214
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.217
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.218
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- 10.32.20.219
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- run command [uname -a]:
- 10.32.20.200
- Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
- deliver file [Makefile] to directory [/tmp/]:
- 10.32.20.200
- success
復(fù)制代碼 ========================================
需求是這樣,做一個(gè)部署在客戶端的程序和部署在服務(wù)端的程序,具體目標(biāo)如下:
客戶端通過(guò)參數(shù)方式,向多個(gè)服務(wù)端發(fā)送指令,客戶端期望知道服務(wù)端執(zhí)行的最終結(jié)果。
考慮到的問(wèn)題是:
第一:接收命令的服務(wù)器可能比較多,上萬(wàn)臺(tái),因此,客戶端需要多線程去發(fā)送,當(dāng)然不能一個(gè)主機(jī)一個(gè)線程吧?應(yīng)該給每個(gè)線程分配N個(gè)節(jié)點(diǎn),盡量平均。
第二:客戶端發(fā)給服務(wù)器的命令不一定就是立刻能返回的,可能執(zhí)行時(shí)間比較長(zhǎng),比如讓服務(wù)器去下載一個(gè)文件,然后返回當(dāng)前目錄的大小,因此,我想客戶端不能在當(dāng)前連接中等待服務(wù)端返回執(zhí)行結(jié)果吧,也就是說(shuō),服務(wù)端需要啟動(dòng)一個(gè)線程或者進(jìn)程異步去執(zhí)行這個(gè)任務(wù)。
第三:如果服務(wù)端異步執(zhí)行命令,等命令執(zhí)行完以后,怎么通知客戶端,我現(xiàn)在能想到的就是,客戶端在分發(fā)命令時(shí),把自己的IP和端口以及命令I(lǐng)D一并發(fā)給每個(gè)服務(wù)器,服務(wù)器上的線程執(zhí)行完以后,再連接該命令對(duì)應(yīng)的客戶端的地址,把命令I(lǐng)D以及結(jié)果反饋給原來(lái)發(fā)送命令的客戶端機(jī)器。
關(guān)于以上三點(diǎn),不知諸位有無(wú)意見或者更好的方法,謝謝討論!
附上我設(shè)計(jì)的結(jié)構(gòu)圖,歡迎討論
cm.JPG (21.2 KB, 下載次數(shù): 168)
下載附件
2011-03-01 18:42 上傳
2011-03-03
今天實(shí)現(xiàn)了個(gè)基本的模型,能跑起來(lái)了,把結(jié)構(gòu)修改了下,更新上來(lái),但是如果服務(wù)器過(guò)多的話,可能出現(xiàn)反饋時(shí)N對(duì)1的情況,會(huì)對(duì)客戶端主機(jī)造成類似DOS synflood的攻擊吧?呵呵,不知道是不是這樣,專業(yè)人士幫分析下?詳細(xì)信息見23樓
cm_2011_03_03.PNG (17.84 KB, 下載次數(shù): 110)
下載附件
2011-03-03 16:10 上傳
|
|