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