我們在《DevOps系列一:認(rèn)識事件驅(qū)動型計算》中介紹了事件驅(qū)動型計算對現(xiàn)代世界的影響。本文是系列二,對比事件驅(qū)動型計算與容器和微服務(wù)。
面向群眾的消息隊列
在某種程度上說,舊的東西會變成新的。對于Iron.io和StackStorm公司的產(chǎn)品來說,老式的消息隊列是軟件運行的核心。Iron.io甚至還單獨銷售一款消息隊列產(chǎn)品IronMQ,這個產(chǎn)品能觸發(fā)姐妹軟件IronWorker的事件。
但是,StackStorm公司的Powell說新的消息隊列跟以前還是有一些不一樣的,“新的消息隊列從你系統(tǒng)發(fā)出去,查看系統(tǒng)運行效果的好壞,并返回決策是否應(yīng)該執(zhí)行什么(任務(wù))。所有的這些都需要預(yù)定義并且寫入隊列中。不同之處在于返回方式的變化和條件邏輯的變化,以及從適合的出口出去的方式。”
StackStorm的產(chǎn)品是打算讓用戶完全管理的,不過云服務(wù)可以從用戶那里將消息隊列元素進(jìn)行合理化和抽象化,可以達(dá)到看似應(yīng)用無需任何服務(wù)器就能運行。
Lambda用戶Theodore Kim,也是Jobvite(一家軟件制造商)的SaaS業(yè)務(wù)主管說,基于云的事件驅(qū)動型計算服務(wù)能承擔(dān)自動化重任的其中一個原因是它不需要應(yīng)用調(diào)查環(huán)境,尋找發(fā)生的改變,以觸發(fā)自動化。
AWS Lambda服務(wù)在后臺是使用輪詢還是消息隊列不得而知,但是對于用戶來說,Lambda函數(shù)是馬上就可以開始工作的,并不需要等待輪詢。
Kim說:“以前,我們需要將數(shù)據(jù)放到隊列中,并且對其進(jìn)行輪詢。Lambda卻是立即起作用的。它就像是一個黑盒,所有的事情都會被Lambda服務(wù)處理,但是在我們看來,有事件觸發(fā)時,它馬上就執(zhí)行了。”
事件驅(qū)動型計算會超過微服務(wù)嗎?事件驅(qū)動型計算越來越火了,它正在追上另一個火爆的軟件開發(fā)趨勢:使用Docker的容器,以及基于微服務(wù)的軟件開發(fā)。
就像事件驅(qū)動的自動化一樣,容器和微服務(wù)也能承諾應(yīng)用的靈活性、組件間的自動化和可擴展性。事件驅(qū)動型計算和Docker并不是完全獨立的技術(shù)。事實上,在EC2 Container Service里,亞馬遜也建議引入Lambda來觸發(fā)對容器的創(chuàng)建,并對容器進(jìn)行橫向擴展。
Edeva公司的Eskilsson說:“當(dāng)我們進(jìn)行橫向擴展的時候,我并不擔(dān)心遷移到基于Docker的開發(fā)環(huán)境。但是對Yii框架進(jìn)行整合,并讓代碼推送到Iron.io,是很合理的一件事情。因此坦誠來講我并沒有看到(使用容器的)需要。”
VidRoll公司的Young稱,對于一些迫于將自有架構(gòu)遷移到云上的企業(yè),事件驅(qū)動型計算可能在架構(gòu)變更上太過跳躍了。但是容器技術(shù)提供了一種更敏捷的方式來將傳統(tǒng)的基礎(chǔ)架構(gòu)遷移到自動、云的環(huán)境。
事實上,Young的公司已經(jīng)進(jìn)行了一些開發(fā),能讓他們的應(yīng)用架構(gòu)在Lambda和Docker之間進(jìn)行切換,好讓應(yīng)用隨著Lambda的發(fā)展得以保全。Young說:“容器是有意義的,因為它比起維護(hù)一個完整的服務(wù)器來說,是一個更好的抽象品。”
StackStorm公司的Powell稱,IT企業(yè)在開發(fā)者的生產(chǎn)力和運維自由度之間會有不同的偏好。
基于容器的計算對于將負(fù)載向內(nèi)部云的遷移來說有更多的潛力。相反的,類似Lambda的東西有來自廠家的鎖定。Powell稱,“簡單地說,你的業(yè)務(wù)邏輯至少需要有一個應(yīng)用需要運行在Amazon as a service上。”