Serverless是計(jì)算的趨勢(shì)忿偷,它使諸如Web應(yīng)用程序之類的代碼執(zhí)行與維護(hù)服務(wù)器以運(yùn)行該代碼的需求脫鉤涉馁。 創(chuàng)建沐扳,供應(yīng)和維護(hù)服務(wù)器上運(yùn)行的應(yīng)用程序的操作開銷(傳統(tǒng)意義上)非常重要。 減少或消除這項(xiàng)工作可以幫助組織管理成本并為員工騰出時(shí)間绘面。 Serverless還提供了創(chuàng)新的計(jì)費(fèi)模型和更容易的可擴(kuò)展性砸捏。
在《Serverless是什么诈铛?》中摊溶,作者M(jìn)ike Roberts和John Chapin指出了使Serverless變得獨(dú)一無二的核心見解:
使用完全Serverless的應(yīng)用程序拭卿,您不再需要將架構(gòu)的任何部分視為在主機(jī)上運(yùn)行的資源骡湖。 您的所有邏輯(無論您是自己編寫代碼還是與第三方服務(wù)集成)都在完全彈性的操作環(huán)境中運(yùn)行。 您的狀態(tài)也以類似的彈性形式存儲(chǔ)峻厚。 Serverless并不意味著服務(wù)器已經(jīng)消失响蕴。 這意味著您不再需要擔(dān)心它們。
Serverless可以歸納為:
目前常見的業(yè)界產(chǎn)品有AWS Lambda惠桃、Google Cloud Functions浦夷、Azure Functions、IBM OpenWhisk辜王、阿里云函數(shù)計(jì)算劈狐。隨著容器技術(shù),IoT呐馆,5G肥缔,區(qū)塊鏈等技術(shù)的快速發(fā)展, 技術(shù)上對(duì)去中心化摹恰,輕量虛擬化辫继,細(xì)粒度計(jì)算等技術(shù)需求愈發(fā)強(qiáng)烈,而Serverless必將借勢(shì)迅速發(fā)展俗慈。
價(jià)值及影響
低成本:運(yùn)營(yíng)成本和開發(fā)成本
真正的按需付費(fèi)
高橫向擴(kuò)展
只需要傳統(tǒng)5%~15%的計(jì)算能力
NoOps
應(yīng)用場(chǎng)景
-
事件驅(qū)動(dòng)及響應(yīng)式架構(gòu)
IoT物聯(lián)網(wǎng)場(chǎng)景中低頻需求
請(qǐng)求對(duì)及時(shí)響應(yīng)需求不強(qiáng)
固定時(shí)間觸發(fā)計(jì)算資源利用低的的業(yè)務(wù)
流量突發(fā)場(chǎng)景
跨云和混合云
邊緣計(jì)算
代碼運(yùn)行周期短,長(zhǎng)的不適合
不同風(fēng)格的Serverless
Serverless技術(shù)有幾種不同的版本遣耍。盡管AWS Lambda被視為啟動(dòng)這一運(yùn)動(dòng)的特定技術(shù)闺阱,但其他供應(yīng)商提供了減少運(yùn)營(yíng)開銷的平臺(tái)。Serverless產(chǎn)品通常分為兩種:
后端即服務(wù)(BaaS)-BaaS提供了Serverless方法來處理諸如存儲(chǔ)舵变,身份驗(yàn)證和用戶管理之類的事情酣溃。
功能即服務(wù)(FaaS)-FaaS平臺(tái)以離散的“功能”單元運(yùn)行代碼瘦穆,并根據(jù)需要調(diào)用它們。
Serverless的API
最終用戶可以使用API網(wǎng)關(guān)之類的云基礎(chǔ)架構(gòu)來構(gòu)建可根據(jù)需要調(diào)用的整個(gè)服務(wù)赊豌,而不必不斷監(jiān)聽扛或。云提供商會(huì)將傳入的請(qǐng)求路由到正確的Serverless功能,該功能將完成工作并將響應(yīng)寫回最終用戶碘饼。
這樣就可以開發(fā)僅在使用時(shí)才收費(fèi)的API熙兔,并且可以通過最小的更改大規(guī)模擴(kuò)展。 Slobodan Stojanovic和Aleksandar Simovic的書《使用Node.js的Serverless應(yīng)用程序》提供了一個(gè)示例艾恼,說明了為什么要對(duì)API使用Serverless:
要了解Serverless住涉,請(qǐng)考慮一下洗衣機(jī)。洗衣服的設(shè)備聽起來像是一個(gè)瘋狂的起點(diǎn)钠绍,但是如今擁有一臺(tái)服務(wù)器類似于擁有一臺(tái)洗衣機(jī)舆声。每個(gè)人都需要干凈的衣服,最合乎邏輯的解決方案似乎是購(gòu)買洗衣機(jī)柳爽。但是大多數(shù)時(shí)候媳握,洗衣機(jī)都插上電源,什么也不做磷脯。最多每周使用5到15個(gè)小時(shí)蛾找。服務(wù)器也是如此。大多數(shù)情況下争拐,您的普通應(yīng)用服務(wù)器只是在等待接收請(qǐng)求腋粥,什么也不做。
Serverless存儲(chǔ)
傳統(tǒng)上架曹,管理Web應(yīng)用程序的數(shù)據(jù)存儲(chǔ)一直是操作應(yīng)用程序中最困難的部分之一隘冲,而數(shù)據(jù)庫(kù)管理有時(shí)看起來像是一門絕技。但是绑雄,Serverless數(shù)據(jù)存儲(chǔ)(如Firebase和Aurora)的引入使開發(fā)人員不必?fù)?dān)心優(yōu)化實(shí)例類型展辞,執(zhí)行備份以及其他可操作的數(shù)據(jù)庫(kù)問題。
相反万牺,云提供商將為最終用戶處理托管數(shù)據(jù)存儲(chǔ)的事宜罗珍。提供者經(jīng)常具有按需付費(fèi)的計(jì)費(fèi)模型。默認(rèn)情況下脚粟,數(shù)據(jù)存儲(chǔ)速度很快覆旱,并且通常具有吸引開發(fā)人員的靈活性,例如缺少預(yù)定義的架構(gòu)核无。
Serverless云事件
在云環(huán)境中扣唱,應(yīng)用程序在諸如Amazon Web Services之類的平臺(tái)中誕生并終生存在。這與更“傳統(tǒng)”的應(yīng)用程序形成對(duì)比,這些應(yīng)用程序可能旨在在自營(yíng)數(shù)據(jù)中心的通用商品硬件上運(yùn)行噪沙。由于基于云的應(yīng)用程序在更高的抽象級(jí)別上運(yùn)行炼彪,因此它們也可以與“事件”一起使用,這些事件可以通知最終用戶抽象化基礎(chǔ)架構(gòu)中正在發(fā)生的事情正歼,從而避免了從較低層次的文件系統(tǒng)中找出問題的負(fù)擔(dān)辐马。蜜蜂。當(dāng)工程師需要對(duì)云平臺(tái)上發(fā)生的事件做出反應(yīng)時(shí)局义,Serverless才真正發(fā)揮作用喜爷。作為提高云事件效率的一個(gè)示例,開發(fā)人員可能希望在將新文件推送到S3存儲(chǔ)桶時(shí)執(zhí)行某些操作旭咽,例如修改其尺寸并將新文件發(fā)布到其他地方贞奋。
通過將云提供商的本機(jī)抽象用于這些事件,可以大大減輕開發(fā)和部署負(fù)擔(dān)穷绵。這允許具有創(chuàng)造性的新架構(gòu)轿塔,這些架構(gòu)可以很好地?cái)U(kuò)展,甚至可以編織到大數(shù)據(jù)轉(zhuǎn)換管道中仲墨」寸裕可以在Peter Sbarski的AWS上的Serverless架構(gòu)中找到使用S3事件的示例。
其他Serverless用例
Symphonia的聯(lián)合創(chuàng)始人Mike Roberts在接受采訪時(shí)說目养,Serverless還具有其他用例俩由。例如,可以被建模為一組異步“實(shí)時(shí)”(即比人類感知的速度更快)事件的任何系統(tǒng)都可以受益于使用Serverless快速響應(yīng)所有這些事件癌蚁。對(duì)于請(qǐng)求模式不一致的用例幻梯,例如webhooks,這可能會(huì)派上用場(chǎng)努释。 Webhook可能不會(huì)經(jīng)常觸發(fā)碘梢,但是當(dāng)它發(fā)生時(shí),讓Serverless功能執(zhí)行工作而不是服務(wù)器上的進(jìn)程來全天候保留計(jì)算能力可能會(huì)為企業(yè)帶來巨大的成本和運(yùn)營(yíng)節(jié)省伐蒂。
公司喜歡嘗試Serverless的一個(gè)領(lǐng)域是操作和與呼叫相關(guān)的自動(dòng)化煞躬。警報(bào),自動(dòng)縮放逸邦,響應(yīng)用戶消息的聊天機(jī)器人恩沛,以及所有這些都適合于非對(duì)稱調(diào)用的工作環(huán)境,這些工作很有用缕减,但由于并不直接面向最終用戶雷客,因此可以進(jìn)行試驗(yàn)。一旦證明這些系統(tǒng)成功桥狡,公司可能會(huì)更愿意推出面向用戶的服務(wù)
何時(shí)使用Serverless
Serverless必須提供的最大好處之一是它能夠減少將某些產(chǎn)品推向市場(chǎng)所需的時(shí)間佛纫。 不必過多擔(dān)心訂購(gòu)和配置服務(wù)器妓局,可以使工程師解放精力总放,專注于其他任務(wù)呈宇,例如快速交付軟件。 同樣局雄,隨著Serverless產(chǎn)品繼續(xù)在堆棧中向上移動(dòng)甥啄,使Web應(yīng)用程序更易于組合在一起,可以大大減少人工成本炬搭,因?yàn)樾枰帉懞途S護(hù)的代碼更少蜈漓。
減少勞力不僅可以直接帶來金錢上的收益,還可以帶來更快樂宫盔,更有生產(chǎn)力的開發(fā)商融虽。 當(dāng)開發(fā)人員知道從構(gòu)思到生產(chǎn)的想法可能會(huì)遇到更少的絆腳石和操作負(fù)擔(dān)時(shí),可能會(huì)交付更多的軟件灼芭,并且更有可能生產(chǎn)出更好的產(chǎn)品有额。
Serverless的障礙
Serverless是一種相對(duì)較新的技術(shù),最佳實(shí)踐仍在完善中彼绷。因此巍佑,Serverless非常適合那些有前瞻性思維的人,他們不介意袖手旁觀寄悯,并且對(duì)歧義和風(fēng)險(xiǎn)感到滿意萤衰。
Serverless新手應(yīng)該注意的一個(gè)特定領(lǐng)域是其不可預(yù)測(cè)的使用模型。使用AWS EC2之類的傳統(tǒng)設(shè)置的賬單費(fèi)用更具可預(yù)測(cè)性猜旬,因?yàn)樵撡M(fèi)用基于提前知道的大多數(shù)事情脆栋,例如實(shí)例類型,運(yùn)行多少小時(shí)以及帶寬使用情況洒擦。另一方面椿争,Serverless對(duì)水平可伸縮性有很高的限制,這使得擴(kuò)展更容易秘遏,但也使計(jì)費(fèi)費(fèi)用的積累變得更加容易丘薛。同樣,調(diào)用Serverless功能可能很便宜邦危,將其輸出寫入日志實(shí)用程序的成本最終可能會(huì)比預(yù)期更快地產(chǎn)生高成本洋侨。例如,隨著AWS Lambdas向其寫入日志倦蚪,AWS CloudWatch日志記錄成本將迅速增加希坚。如果第三方監(jiān)視工具(例如Datadog)也從CloudWatch攝取此數(shù)據(jù),則可能會(huì)產(chǎn)生進(jìn)一步的費(fèi)用陵且。
最后裁僧,了解Serverless供應(yīng)商的實(shí)際承諾可能很模糊个束。對(duì)于傳統(tǒng)服務(wù)器,事先就可以很好地了解有關(guān)分配給計(jì)算機(jī)的可用性和資源的協(xié)議聊疲,并在合同中進(jìn)行了詳細(xì)說明茬底。在Serverless的情況下,冷啟動(dòng)時(shí)間获洲,錯(cuò)誤的函數(shù)調(diào)用以及其他“陷阱”可能潛伏在角落阱表。這些最終可能會(huì)破壞您的預(yù)期用例。例如贡珊,邁克·羅伯茨(Mike Roberts)表示最爬,要求亞毫秒級(jí)響應(yīng)時(shí)間的應(yīng)用程序仍然不是當(dāng)今大多數(shù)Serverless產(chǎn)品的理想選擇。像任何新的范例一樣门岔,明確的期望和解決缺陷的方法可能會(huì)隨著時(shí)間而逐漸成熟爱致,但是目前,Serverless用戶只能自己進(jìn)行試驗(yàn)寒随。