標(biāo)簽:服務(wù)器,云計算,
云計算,容器,API和自動化技術(shù)的進(jìn)步以及后端即服務(wù)(backend-as-a-service)產(chǎn)品的日益復(fù)雜,為云提供商提供了無服務(wù)器架構(gòu)(Serverless)云產(chǎn)品的機(jī)會。但這并不意味著服務(wù)器不再需要,這只是意味著開發(fā)人員不再需要擔(dān)心基礎(chǔ)設(shè)施,因?yàn)橐磺卸加稍铺峁┥特?fù)責(zé)。使用這種方法,開發(fā)人員只需部署適當(dāng)?shù)拇a,其他一切由云提供商自動管理?瓷先フ娴牟诲e。
無服務(wù)器架構(gòu)如何工作
在傳統(tǒng)的Web應(yīng)用程序架構(gòu)中,你必須管理基礎(chǔ)架構(gòu),并確保其滿足可擴(kuò)展性和安全性需求。例如,客戶端在一邊,服務(wù)器在另一邊?蛻舳税l(fā)送一個“請求”,服務(wù)器回復(fù)“響應(yīng)”。但是,如果無法滿足應(yīng)用程序需求,則很快就要擴(kuò)展服務(wù)器端了。
現(xiàn)在,這可以通過多種方式完成。一種方法是通過擴(kuò)展服務(wù)器,通過使用更強(qiáng)性能的服務(wù)器增加容量。另一種方法是橫向擴(kuò)展服務(wù)器,添加額外的服務(wù)器來處理負(fù)載。在這種情況下,還必須部署負(fù)載平衡,以便“決定”如何平衡兩臺或多臺服務(wù)器之間的負(fù)載。這意味著你必須管理此設(shè)置,對其中一個服務(wù)器發(fā)生故障或負(fù)載平衡發(fā)生故障時采取預(yù)防措施。
在成本方面,即使沒有充分利用,也必須支付所有這些組件的分配,包括虛擬機(jī)、負(fù)載平衡,存儲等。這需要對這些資源進(jìn)行適當(dāng)規(guī)劃和管理的投資。雖然一些云提供商提供“按需付費(fèi)”模式和“彈性定價”,但仍然需要決定如何實(shí)施架構(gòu)。對于Web應(yīng)用程序開發(fā)人員來說,通常是后者。
無服務(wù)器模型提供了完全不同的方法。與傳統(tǒng)架構(gòu)不同,無服務(wù)架構(gòu)在無狀態(tài)計算容器中運(yùn)行,這些容器是事件觸發(fā)的,短暫的(只能持續(xù)一次調(diào)用),并由第三方完全管理。就像一個“黑盒子”,這個服務(wù)你只需上傳代碼并實(shí)時自動處理。當(dāng)一個請求進(jìn)來時,就會運(yùn)行你的Lambda功能的容器。
在成本方面,使用無服務(wù)器模型,通常僅支付服務(wù)請求和運(yùn)行代碼所需的計算時間。計費(fèi)以100毫秒為單位進(jìn)行計量,使其具有成本效益,并且易于自動從每天幾個請求到每秒數(shù)千次都可以。
▲
使用無服務(wù)器架構(gòu)的優(yōu)點(diǎn)
?降低運(yùn)營成本 - 如果你考慮這個問題,無服務(wù)架構(gòu)本質(zhì)上是一個外包解決方案。基礎(chǔ)設(shè)施不會消失。然而,與常規(guī)云服務(wù)相比,事實(shí)上,只需要根據(jù)流量規(guī)模和形式支付需要的計算量,這可能會大大節(jié)省運(yùn)營成本,特別是對于具有不同變化的早期和動態(tài)應(yīng)用負(fù)載要求。
?無限可擴(kuò)展性 - 極高的可擴(kuò)展性在云服務(wù)領(lǐng)域并不新鮮,但無服務(wù)架構(gòu)將其提升到一個全新的水平。無服務(wù)架構(gòu)的縮放功能不僅可以降低計算成本,還可以減少運(yùn)行管理,因?yàn)榭s放是自動的。使用無服務(wù)器,無需明確添加和刪除實(shí)例到服務(wù)器陣列,并讓供應(yīng)商為你擴(kuò)展應(yīng)用程序。由于云計算提供商根據(jù)每個請求執(zhí)行擴(kuò)展,所以甚至不需要考慮在內(nèi)存不足之前可以處理多少并發(fā)請求的問題。
?分離問題 - 無服務(wù)器幾乎迫使你實(shí)施關(guān)注模型的分離,通過該分離將應(yīng)用程序分成不同的部分,以使每個部分都解決一個單獨(dú)的問題。
?隔離進(jìn)程 - 在無服務(wù)器環(huán)境中,每個Lambda函數(shù)都完全隔離。如果其中一個功能關(guān)閉,它不影響其他功能,它不會導(dǎo)致服務(wù)器崩潰。
使用無服務(wù)器架構(gòu)的缺點(diǎn)
?缺乏控制權(quán) - 通過任何外包策略,你都可以將某些系統(tǒng)的控制權(quán)給第三方供應(yīng)商。由于系統(tǒng)停機(jī),意外的限制,成本的變化,功能的喪失,強(qiáng)制的API升級等,這種缺乏控制可能會顯現(xiàn)出來。此外,如果需要專門的服務(wù)器進(jìn)行專門的流程,那么必須自己運(yùn)行這個專門的服務(wù)器。一個無服務(wù)器架構(gòu),在大多數(shù)情況下,提供商業(yè)化的基礎(chǔ)設(shè)施,將以廣義的方式運(yùn)行你的流程。
?長時間運(yùn)行流程的高成本 - 如果你的進(jìn)程持續(xù)運(yùn)行很長時間,則可能會需要運(yùn)行自己的服務(wù)器。因?yàn)檫@不僅涉及到成本,還涉及到擁有的技能或者想要投入運(yùn)行自己的服務(wù)器的專注;在評估這些解決方案時,請考慮所有這些方面。
?供應(yīng)商鎖定將基礎(chǔ)架構(gòu)管理完全外包給無服務(wù)器提供商,無疑將自己鎖定到該供應(yīng)商。每個供應(yīng)商都有自己的標(biāo)準(zhǔn)和編程框架,不容易改變。在幾乎每一種情況下,無論從供應(yīng)商使用的無服務(wù)器功能,將由另一個供應(yīng)商進(jìn)行不同的實(shí)現(xiàn)。如果要切換供應(yīng)商,幾乎肯定需要更新操作工具(部署,監(jiān)控等),可能還需要更改代碼。
如果你將應(yīng)用程序分解成微服務(wù),則無服務(wù)器架構(gòu)是一個很好的選擇。它不太適合運(yùn)行專門過程的長時間運(yùn)行的應(yīng)用程序。雖然無服務(wù)架構(gòu)還流于趨勢,但是由于更多的開發(fā)者采用它并將其帶入主流,所以這個市場的所有玩家都期望有重要的創(chuàng)新和新功能。
|