隨著無服務(wù)器架構(gòu)在cloudscape上的發(fā)展,下面是基于MongoDB談?wù)剬?duì)無服務(wù)器架構(gòu)的看法,以及它們?nèi)绾芜m應(yīng)變化的時(shí)代
介紹
自從計(jì)算機(jī)問世以來,構(gòu)建軟件一直是一個(gè)復(fù)雜的過程。在過去的十年中,出現(xiàn)了新的基礎(chǔ)設(shè)施方法(IaaS和PaaS)、軟件體系結(jié)構(gòu)(SOA和微服務(wù))和方法(敏捷、持續(xù)交付和DevOps),以減輕應(yīng)用程序開發(fā)的復(fù)雜性。雖然微服務(wù)在過去幾年中一直是熱門趨勢,但無服務(wù)器架構(gòu)通過提供一種新的方法來構(gòu)建可伸縮且具有成本效益的應(yīng)用程序而獲得了發(fā)展勢頭。無服務(wù)器計(jì)算通過自動(dòng)提供服務(wù)器和存儲(chǔ)、維護(hù)基礎(chǔ)設(shè)施、升級(jí)軟件和只對(duì)消耗的資源收費(fèi),將開發(fā)人員從構(gòu)建應(yīng)用程序的傳統(tǒng)成本中解放出來。
什么是無服務(wù)器計(jì)算?
無服務(wù)器計(jì)算是云計(jì)算中的下層抽象狀態(tài)。這并不意味著沒有服務(wù)器,而是底層的基礎(chǔ)設(shè)施(物理和虛擬主機(jī)、虛擬機(jī)、容器),以及操作系統(tǒng),都是從開發(fā)人員那里想象出來的。應(yīng)用程序是在事件觸發(fā)的無狀態(tài)計(jì)算容器中運(yùn)行的(例如,用戶上傳的照片觸發(fā)了對(duì)他/她的追隨者的通知)。開發(fā)人員創(chuàng)建應(yīng)用,并依賴基礎(chǔ)設(shè)施分配適當(dāng)?shù)馁Y源來執(zhí)行應(yīng)用。如果應(yīng)用上的負(fù)載增長,基礎(chǔ)設(shè)施將創(chuàng)建應(yīng)用的副本,并進(jìn)行擴(kuò)展以滿足需求。
無服務(wù)器計(jì)算支持多種語言,因此開發(fā)人員可以選擇他們最喜歡的工具。用戶只對(duì)運(yùn)行時(shí)和應(yīng)用消耗的資源(例如RAM)收費(fèi);因此,不再存在供應(yīng)不足或過剩的概念。
例如,如果一個(gè)應(yīng)用的運(yùn)行時(shí)間為500ms,并且消耗了15mb的RAM,那么用戶只需要為500ms的運(yùn)行時(shí)間和使用15mb RAM的成本付費(fèi)。
無服務(wù)器體系結(jié)構(gòu)是微服務(wù)的自然擴(kuò)展。與微服務(wù)類似,無服務(wù)器體系結(jié)構(gòu)應(yīng)用程序被分解為特定的核心組件。微服務(wù)可以將類似的功能分組到一個(gè)服務(wù)中,而無服務(wù)器應(yīng)用程序?qū)⒐δ軇澐譃楦?xì)粒度的組件。自定義代碼是作為運(yùn)行在無狀態(tài)計(jì)算服務(wù)中的獨(dú)立、自治、細(xì)粒度應(yīng)用開發(fā)和執(zhí)行的。
對(duì)于無服務(wù)器架構(gòu),“用戶”服務(wù)將被分成更細(xì)粒度的功能。在圖 2 中,每個(gè) API 接口對(duì)應(yīng)一個(gè)特定的應(yīng)用和文件。當(dāng)客戶端發(fā)起“創(chuàng)建用戶”請(qǐng)求時(shí),“用戶”服務(wù)的整個(gè)代碼庫不必運(yùn)行;相反,只有 create_user.js 會(huì)執(zhí)行。無需預(yù)先配置容器,因?yàn)楠?dú)立功能僅在需要時(shí)消耗資源,并且用戶只需為其功能的實(shí)際運(yùn)行時(shí)間付費(fèi)。這種粒度還有助于并行開發(fā)工作,因?yàn)榭梢元?dú)立測試和部署功能。
無服務(wù)器計(jì)算的好處
成本隨使用而增加:
無服務(wù)器計(jì)算的最大好處之一是您只需為應(yīng)用的運(yùn)行時(shí)間付費(fèi)。沒有“空閑”資源的概念,因?yàn)槿绻粓?zhí)行該功能,則不會(huì)向您收費(fèi)。這對(duì)于每小時(shí)僅使用幾次的應(yīng)用程序特別有用,這意味著任何專用硬件、VM 或容器在大部分時(shí)間都處于閑置狀態(tài),并且用戶需要為未充分利用的資源付費(fèi)。借助無服務(wù)器計(jì)算,企業(yè)可以構(gòu)建整個(gè)基礎(chǔ)架構(gòu),并且在客戶開始使用該應(yīng)用程序之前無需為任何計(jì)算資源付費(fèi)。
彈性可擴(kuò)展性:
無服務(wù)器架構(gòu)的彈性可擴(kuò)展性也很簡單。如果應(yīng)用需要擴(kuò)展,基礎(chǔ)設(shè)施將制作應(yīng)用的副本來處理負(fù)載。這方面的一個(gè)例子可能是響應(yīng)天氣請(qǐng)求的聊天機(jī)器人。在無服務(wù)器架構(gòu)中,聊天機(jī)器人功能將通過檢索用戶的位置并響應(yīng)溫度來處理響應(yīng)。對(duì)于少數(shù)請(qǐng)求,這不是問題,但是如果聊天機(jī)器人服務(wù)每秒充斥著數(shù)千個(gè)請(qǐng)求,會(huì)發(fā)生什么。對(duì)于這種情況,聊天機(jī)器人功能將通過實(shí)例化該功能的數(shù)千個(gè)副本來自動(dòng)擴(kuò)展。一旦請(qǐng)求平息,環(huán)境將終止空閑實(shí)例并縮減,從而允許成本與用戶需求成比例地?cái)U(kuò)展。
快速開發(fā)和迭代:
無服務(wù)器計(jì)算非常適合需要快速開發(fā)、原型和迭代的公司。開發(fā)速度更快,因?yàn)閷?duì) IT 運(yùn)營沒有任何依賴。應(yīng)用是單線程的,這使得調(diào)試和部署應(yīng)用更簡單。構(gòu)建過程也被分解成更小、更易于管理的塊。這增加了可以通過持續(xù)交付管道推送的更改數(shù)量,從而實(shí)現(xiàn)快速部署和更多迭代反饋。迭代速度快,因?yàn)榧軜?gòu)有利于快速進(jìn)行大量代碼更改,從而產(chǎn)生更多客戶反饋和更好的產(chǎn)品市場契合度。
更少的系統(tǒng)管理:
無服務(wù)器并不意味著您完全消除了基礎(chǔ)設(shè)施的操作元素,但它確實(shí)意味著更少的系統(tǒng)管理。無需管理、配置和擴(kuò)展服務(wù)器,也無需修補(bǔ)和升級(jí)。服務(wù)器自動(dòng)部署在多個(gè)可用區(qū),提供高可用。支持也得到了簡化;如果在半夜出現(xiàn)問題,則云提供商有責(zé)任解決問題。
開發(fā)人員生產(chǎn)力:
通過使用無服務(wù)器架構(gòu),開發(fā)人員可以更專注于編寫代碼,而不必?fù)?dān)心管理應(yīng)用程序的操作任務(wù)。這使他們能夠開發(fā)創(chuàng)新功能并專注于對(duì)業(yè)務(wù)最重要的核心業(yè)務(wù)邏輯。
MongoDB Atlas 和無服務(wù)器計(jì)算
借助MongoDB Atlas,用戶可以從無服務(wù)器環(huán)境中利用 MongoDB 的豐富功能——富有表現(xiàn)力的查詢語言、靈活的架構(gòu)、永遠(yuǎn)在線的可用性、分布式橫向擴(kuò)展。
MongoDB Atlas 是一種數(shù)據(jù)庫即服務(wù),提供數(shù)據(jù)庫的所有功能,而無需設(shè)置操作任務(wù)的繁重工作。開發(fā)人員不再需要擔(dān)心供應(yīng)、配置、修補(bǔ)、升級(jí)、備份和故障恢復(fù)。Atlas 提供了彈性的可擴(kuò)展性,無論是通過在一系列實(shí)例大小上擴(kuò)展還是通過自動(dòng)分片進(jìn)行擴(kuò)展,所有應(yīng)用程序都不會(huì)停機(jī)。