文/李俊峰 胡丹丹
隨著云計算技術的不斷發(fā)展和應用,越來越多的行業(yè)已經(jīng)或者正在進行著數(shù)字化轉型,云計算的應用也逐漸深入核心應用當中。高校在智慧校園的建設過程中,無論是自建私有云還是使用公有云,都已經(jīng)開始充分利用云計算技術構建智慧校園的基礎架構,但是目前高校云計算的應用大部分還是基于IaaS。隨著云計算技術的發(fā)展,云原生、微服務等技術的不斷成熟,高校智慧校園建設對敏捷開發(fā)需求的增多,無服務器計算將在高校信息化建設中發(fā)揮出相應的作用。
無服務器計算概念
無服務器計算是一個由業(yè)界創(chuàng)造的術語[1],作為一種基于云計算的新的軟件開發(fā)方式正變得隨處可見。無服務器計算不是沒有或者不用服務器,而是指我們的應用程序使用第三方的函數(shù)(Function)和服務來進行計算,但是不需要管理計算所需的服務器。無服務計算架構主要包含以下兩種類型:
其一,F(xiàn)aaS(Function as a Service,函數(shù)及服務):主要是指包括服務器端業(yè)務邏輯運行的無狀態(tài)函數(shù)(Function)。這些函數(shù)是在容器里面獨立運行的,是基于事件驅(qū)動的,并且是由第三方廠商進行托管的,例如AWS Lambda,華為云FunctionGraph,阿里云函數(shù)計算等[2]。事件驅(qū)動型計算、FaaS和Serverless FaaS之間的關系如圖1所示。
圖1 事件驅(qū)動型計算、FaaS和Serverless FaaS之間的關系
其二,BaaS(Backend as a Service,后端及服務):主要是指為移動和Web應用程序來提供后端的云服務,這里包括了云數(shù)據(jù)庫、文件存儲、消息推送等。同樣,這些服務也是運行在第三方公有云。
無服務器計算架構存在以下特點:無需管理服務器、無狀態(tài)、自動伸縮、無運營成本、事件驅(qū)動、首次啟動存在延時和安全性較高[3]。
無服務器計算生命周期及架構
無服務器計算的生命周期主要分為五個部分,分別是事件觸發(fā)、尋找可運行容器、啟動運行容器、響應函數(shù)運行、運行結束或進入等待狀態(tài)。在整個生命周期中,如圖2所示,如果在第二步中沒有找到可運行的容器,才會進入第三步新啟動運行容器。
圖2 無服務器計算的生命周期
由于事件驅(qū)動,無服務器計算的運行邏輯架構則更加簡單,只需創(chuàng)建好需要運行的代碼,定義好觸發(fā)代碼運行的事件源和觸發(fā)條件,如圖3所示。
圖3 無服務器計算運行架構
觸發(fā)無服務器運行的事件源可以有很多種,包括API網(wǎng)關、短信網(wǎng)關等,甚至也可以是另外一個無服務器計算的函數(shù)。那么無服務器計算的結果也可以發(fā)送至其他的服務器,例如可以發(fā)送至OBS存儲保存、加入SQS消息隊列、觸發(fā)另一個無服務器函數(shù)等。
智慧校園是高校信息化建設的核心任務。高校在建設智慧校園的時候都會建設各類應用系統(tǒng),例如教務、科研、學工、人事、財務系統(tǒng)等,同時還包括統(tǒng)一數(shù)據(jù)中心、數(shù)據(jù)交換平臺、統(tǒng)一身份認證平臺、數(shù)據(jù)治理平臺等大量的基礎服務平臺,通過以上系統(tǒng)滿足高校各類復雜而又個性化的需求。在智慧校園的實際建設中高校需要采購多個廠家的軟件產(chǎn)品,雖然不同軟件廠家的系統(tǒng)可以實現(xiàn)數(shù)據(jù)對接和共享,但還是會有一些個性化需求無法得到及時滿足,往往需要學校自己進行相應開發(fā)工作。而無服務器計算可以為高??焖匍_發(fā)軟件帶來一定幫助。
應用場景
由于學校智慧校園所使用的軟件并不能100%滿足學校所有需求,往往存在一些具有極強個性化的小功能需要定制開發(fā),而廠家的開發(fā)工作存在周期長、費用高、調(diào)試慢等特點,無服務器計算因其云原生和CI/CD的特性,具有開發(fā)敏捷高效、運行穩(wěn)定、擴展容易和維護簡單的特點,所以特別適合高校用于開發(fā)一些需求緊急、功能單一、并發(fā)量大的功能和應用。例如,用戶消息發(fā)送、圖形圖像處理、流數(shù)據(jù)分析等。
實際案例
1.無服務器網(wǎng)站案例
利用無服務器計算構建的網(wǎng)站特別適合負載不斷變化的應用場景。在沒有用戶訪問的情況下,無服務器架構不會產(chǎn)生計算成本。當網(wǎng)站的訪問量突然增大時,無服務器計算又能夠通過及時自動擴展來滿足需求[4]。
如圖4所示,本案例的Web網(wǎng)站內(nèi)容都是以靜態(tài)頁面的形式保存在OBS對象存儲中,用戶通過CDN進行正常訪問。當需要進行網(wǎng)站管理和內(nèi)容修改的時候,可以通過管理域名訪問管理API網(wǎng)關,觸發(fā)無服務器計算的Function邏輯進行業(yè)務處理,同時將網(wǎng)頁內(nèi)容靜態(tài)化后存入OBS對象存儲中。
圖4 Web網(wǎng)站應用
2.消息發(fā)送應用案例
江西中醫(yī)藥大學健康填報系統(tǒng)是學?;赟aaS平臺自行開發(fā)的系統(tǒng),主要用于全校師生每日上報個人健康情況,每天有近2萬人使用。根據(jù)實際使用情況,每天總會有師生忘記填報,因此需要每日中午12點通過企業(yè)微信健康填報應用對仍未填報健康情況的師生進行消息提醒。本功能的實現(xiàn)正是基于AWS的Lambda,具體工作流程如圖5所示。
圖5 具體工作流程
第一步,新建CloudWatch Events觸發(fā)器并設定為定時觸發(fā)。在這里,事件源的定時觸發(fā),被設置為每天的12點。
第二步,Lambda使用代碼GET請求企業(yè)微信https://qyapi.weixin.qq.com/cgibin/gettoke,獲取企業(yè)微信的發(fā)送應用token。
第三步,Lambda通過配置VPC連接RDS數(shù)據(jù)庫并獲取表中的教職工數(shù)據(jù),同時篩選出還未進行健康填報的人員信息。此項工作基于Python語言實現(xiàn),并直接在Lambda工作臺中運行。
第四步,Lambda使用代碼編輯正文內(nèi)容并推送正文至企業(yè)微信接口完成消息推送。此項工作同樣是基于Python語言實現(xiàn)并直接在Lambda工作臺中運行的。
第五步,Lambda自帶日志CloudWatch,打印輸出即可查看。
成本計算
在消息發(fā)送案例中使用的是無服務器計算,無服務器計算的成本是根據(jù)實際的計算時間來計費的,一個月的運行具體情況如圖6所示。
圖6 運行記錄數(shù)
2021年10月26日以來,一共運行了11293次計算,每次計算耗時2毫秒,根據(jù)AWS計費規(guī)則未產(chǎn)生實際費用(屬于每月免費份額)。而如果利用虛擬機(EC2)來運行本應用,根據(jù)測算,需要人民幣500元左右的費用。因此,使用無服務器計算可以極大地減少公有云的運行成本。
本文介紹了無服務器計算的概念和實際使用案例。無服務器計算可以幫助高校在智慧校園建設中減少服務器管理成本、運營成本,實現(xiàn)計算架構根據(jù)使用量進行自動伸縮,方便快速開發(fā)和發(fā)布等,可以解決很多架構和運營問題,簡化開發(fā)者和運維人員的工作[5]。然而,無服務器架構無法直接取代現(xiàn)有組件,在決定是否要采用無服務器架構之前,需要先分析一下自身的業(yè)務和技術需求,通盤考慮各種優(yōu)點和缺點。