無(wú)服務(wù)器和容器化是近年來(lái) DevOps 最流行的兩個(gè)流行語(yǔ),這是有充分理由的。在正確的用例中,兩者都可以提高性能并降低成本。然而,盡管它們很受歡迎,但并不是每個(gè)人都了解無(wú)服務(wù)器計(jì)算與容器的區(qū)別。
在這里,為了幫助您開始使用這兩種技術(shù),我們將了解每種技術(shù)的含義,比較它們,解釋它們?nèi)绾蜗嗷パa(bǔ)充,并探討無(wú)服務(wù)器與容器安全性的關(guān)鍵主題。
什么是容器?
容器是輕量級(jí)不可變軟件單元,包括運(yùn)行應(yīng)用程序的所有依賴項(xiàng)和代碼。容器運(yùn)行在“容器運(yùn)行時(shí)”(有時(shí)稱為容器引擎)之上,可以在廣泛的操作系統(tǒng)和平臺(tái)上運(yùn)行。因?yàn)槿萜鬟\(yùn)行時(shí)提供了容器所需的所有系統(tǒng)資源,所以在傳統(tǒng)操作系統(tǒng)上部署應(yīng)用程序的操作復(fù)雜性被最小化了。
容器還具有高度便攜性。容器運(yùn)行時(shí)存在的任何地方,團(tuán)隊(duì)都可以部署容器映像。此外,由于容器僅包含運(yùn)行應(yīng)用程序所需的內(nèi)容,因此與虛擬機(jī)等替代方案相比,容器更輕便、速度更快。
容器平臺(tái)最流行的例子是 Docker。然而,Docker 并不是唯一的容器平臺(tái)。例如,Linux Container (LXC) 早于 Docker,并且今天仍在使用。此外,還有許多工具可以補(bǔ)充容器,例如用于大規(guī)模編排和管理容器部署的Kubernetes (K8s)。
什么是無(wú)服務(wù)器?
無(wú)服務(wù)器是一種計(jì)算模型,無(wú)需配置或管理基礎(chǔ)設(shè)施即可按需運(yùn)行代碼。盡管顧名思義,無(wú)服務(wù)器計(jì)算涉及服務(wù)器。然而,企業(yè)根本不必?fù)?dān)心服務(wù)器基礎(chǔ)設(shè)施。相反,開發(fā)團(tuán)隊(duì)只需將他們的代碼部署在無(wú)服務(wù)器平臺(tái)上,并且僅在該代碼運(yùn)行并消耗服務(wù)器資源時(shí)才收費(fèi)。
由于企業(yè)只需為他們使用服務(wù)器資源(例如 CPU)的時(shí)間付費(fèi),因此無(wú)服務(wù)器可能是一種很好的方式,可以最大限度地降低部署使用量大幅上升和下降的應(yīng)用程序的成本。這是運(yùn)行裸機(jī)服務(wù)器、虛擬機(jī)或容器的根本轉(zhuǎn)變。任何空閑時(shí)間都沒有成本,只有當(dāng)應(yīng)用程序正在積極運(yùn)行和使用資源時(shí)才會(huì)收費(fèi)。
此外,操作復(fù)雜性會(huì)降低,因?yàn)樗谢A(chǔ)設(shè)施都被無(wú)服務(wù)器平臺(tái)提供商抽象化了。DevOps 團(tuán)隊(duì)只關(guān)注他們的代碼。無(wú)服務(wù)器計(jì)算平臺(tái)的熱門示例包括 AWS Lambda、Azure App Service 和 Google 的 Cloud Run。
常見用例
現(xiàn)在我們了解了什么是無(wú)服務(wù)器計(jì)算和容器,讓我們來(lái)看看它們最流行的一些用例。
流行的容器用例包括:
- 微服務(wù)。容器是微服務(wù)架構(gòu)的構(gòu)建塊。由于容器便攜、輕便且易于部署,因此它們非常適合創(chuàng)建松散耦合的微服務(wù)。
- 持續(xù)集成/持續(xù)交付。容器為 DevOps 團(tuán)隊(duì)提供了一種消除開發(fā)、QA、暫存和生產(chǎn)部署之間環(huán)境差異的方法。因此,它們?cè)诔掷m(xù)集成/持續(xù)部署 ( CI/CD ) 工作流中非常有用。
- “隨處部署”。大多數(shù)現(xiàn)代企業(yè)都在混合云和多云環(huán)境中運(yùn)營(yíng)。無(wú)論企業(yè)需要在本地還是跨多個(gè)云運(yùn)行應(yīng)用程序,容器都可以勝任。
- 遺留應(yīng)用程序遷移。在許多情況下,遺留的單一應(yīng)用程序需要遷移到云端。將它們?nèi)萜骰惯@個(gè)過(guò)程更容易。
一些最流行的無(wú)服務(wù)器用例是:
- 應(yīng)用程序接口。REST API 和 GraphQL 實(shí)現(xiàn)等應(yīng)用程序編程接口 (API) 是一種廣泛的無(wú)服務(wù)器計(jì)算用例。因?yàn)?API 事務(wù)是短暫的并且可以快速擴(kuò)展和縮減,無(wú)服務(wù)器提供了一個(gè)可靠的平臺(tái)來(lái)構(gòu)建 API 后端。
- 數(shù)據(jù)處理。無(wú)服務(wù)器可以使用簡(jiǎn)單的功能從多個(gè)來(lái)源進(jìn)行數(shù)據(jù)處理。因此,無(wú)服務(wù)器計(jì)算非常適合需要大規(guī)模處理和分析數(shù)據(jù)但又希望避免基礎(chǔ)設(shè)施管理的團(tuán)隊(duì)。
- 物聯(lián)網(wǎng)。無(wú)服務(wù)器計(jì)算為物聯(lián)網(wǎng)設(shè)備和外部系統(tǒng)異步通信提供了一種事件驅(qū)動(dòng)和直接的方式。
- 動(dòng)態(tài)網(wǎng)站內(nèi)容。Serverless 的教科書式功能之一就是為靜態(tài)網(wǎng)站添加動(dòng)態(tài)內(nèi)容和邏輯。例如,AWS Lambda 通常用于向托管在 S3 上的靜態(tài)站點(diǎn)添加動(dòng)態(tài)功能。
當(dāng)然,這些只是容器和無(wú)服務(wù)器計(jì)算可能實(shí)現(xiàn)的示例。一般來(lái)說(shuō),容器在任何需要可靠部署可移植、輕量級(jí)和不可變圖像的地方都很有用。無(wú)服務(wù)器計(jì)算在各種應(yīng)用程序中很有用,在這些應(yīng)用程序中,工作負(fù)載變化很大,并且優(yōu)先考慮最小化基礎(chǔ)設(shè)施管理工作。
無(wú)服務(wù)器計(jì)算與容器:差異以及它們?nèi)绾蜗嗷パa(bǔ)充
正如我們所見,無(wú)服務(wù)器計(jì)算和容器有一些高級(jí)相似之處。它們消除了復(fù)雜性,使團(tuán)隊(duì)更容易部署和擴(kuò)展應(yīng)用程序。但是,有幾個(gè)重要的區(qū)別需要考慮,包括:
- 成本結(jié)構(gòu)。有了容器——無(wú)論是在企業(yè)上還是在云中運(yùn)行——只要它們?cè)谶\(yùn)行,企業(yè)就會(huì)為它們付費(fèi)。通過(guò)無(wú)服務(wù)器計(jì)算,企業(yè)只需為他們使用的東西付費(fèi)。對(duì)于具有一致需求的工作負(fù)載,這可能沒有太大區(qū)別。對(duì)于高度可突發(fā)的工作負(fù)載,這可以通過(guò)無(wú)服務(wù)器顯著節(jié)省成本。
- 可測(cè)試性。借助容器,團(tuán)隊(duì)可以在任何地方輕松測(cè)試您的應(yīng)用程序。對(duì)于無(wú)服務(wù)器,團(tuán)隊(duì)僅限于運(yùn)行功能的云平臺(tái),無(wú)法針對(duì)無(wú)服務(wù)器功能執(zhí)行相同級(jí)別的測(cè)試。
- 部署。要向上或向下擴(kuò)展基于容器的應(yīng)用程序,必須以某種方式部署或縮減容器(例如使用 Kubernetes)。借助無(wú)服務(wù)器,ylcode 僅在供應(yīng)商提供的“黑盒”平臺(tái)上執(zhí)行。
- 操作復(fù)雜性。無(wú)服務(wù)器的“黑匣子”范式對(duì)于希望最小化操作復(fù)雜性的團(tuán)隊(duì)來(lái)說(shuō)是一個(gè)很大的好處。實(shí)際上沒有可使用無(wú)服務(wù)器管理的基礎(chǔ)設(shè)施。使用容器,可以將基礎(chǔ)架構(gòu)管理卸載給提供商,但情況并非總是如此。
- 供應(yīng)商鎖定。容器可以“隨處運(yùn)行”,但對(duì)于無(wú)服務(wù)器,企業(yè)高度依賴于運(yùn)行代碼的平臺(tái)。例如,使用 AWS Lambda 函數(shù)會(huì)使應(yīng)用程序更加依賴 AWS 平臺(tái),而使用 Docker 容器可以部署在任何可以運(yùn)行 Docker 的平臺(tái)上。
盡管存在差異,但容器和無(wú)服務(wù)器計(jì)算并不一定相互排斥。例如,可以使用Docker 來(lái)容器化無(wú)服務(wù)器函數(shù)。此外,像谷歌的 Cloud Run 這樣的平臺(tái)旨在使用按使用付費(fèi)的無(wú)服務(wù)器模型來(lái)部署容器。
了解無(wú)服務(wù)器與容器安全
與技術(shù)本身一樣,無(wú)服務(wù)器與容器安全性是一個(gè)微妙的DevSecOps主題。無(wú)服務(wù)器確實(shí)消除了許多與基礎(chǔ)設(shè)施管理相關(guān)的安全問(wèn)題,但仍然涉及許多重要的無(wú)服務(wù)器安全考慮因素。例如,不安全的無(wú)服務(wù)器權(quán)限配置可能會(huì)在應(yīng)用程序中造成漏洞。此外,支持無(wú)服務(wù)器工作流的更多功能和協(xié)議意味著需要保護(hù)更多潛在的攻擊媒介。復(fù)雜性的卸載也伴隨著安全權(quán)衡:因?yàn)榉?wù)提供商處理如此多的基礎(chǔ)設(shè)施,所以對(duì)無(wú)服務(wù)器部署的可見性是有限的。
另一方面,容器安全性也有其獨(dú)特的挑戰(zhàn)。例如,僅安全地采購(gòu)和部署受信任的容器——并為它們打補(bǔ)丁——可能是一項(xiàng)運(yùn)營(yíng)挑戰(zhàn)。此外,身份和訪問(wèn)管理 (IAM) 和容器配置管理是強(qiáng)大安全態(tài)勢(shì)的重要方面。