如果設(shè)計(jì)不當(dāng),一切都會(huì)有怪癖
無服務(wù)器是業(yè)界最新的流行語之一-但是,就像技術(shù)上的任何事物一樣,如果設(shè)置不正確,您的開發(fā)投資可能像紙牌屋一樣崩潰。
現(xiàn)在,所有主要的云播放器都提供某種無服務(wù)器架構(gòu)支持-帶有Lambda的AWS,帶有云功能的Google和帶有Azure功能的Microsoft。 還設(shè)計(jì)和創(chuàng)建了開源的免費(fèi)Serverless框架,以幫助開發(fā)人員自動(dòng)化其流程并創(chuàng)建更好的無服務(wù)器代碼。
無服務(wù)器背后的理由是,它是事件驅(qū)動(dòng)的,具有自動(dòng)擴(kuò)展的能力,而無需基礎(chǔ)架構(gòu)的設(shè)置或干預(yù)。 但是,人們經(jīng)常問的一個(gè)問題是:健壯的無服務(wù)器架構(gòu)是什么樣的?
整合,隔離和事件驅(qū)動(dòng)
很容易陷入為任何可能的事情編寫函數(shù)的陷阱。 對(duì)于無服務(wù)器,很容易啟動(dòng)執(zhí)行工作的功能。 可以通過自動(dòng)計(jì)時(shí)作業(yè)激活該作業(yè),可以通過網(wǎng)關(guān),數(shù)據(jù)更改和代碼管道活動(dòng)來觸發(fā)該作業(yè)。
盡管這對(duì)于孤立的案例來說聽起來很棒,但是在無服務(wù)器環(huán)境中的大型應(yīng)用程序要求架構(gòu)師將整個(gè)預(yù)期事件和設(shè)計(jì)功能視為一個(gè)模塊化網(wǎng)絡(luò)。
在某種程度上,以無服務(wù)器方式構(gòu)建應(yīng)用程序是一種解構(gòu)的軟件開發(fā)方法。 它可以部分啟動(dòng)而無需依賴,并提供快速的問題解決方案。
健壯的無服務(wù)器架構(gòu)強(qiáng)制執(zhí)行一定的代碼壓縮和模塊化,以最大程度地減少相互依賴性。 它的無狀態(tài)性使功能彼此斷開,并且持久性數(shù)據(jù)源成為真實(shí)性的唯一空間。
如果發(fā)生故障,鏈接功能會(huì)導(dǎo)致串行多米諾骨牌效應(yīng)。 對(duì)功能之間的關(guān)系采用并行方法可減輕這種風(fēng)險(xiǎn)。
看下面的圖,例如:
Serial serverless approach
上面的流程是默認(rèn)的,我們中的一些人在創(chuàng)建無服務(wù)器代碼時(shí)可能會(huì)陷入其中。 這是因?yàn)樵趥鹘y(tǒng)的依賴注入模型中,一個(gè)函數(shù)觸發(fā)另一個(gè)函數(shù)很容易想到。 如果要求合理,我們可以遞歸進(jìn)行。 但是,當(dāng)將其應(yīng)用于無服務(wù)器應(yīng)用程序時(shí),流程中斷最終會(huì)導(dǎo)致沒有應(yīng)急計(jì)劃的結(jié)果中斷。
這是因?yàn)榇蟹椒ú荒軡M足每個(gè)功能真正獨(dú)立的需要。 上述方法的觸發(fā)器是調(diào)用另一個(gè)的無服務(wù)器功能,這意味著它有可能沿管道傳遞數(shù)據(jù)而無需驗(yàn)證或進(jìn)行適當(dāng)?shù)臓顟B(tài)管理。
看下圖。 它具有相同的三個(gè)無服務(wù)器功能,但它們通過有狀態(tài)觸發(fā)器相互連接。
Parallel Serverless approach
這種方法可能看起來更復(fù)雜,但是如果您查看潛在的斷點(diǎn)在哪里,它們是基于觸發(fā)器而不是函數(shù)。
實(shí)施遞歸時(shí),觸發(fā)器基于持久性內(nèi)容,而不是可能會(huì)丟失輸出的臨時(shí)空間。
該體系結(jié)構(gòu)還允許運(yùn)行多個(gè)代碼。 無服務(wù)器及其相關(guān)的無表數(shù)據(jù)存儲(chǔ)很便宜。 在某種程度上,這是因?yàn)樗某跏荚O(shè)計(jì)是為了大量使用。
雖然第一個(gè)圖一次運(yùn)行一個(gè)功能以觸發(fā)另一個(gè)功能,因此似乎使用了較少的計(jì)算能力,但第二個(gè)圖允許兩個(gè)功能以隔離的方式運(yùn)行,但仍通過數(shù)據(jù)觸發(fā)器保持連接。
對(duì)于健壯的無服務(wù)器架構(gòu),代碼的結(jié)構(gòu)取決于開發(fā)人員為更大的視圖創(chuàng)建隔離的解決方案的能力。 該代碼本質(zhì)上通常是功能性的,因?yàn)榭芍赜眯匀Q于其處理數(shù)據(jù)的能力而無需基于類的藍(lán)圖。
針對(duì)大型軟件的健壯的無服務(wù)器架構(gòu)會(huì)考慮潛在的中斷和可能丟失數(shù)據(jù)的位置。 通過圍繞永久性集中觸發(fā)器,它解決了此問題,并降低了由于無服務(wù)器的短暫性而導(dǎo)致的風(fēng)險(xiǎn)。
功能并行是可用于健壯的無服務(wù)器體系結(jié)構(gòu)的體系結(jié)構(gòu)方法之一。 關(guān)于觸發(fā)器,實(shí)現(xiàn)永久性是數(shù)據(jù)保護(hù)和驗(yàn)證的一種好習(xí)慣。 這也是處理無服務(wù)器預(yù)期的無狀態(tài)性的一種方法。
-
Google
+關(guān)注
關(guān)注
5文章
1771瀏覽量
57709 -
無服務(wù)器
+關(guān)注
關(guān)注
0文章
16瀏覽量
4082
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論