在云計(jì)算領(lǐng)域,容器和無(wú)服務(wù)器計(jì)算已經(jīng)占據(jù)了發(fā)展前列。
作者 | Emra Samdan
翻譯 | bocloudresearch
在不久以前,應(yīng)用程序的開發(fā)、部署和維護(hù)要比現(xiàn)在復(fù)雜得多,耗時(shí)也多。在最初,維護(hù)不僅需要修復(fù)應(yīng)用程序的代碼,還需要修復(fù)對(duì)物理機(jī)器的支持。保持服務(wù)器、硬件和軟件的更新也是非常關(guān)鍵的任務(wù)。
在本世紀(jì)初,一種名為“基礎(chǔ)設(shè)施即服務(wù)(IaaS)”的新模式迅速流行起來(lái)。IaaS提供了從第三方提供商租用遠(yuǎn)程服務(wù)器和虛擬機(jī)的可能性,這些提供商可以完全負(fù)責(zé)管理硬件、網(wǎng)絡(luò)和預(yù)訂。
IaaS出現(xiàn)之后,消除開發(fā)人員的所有非編碼職責(zé)來(lái)簡(jiǎn)化開發(fā)人員工作,這一想法推動(dòng)了新方法、模型和服務(wù)的創(chuàng)新。
Docker的官方網(wǎng)站提供了以下簡(jiǎn)短而優(yōu)雅的定義:“容器是一個(gè)標(biāo)準(zhǔn)的軟件單元,它將代碼及其所有依賴項(xiàng)打包,從而使應(yīng)用程序在不同的計(jì)算環(huán)境之間快速、可靠地運(yùn)行。換句話說(shuō),通過(guò)使用容器,開發(fā)人員可以確保他們的應(yīng)用程序可以在任何云平臺(tái)或本地服務(wù)器上運(yùn)行。在某些方面,容器類似于虛擬機(jī),比如兩者都是隔離資源。但是,虛擬機(jī)模擬物理設(shè)備,而容器創(chuàng)建應(yīng)用程序?qū)拥某橄蟆?/p>
在無(wú)服務(wù)器計(jì)算中,整個(gè)應(yīng)用程序或應(yīng)用程序的一部分被解耦為多個(gè)函數(shù),每個(gè)函數(shù)都響應(yīng)諸如HTTP請(qǐng)求、新消息到達(dá)消息隊(duì)列、或在存儲(chǔ)中保存或修改新對(duì)象等時(shí)間觸發(fā)的。平臺(tái)可以在特定的時(shí)間或周期運(yùn)行這些函數(shù),這對(duì)cron jobs(定時(shí)任務(wù))很有幫助。
要使此系統(tǒng)工作,開發(fā)人員只需編寫功能代碼,并將其及其依賴項(xiàng)打包到zip文件中,然后將該zip文件發(fā)送到無(wú)服務(wù)器端點(diǎn),由提供商負(fù)責(zé)供應(yīng)和擴(kuò)展。
無(wú)服務(wù)器的關(guān)鍵特性之一是“按需付費(fèi)”模型,在這種模型中,公司僅按函數(shù)的實(shí)際執(zhí)行時(shí)間付費(fèi)。如今,AWS Lambda應(yīng)該是最受歡迎的無(wú)服務(wù)器提供商。
是的。現(xiàn)在,無(wú)服務(wù)器和容器都很流行,它們?cè)试S開發(fā)人員專注于自己的代碼而不是基礎(chǔ)設(shè)施,這極大地提高了開發(fā)速度。容器和 serverless 都非常適合于微服務(wù)和基于組件的體系結(jié)構(gòu)。在使用它們時(shí),部署和擴(kuò)展通常比使用傳統(tǒng)的單體架構(gòu)更快、更具成本效益,因?yàn)槟悴僮鞯氖菓?yīng)用程序的一小部分,而不是整個(gè)應(yīng)用程序。雖然容器和serverless 有這些共性,但是每種技術(shù)都有自己的優(yōu)勢(shì)、弊端和用例。
容器的第一個(gè)優(yōu)勢(shì)是可移植性。由于容器已經(jīng)包含了它需要運(yùn)行的所有內(nèi)容,因此只需放置一臺(tái)安裝了容器引擎的機(jī)器即可運(yùn)行。容器與平臺(tái)無(wú)關(guān),因此它們可以運(yùn)行在Linux、Windows、macOS、Mesos、Docker、Swarm或Kubernetes上。它們甚至可以在另一個(gè)容器中運(yùn)行。
在計(jì)算資源使用方面,容器也比虛擬機(jī)更高效。盡管容器和虛擬機(jī)都是虛擬化的,但是虛擬機(jī)會(huì)使用自己的操作系統(tǒng)來(lái)模擬整個(gè)計(jì)算機(jī),因此會(huì)消耗更多的資源。另一方面,容器可以共享同一操作系統(tǒng),從而使操作系統(tǒng)更小,更快地啟動(dòng)和關(guān)閉。
容器的另一個(gè)好處是允許開發(fā)人員完全控制應(yīng)用程序。雖然這意味著必須手動(dòng)配置系統(tǒng)設(shè)置,但這也意味著擁有真正的靈活性。這在serverless上是無(wú)法實(shí)現(xiàn)的,因?yàn)闊o(wú)服務(wù)器的所有內(nèi)容都是由云提供商管理的。
當(dāng)我們想要將一些大型的單體應(yīng)用程序重構(gòu)為更小的獨(dú)立部分, 以便遷移到微服務(wù)體系結(jié)構(gòu)并獲得更好的性能、可測(cè)試性和擴(kuò)展速度時(shí),容器確實(shí)是很有幫助的。例如,將以前的大型應(yīng)用程序拆分為幾個(gè)獨(dú)立的服務(wù):其中一個(gè)負(fù)責(zé)用戶管理,另一個(gè)負(fù)責(zé)轉(zhuǎn)換媒體文件等。每個(gè)服務(wù)都可以輕松擴(kuò)展,以便在其職責(zé)范圍的負(fù)載增加時(shí)提供更好的性能。但這對(duì)于單體應(yīng)用程序來(lái)說(shuō)是不可能實(shí)現(xiàn)的,在單體應(yīng)用程序中,需要向整個(gè)系統(tǒng)添加新實(shí)例,這既昂貴又耗時(shí)。
因此,容器適合于長(zhǎng)時(shí)間運(yùn)行的應(yīng)用程序,以及具有特定系統(tǒng)需求的應(yīng)用程序,如果沒(méi)有對(duì)系統(tǒng)的完全控制,這些應(yīng)用程序很難設(shè)置。
由于上面提到的“按需付費(fèi)”模型,托管無(wú)服務(wù)器應(yīng)用程序的成本可能比使用任何其他方法都要低得多。無(wú)需為功能的空閑時(shí)間付費(fèi),如果沒(méi)有流量,那么每月的賬單上就不會(huì)有費(fèi)用。幾乎所有無(wú)服務(wù)器的提供商都有免費(fèi)層,其中包括每月固定數(shù)量的請(qǐng)求和執(zhí)行時(shí)間。通常情況下,所提供的數(shù)量足以使小網(wǎng)站或初創(chuàng)公司免費(fèi)運(yùn)行。
對(duì)于容器,將應(yīng)用程序分發(fā)到部件或微服務(wù)是關(guān)鍵步驟。在serverless中,它是將應(yīng)用程序或其各個(gè)部分分發(fā)到單個(gè)函數(shù)中,每個(gè)函數(shù)負(fù)責(zé)特定的邏輯段。工程師更容易理解和開發(fā)單個(gè)功能的邏輯,這極大地提高了開發(fā)和部署速度。與部署整個(gè)應(yīng)用程序相比,部署一小部分功能的風(fēng)險(xiǎn)更小。
無(wú)服務(wù)器的另一個(gè)巨大優(yōu)勢(shì)是自動(dòng)伸縮。無(wú)服務(wù)器的函數(shù)在提供者控制下的小型、無(wú)狀態(tài)的臨時(shí)容器中運(yùn)行。提供者對(duì)響應(yīng)負(fù)載峰值的擴(kuò)展承擔(dān)全部責(zé)任,并且可以在幾秒鐘內(nèi)啟動(dòng)數(shù)百個(gè)實(shí)例。而且,仍然只需要為所有函數(shù)的總執(zhí)行時(shí)間付費(fèi)。
Serverless的事件驅(qū)動(dòng)特性使得它對(duì)于不總是需要運(yùn)行的應(yīng)用程序(或其部分)非常有用。
假設(shè)你正在為一個(gè)現(xiàn)有的應(yīng)用程序開發(fā)媒體處理功能。新模塊雖然不會(huì)經(jīng)常使用,但是仍然需要足夠的計(jì)算能力來(lái)完成它的任務(wù)。將其放如應(yīng)用程序中可能需要切換到更強(qiáng)大的實(shí)例——這是一個(gè)冒險(xiǎn)的舉動(dòng),因?yàn)槿绻瑫r(shí)運(yùn)行一些繁重的任務(wù),可能會(huì)導(dǎo)致其他所有用戶的延遲。在這種情況下,還需要支付更多的費(fèi)用,并且仍然面臨由上述瓶頸所導(dǎo)致的一些問(wèn)題。
相反,如果選擇了serverless,那么媒體處理功能將與應(yīng)用程序的其余部分隔離。當(dāng)它不被使用時(shí),就不需要為此付費(fèi),并且可以始終確保它不會(huì)影響到應(yīng)用程序的其他部分。
即使沒(méi)有人使用應(yīng)用程序,也至少有一個(gè)承載容器的虛擬機(jī)實(shí)例始終在運(yùn)行。由此導(dǎo)致容器比無(wú)服務(wù)器更昂貴。
即使容器可以在共享計(jì)算機(jī)中快速擴(kuò)展,但由于需要對(duì)計(jì)算機(jī)本身進(jìn)行擴(kuò)展,因此其他擴(kuò)展也不很快。 但是,將容器與業(yè)務(wù)流程系統(tǒng)(如Kubernetes或AWS ECS)一起使用可以使擴(kuò)展更智能。
對(duì)于大多數(shù)開發(fā)人員來(lái)說(shuō),serverless最可怕的部分是供應(yīng)商鎖定。當(dāng)你提交到serverless時(shí),實(shí)際上是在單個(gè)云提供商上進(jìn)行堆棧。這些函數(shù)中使用的無(wú)服務(wù)器應(yīng)用程序和 api 的體系結(jié)構(gòu)因不同的提供商而有所不同,因此更改提供商或切換到內(nèi)部解決方案的成本可能很高。盡管如此,有一些專家并不同意這個(gè)觀點(diǎn),他們聲稱廠商鎖定實(shí)際上并不是一個(gè)問(wèn)題。
使用無(wú)服務(wù)器方法不容易實(shí)現(xiàn)可觀察性、監(jiān)視和調(diào)試。由于應(yīng)用程序可以被分散到多個(gè)部分,而每個(gè)部分都有自己的 bug 和錯(cuò)誤,所以控制和查看全局變得非常重要。
容器和無(wú)服務(wù)器可以一起操作,答案是肯定的。將主要應(yīng)用程序功能作為一個(gè)容器化的微服務(wù)來(lái)運(yùn)行,同時(shí)將無(wú)服務(wù)器使用于某些后臺(tái)操作或很少使用的功能(但占用CPU),可能會(huì)非常有效。
另一個(gè)有趣的組合是AWS Fargate提供的。該服務(wù)結(jié)合了無(wú)服務(wù)器和容器的優(yōu)點(diǎn),允許你更好地控制你的應(yīng)用程序,而不必?fù)?dān)心伸縮難題。
容器和無(wú)服務(wù)器通常被認(rèn)為是相互競(jìng)爭(zhēng)的技術(shù)。但仔細(xì)觀察就會(huì)發(fā)現(xiàn)它們只是不同的技術(shù),當(dāng)在同一個(gè)項(xiàng)目中使用時(shí),它們實(shí)際上可以彌補(bǔ)彼此的缺陷。重要的是要記住,“舊的”并不意味著“過(guò)時(shí)”,“新的”并不意味著“更好”。解決方案的有效性取決于特定的用例、項(xiàng)目需求、團(tuán)隊(duì)經(jīng)驗(yàn)和團(tuán)隊(duì)偏好。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章名稱:ContainersvsServerless:本質(zhì)區(qū)別是什么?-創(chuàng)新互聯(lián)
本文URL:http://www.yijiale78.com/article48/dociep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)公司、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容