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