無服務器計算與容器
與傳統(tǒng)服務器或虛擬機上托管的應用程序相比,無服務器計算和容器都使開發(fā)人員能夠以更少的開銷和更大的靈活性來構建應用程序。開發(fā)人員應使用哪種架構樣式取決于應用程序的需求,但是無服務器應用程序具有更高的可伸縮性,并且通常更具成本效益。
什么是容器?
容器既包含應用程序,又包含應用程序在正常運行時所需的所有元素,包括系統(tǒng)庫、系統(tǒng)設置和其他依賴項。就像“只需加水”的薄煎餅混合粉一樣,容器只需一件東西即可托管和運行,以發(fā)揮其功能。
任何類型的應用程序都可以在容器中運行。無論在何處托管,容器化應用程序都將以相同的方式運行。容器可以輕松地在任何需要的地方移動和部署,就像標準尺寸的物理運輸容器一樣,無論里面的內(nèi)容如何,都可以通過各種運輸方式(船舶、卡車、火車等)運輸?shù)饺魏蔚胤健?/span>
從技術上講,容器是將機器或服務器劃分為獨立用戶空間環(huán)境的一種方式,因此每個環(huán)境僅運行一個應用程序,并且不會與機器上任何其他分區(qū)的部分進行交互。每個容器都與其他容器共享計算機的內(nèi)核(內(nèi)核是操作系統(tǒng)的基礎,它與計算機的硬件進行交互),但其運行卻像是計算機上唯一的系統(tǒng)。
對比容器和虛擬機
虛擬機是一種模仿完整計算機系統(tǒng)的軟件。它與托管它的機器的其余部分隔離,并且表現(xiàn)得好像它是唯一的操作系統(tǒng)一樣,包括擁有自己的內(nèi)核。虛擬機是在一個服務器上托管多個環(huán)境的另一種常見方式,但是虛擬機比容器占用更多的處理能力。
什么是無服務器計算?
無服務器應用程序分解為不同功能,并由第三方供應商托管,后者僅根據(jù)每個功能運行的時間向應用程序開發(fā)人員收費。有關無服務器計算的更多信息,請參見什么是無服務器計算?
無服務器計算和容器之間的主要區(qū)別是什么?
物理機器
“無服務器”計算實際上是在服務器上運行,但是無服務器供應商可以根據(jù)應用程序的需要來配置服務器空間。而不會為給定的功能或應用程序分配特定的機器。另一方面,每個容器一次只能停駐在一臺機器上,并使用該機器的操作系統(tǒng),但是如果需要,它們可以輕松地移動到另一臺機器上。
可擴展性
在基于容器的體系結構中,部署的容器數(shù)量由開發(fā)人員預先確定。相比之下,在無服務器架構中,后端會內(nèi)嵌自動的擴展來滿足需求。
如果繼續(xù)套用運輸集裝箱這一比喻的話,運輸公司可以嘗試預測某種產(chǎn)品的需求增加,然后將更多的集裝箱運送到目的地以滿足該需求,但是如果仍不能滿足要求,它就無法瞬間提供更多的集裝箱來滿足超出預期的需求。
而無服務器架構則恰好可以做到這一點。在計算能力方面,無服務器計算就像現(xiàn)代家庭中的供水:通過打開水龍頭,消費者可以隨時獲取和使用所需的水量,而他們只為所用的水量付費。這比嘗試買水桶或運輸容器更具可擴展性。
費用
容器會保持一直運轉(zhuǎn),因此即使沒有人使用該應用程序,云提供商也會繼續(xù)向服務器空間收費。
而無服務器體系結構不會有任何持續(xù)性的費用,因為除非調(diào)用應用程序代碼,否則它不會運行。相反,開發(fā)人員僅按其應用程序?qū)嶋H的使用向服務器容量付費。
維護
容器托管在云中,但是云提供商不會對其保持更新或維護。開發(fā)人員必須管理和更新他們部署的每個容器。
從開發(fā)人員的角度來看,無服務器架構無需管理后端。供應商負責管理運行代碼的服務器以及保持其軟件更新。
部署時間
容器與無服務器功能相比,初始設置所需的時間更長,因為必須配置系統(tǒng)設置和庫等等。配置完成后,容器僅需幾秒鐘即可部署。但是,由于無服務器功能比容器微服務小,并且不與系統(tǒng)依賴項捆綁在一起,因此部署它們僅需要幾毫秒。代碼上傳后,無服務器應用程序可以立即啟用。
測試
測試無服務器的Web應用程序較為困難,因為后端環(huán)境很難在本地環(huán)境中復制。相反,無論部署在何處,容器都可以同樣運作,這使得在部署到生產(chǎn)環(huán)境之前測試基于容器的應用程序會相對簡單。
對于支持無服務器架構的Cloudflare Workers,我們創(chuàng)建了一個虛擬測試環(huán)境以幫助改善開發(fā)過程。
無服務器計算和容器有何相似之處?
兩者都以云為基礎,并且都大大減少了基礎設施開銷–無服務器計算比容器更重要。在兩種體系結構中,應用程序都被分解并作為較小的組件進行部署。在基于容器的體系結構中,每個容器將運行一個微服務。
什么是微服務?
微服務是應用程序的一部分。每個微服務執(zhí)行一項服務,多個集成的微服務組合在一起組成應用程序。盡管這個名稱似乎暗示著微服務很小,但事實并不必一定如此。
將應用程序構建成微服務集合的優(yōu)點之一是開發(fā)人員可以一次更新一個微服務,而不必在需要進行更改時更新整個應用程序。與無服務器架構中一樣,將應用程序構建為功能集合可提供相同的好處,但層次更細。
開發(fā)人員應如何在無服務器架構和容器之間進行選擇?
選擇無服務器架構的開發(fā)人員將能夠快速發(fā)布和迭代新的應用程序,而不必擔心應用程序是否能夠擴展。另外,如果應用程序沒有收獲持續(xù)的流量或使用率,則無服務器計算將比容器更具成本效益,因為不需要持續(xù)運行代碼。
容器則讓開發(fā)人員可以更好地控制應用程序運行的環(huán)境(盡管這也帶來了更多的維護)以及所使用的語言和庫。因此,容器對于將舊版應用程序遷移到云端非常有用,因為這樣可以更緊密地復制應用程序的原始運行環(huán)境。
最后,采用將一些無服務器功能和一些部署在容器中的功能相混合的的體系結構也具有可能性。例如,如果某個應用程序功能所需的內(nèi)存比無服務器供應商分配的內(nèi)存更多,或者某個功能太大,或者某個功能(而非其他功能)需要長時間運行,那么混合體系結構可使開發(fā)人員獲得無服務器所帶來的優(yōu)勢,并同時利用容器來獲取無服務器無法支持的功能。