鍍金池/ 問(wèn)答/Java  Python  GO  HTML/ SSH or Agent的技術(shù)選型?

SSH or Agent的技術(shù)選型?

背景

目前項(xiàng)目中會(huì)使用了Iaas中的vm,所有操作都是通過(guò)ssh連上去的。pm表示要不要寫(xiě)個(gè)agent在里面用,現(xiàn)在每次操作都ssh一下都很惡心。

談?wù)勎艺J(rèn)為使用ssh的好處:

  • 代碼集中在一處,不需要分發(fā)
  • 不需要維護(hù)agent這么一個(gè)進(jìn)程的生命周期,以及檢測(cè)它的心跳

缺點(diǎn):

  • 不支持異步

我想問(wèn)的問(wèn)題

  • ssh的開(kāi)銷(xiāo)大嗎?在我看來(lái)似乎和寫(xiě)一個(gè)基于web server 的agent差不多
  • 大家一般是如何選型的?為什么這么選?
回答
編輯回答
抱緊我
背景
目前項(xiàng)目中會(huì)使用了Iaas中的vm,所有操作都是通過(guò)ssh連上去的。pm表示要不要寫(xiě)個(gè)agent在里面用,現(xiàn)在每次操作都ssh一下都很惡心。

談?wù)勎艺J(rèn)為使用ssh的好處:
代碼集中在一處,不需要分發(fā)
不需要維護(hù)agent這么一個(gè)進(jìn)程的生命周期,以及檢測(cè)它的心跳
缺點(diǎn):

不支持異步
我想問(wèn)的問(wèn)題
ssh的開(kāi)銷(xiāo)大嗎?在我看來(lái)似乎和寫(xiě)一個(gè)基于web server 的agent差不多
大家一般是如何選型的?為什么這么選?

這個(gè)東西以前做過(guò)類(lèi)似的,也有過(guò)反思,甚至設(shè)計(jì)的原型和你說(shuō)的一模一樣。

例如,我為什么要用基于web server的agent呢,我干嘛不用tcp長(zhǎng)連接到服務(wù)端,這樣執(zhí)行的結(jié)果可以流式傳輸?shù)秸{(diào)用方,他那邊顯示起來(lái)比較平滑,不用每個(gè)命令執(zhí)行完等結(jié)果。
但是我這樣搞的話,中控端流量和日志存儲(chǔ)就成了問(wèn)題了啊。
如果我的業(yè)務(wù)都在云上,如果不同機(jī)房網(wǎng)絡(luò)不互通的話,我又要蛋疼地搞點(diǎn)兼容的事情……
例如,agent的生命周期,為什么我要檢測(cè)她的心跳呢?機(jī)器上萬(wàn)臺(tái)的話,任何可能的事情都會(huì)發(fā)生啊,修復(fù)起來(lái)太蛋疼了。但是我不處理的話……所以后面我會(huì)考慮用ssh來(lái)修復(fù)agent啊。

我假設(shè)你所有的機(jī)器都是linux,發(fā)行版為同一種。

SSH:

  1. 依賴(lài)于ssh的速度,一旦網(wǎng)絡(luò)抖動(dòng),ssh操作便會(huì)失敗。(低概率/風(fēng)險(xiǎn))
  2. 依賴(lài)于key,如果你安全策略不夠嚴(yán)謹(jǐn),或者管理比不嚴(yán)格的話,那么必然會(huì)造成root key的泛濫。(安全風(fēng)險(xiǎn)高)
  3. 開(kāi)源技術(shù)很成熟,你很容易就能用幾行python包裝出一個(gè)比較完善的腳本,或者寫(xiě)出一個(gè)ansible的配置。(用起來(lái)簡(jiǎn)單)

AGENT:

  1. 依賴(lài)于中控端。如果你不打算搞個(gè)中控端,那和ssh沒(méi)本質(zhì)區(qū)別。
  2. 其實(shí)和SSH一樣,依賴(lài)于網(wǎng)絡(luò),一旦抖動(dòng)也會(huì)出問(wèn)題。
  3. 保活。如果你的公司稍微大點(diǎn)的話,會(huì)有各種亂七八糟的原因能讓你的agent不起作用,甚至被kill。雖然處理起來(lái)沒(méi)啥問(wèn)題,但是這個(gè)活總得有人來(lái)干。(低風(fēng)險(xiǎn))
  4. 維護(hù)。(成本中等)
  5. agent其實(shí)可以不用中間代碼,因?yàn)橐环矫婀ぷ髁勘容^大,一方面教育成本和學(xué)習(xí)成本也比較高。只是向agent下發(fā)shell腳本、python腳本等也可以完成相同的功能,沒(méi)問(wèn)題的。

大公司有各種審計(jì)、安全方面的需求,會(huì)把這種事情統(tǒng)一到某個(gè)地方,搞個(gè)中控端,所有的批量操作必須通過(guò)中控端。模式也不一樣,有些用agent,有些用ssh,只有中控端才是必須要有的。

再說(shuō)的直白點(diǎn),
你是個(gè)小公司,小于30臺(tái)機(jī)器或者小于50臺(tái)機(jī)器的話,不建議考慮agent模式。
沒(méi)那個(gè)需求,投入的成本大而收效低。
基于各種第三方框架包裝一個(gè)就好了嘛,嫌麻煩就ansible用起。

2017年11月30日 11:48
編輯回答
遺莣
  • 如果管理的OS都是同一類(lèi)的,比如Linux,那么用ssh最簡(jiǎn)單了。
  • 如果還有其他的OS,那SSH可能就不好使了,而agent可以一定程度上屏蔽掉OS之間的差異。比如puppet這類(lèi)解決方案,實(shí)際下發(fā)的操作指令并不是實(shí)實(shí)在在在機(jī)器上執(zhí)行的指令,而是一種中間代碼,由agent將中間代碼翻譯成當(dāng)前OS實(shí)際該執(zhí)行的本地命令。
2017年6月26日 13:59