原文:https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverless
概述
serverless是一個(gè)云原生開發(fā)模型,它使得開發(fā)者無(wú)需管理服務(wù)器的情況下能夠構(gòu)建以及運(yùn)行應(yīng)用。
serverless中仍然有服務(wù)器,但是服務(wù)器已經(jīng)從應(yīng)用開發(fā)中抽象出來(lái)。通常由云提供商處理服務(wù)器的配置、維護(hù)、擴(kuò)展等常規(guī)工作。開發(fā)者僅僅簡(jiǎn)單的將代碼打包到容器中進(jìn)行部署即可。
部署完成后,serverless應(yīng)用會(huì)根據(jù)需要自動(dòng)進(jìn)行擴(kuò)容以及縮容。來(lái)自于公有云serverless利用事件驅(qū)動(dòng)模型來(lái)進(jìn)行按量收費(fèi)。當(dāng)serverless函數(shù)空閑時(shí),是沒有費(fèi)用的。
serverless架構(gòu)一覽
serverless應(yīng)用和其他云計(jì)算應(yīng)用的區(qū)別是,云提供商負(fù)責(zé)云基礎(chǔ)設(shè)施以及serverless應(yīng)用的擴(kuò)縮容。部署在容器中的serverless應(yīng)用根據(jù)需要進(jìn)行啟動(dòng)。
在標(biāo)準(zhǔn)的Iaas云計(jì)算模型下,用于需要預(yù)先購(gòu)買資源。對(duì)于應(yīng)用的擴(kuò)縮容是由用戶負(fù)責(zé)。即使應(yīng)用不被使用,云基礎(chǔ)設(shè)施也需要讓應(yīng)用運(yùn)行。
相反的,serverless架構(gòu)是按需啟動(dòng)的。當(dāng)一個(gè)事件觸發(fā)代碼運(yùn)行,那么公有云提供商會(huì)動(dòng)態(tài)的分配資源,從而運(yùn)行代碼。代碼結(jié)束運(yùn)行后,用戶就沒有費(fèi)用。除了費(fèi)用和效率的好處,serverless也將開發(fā)者從服務(wù)器配置以及應(yīng)用擴(kuò)展中解脫了出來(lái)。
在serverless中,管理操作系統(tǒng),文件系統(tǒng),系統(tǒng)安全補(bǔ)丁,負(fù)載均衡,容量管理,擴(kuò)容,日志以及監(jiān)控等常規(guī)工作都由云服務(wù)商進(jìn)行提供。
構(gòu)建一個(gè)完全的serverless應(yīng)用是完全可能的,或者構(gòu)建一個(gè)部分是serverless,部分是傳統(tǒng)的微服務(wù)模型的應(yīng)用。
云提供商的角色
在serverless模型下,云提供商運(yùn)行物理服務(wù)器,并且可以代碼用戶動(dòng)態(tài)分配資源。
serverless計(jì)算通常分為兩組,BaaS和FaaS
BaaS讓開發(fā)者能夠獲取大量的第三方服務(wù)和應(yīng)用。例如,云提供商可以提供認(rèn)證服務(wù),加密服務(wù),云數(shù)據(jù)庫(kù)。在BaaS中,serverless函數(shù)常常被稱為APIs
通常情況下,當(dāng)開發(fā)者提到serverless時(shí),他們談?wù)摰氖荈aaS。在FaaS下,開發(fā)者仍然需要編寫特定的服務(wù)端邏輯,但是代碼運(yùn)行在由云提供商提供的容器中。
大量的公有云提供商提供了很多FaaS產(chǎn)品。包括AWS的AWS Lambda、Azure的Azure Functions、谷歌云的多個(gè)產(chǎn)品、IBM云的IBM Cloud Functions。
一些組織選擇開源的serverless平臺(tái)來(lái)運(yùn)行他們的FaaS環(huán)境,包括Red Hat的 OpenShift Serverless,它是建立在k8s的Knative項(xiàng)目上。
FaaS是什么
FaaS是一種事件驅(qū)動(dòng)的計(jì)算執(zhí)行模型,開發(fā)者編寫邏輯,然后運(yùn)行在由平臺(tái)完全管理的容器中,按需執(zhí)行邏輯。
相比于BaaS,F(xiàn)aaS給開發(fā)者提供了更大的自由度,開發(fā)者能夠自己編寫應(yīng)用,而不是依賴已有編寫好的應(yīng)用。
代碼在由云廠商提供的容器中運(yùn)行。特別的,這些容器有以下特點(diǎn):
- 無(wú)狀態(tài),從而使得數(shù)據(jù)完整性更加簡(jiǎn)單
- 短暫性,允許應(yīng)用能夠運(yùn)行特別短的時(shí)間
- 事件觸發(fā),應(yīng)用能夠根據(jù)需要自動(dòng)運(yùn)行
- 完全由云廠商管理,你僅僅只需要支付你需要的,而不需要支付服務(wù)器等
具體使用案例
serverless架構(gòu)是異步的、無(wú)狀態(tài)應(yīng)用理想架構(gòu),這些應(yīng)用能夠立即啟動(dòng)。同樣的,serverless同樣適合哪些不可預(yù)測(cè)消耗的應(yīng)用。
設(shè)想類似于一種處理圖片文件的批處理任務(wù),可能不經(jīng)常運(yùn)行,但是當(dāng)一批圖片文件來(lái)到時(shí),必須立即處理?;蛘哳愃茣r(shí)刻關(guān)注對(duì)于數(shù)據(jù)庫(kù)的變化有任務(wù)需要運(yùn)行的應(yīng)用。
無(wú)服務(wù)器應(yīng)用程序也非常適合涉及傳入數(shù)據(jù)流、聊天機(jī)器人、計(jì)劃任務(wù)或業(yè)務(wù)邏輯的用例。
其他一些serverless常見的用例,比如后端API和web應(yīng)用,serverless 王章等。
Knative和serverless kubernetes是什么
k8s作為運(yùn)行容器應(yīng)用的編排設(shè)施,那么作為運(yùn)行serverless環(huán)境的平臺(tái)也不足為奇了。但是k8s沒有做好原生的運(yùn)行serverless 應(yīng)用的準(zhǔn)備。
Knative是一個(gè)開源社區(qū)項(xiàng)目,它在k8s中增加了部署、允許、管理serverless應(yīng)用的組件。
Knative serverless環(huán)境能夠讓你將代碼部署到k8s平臺(tái)中。利用Knative,可以將代碼打包為鏡像,然后提交到系統(tǒng)上,從而創(chuàng)建服務(wù)。Knative能夠按需啟動(dòng)和關(guān)閉你的代碼。
Knative由三個(gè)主要部分組成:
- Build - 將源代碼構(gòu)建到容器中的靈活方法
- Serving - 根據(jù)請(qǐng)求需要,能夠快速的部署以及自動(dòng)擴(kuò)展容器。
- Eventing - 一種觸發(fā)應(yīng)用的基礎(chǔ)設(shè)施,能夠消費(fèi)以及產(chǎn)生事件。應(yīng)用能夠被各種源觸發(fā),例如來(lái)自應(yīng)用的事件、來(lái)自云服務(wù)的事件等。
不像早期的serverless框架,Knative是專門用來(lái)部署現(xiàn)代應(yīng)用的,包括從單體應(yīng)用到微服務(wù)應(yīng)用。
Knative能夠替代FaaS,而FaaS一般是由專門的云廠商來(lái)提供的。Knative能夠運(yùn)行在任何運(yùn)行k8s的云平臺(tái)上。
優(yōu)勢(shì)與劣勢(shì)
優(yōu)勢(shì)
- serverless計(jì)算能夠提高開發(fā)者的工作效率并且能夠降低運(yùn)維成本。將管理機(jī)器、配置等常規(guī)工作交給底層平臺(tái)后,開發(fā)者能夠更加專注于應(yīng)用。
- serverless提高了DevOps的使用,因?yàn)樗档土碎_發(fā)者描述基礎(chǔ)設(shè)施的需要
- 通過(guò)整合來(lái)自第三方BaaS產(chǎn)品,能夠簡(jiǎn)化應(yīng)用的開發(fā)
- 采用serverless模型能夠降低運(yùn)營(yíng)成本,因?yàn)槟阒恍枰獮橛?jì)算時(shí)間而付費(fèi),不需要一直管理服務(wù)。
劣勢(shì)
- 不將應(yīng)用放到自己的服務(wù)器運(yùn)行或者不能控制服務(wù)端邏輯會(huì)有缺點(diǎn)
- 云提供商可能對(duì)于組件的集成有嚴(yán)格的限制,這會(huì)影響到應(yīng)用的靈活性。在BaaS環(huán)境中,開發(fā)者可能會(huì)對(duì)不在控制范圍的服務(wù)負(fù)有責(zé)任
- 放棄這些控制,會(huì)導(dǎo)致綁定到特定供應(yīng)商上。更換云供應(yīng)商可能會(huì)導(dǎo)致升級(jí)系統(tǒng)從而滿足新供應(yīng)商的要求,而這會(huì)增加成本。
serverless的發(fā)展
serverless架構(gòu)和FaaS隨著容器以及云產(chǎn)品的流行而發(fā)展。
serverless 1.0 階段有一些限制,使得它不適合通用計(jì)算。serverless 1.0 有如下特點(diǎn):
- HTTP and few other sources
- Functions only
- Limited execution time (5-10 minutes)
- No orchestration
- Limited local development experience
k8s的出現(xiàn)引領(lǐng)了serverless 1.5時(shí)代,serverless 1.5有如下特點(diǎn):
- Knative
- Kubernetes-based auto-scaling
- Microservices and functions
- Easy to debug and test locally
- Polyglot and portable
當(dāng)前,serverless2.0正在到來(lái),云提供商已經(jīng)開始添加缺少的部分,以使無(wú)服務(wù)器適合通用業(yè)務(wù)工作負(fù)載。serverless 2.0有如下特點(diǎn):
- Basic state handling
- Use of enterprise integration patterns
- Advanced messaging capabilities
- Blended with the enterprise PaaS
- Enterprise-ready event sources
- State and integration