Cloud Programming Simplified: A Berkerley View on Serverless Computing笔记
今天讀了一篇加州大學伯克利分校發表的論文 Cloud Programming Simplified: A Berkeley View on Serverless Computing,文章對serverless的形成、現狀以及未來進行了全面的梳理和總結。一邊閱讀我也記錄了一些筆記,方便自己回顧。
1. Serverless計算簡介
早在2009年,伯克利曾針對當時興起的云計算做過評論,并提出了以下6個潛在的優點:
2009年至今的10年里,云計算領域已經有了很大的發展,上述的諸多優勢已經成為現實,但最后兩點目前的實現仍然不夠優秀,使得大部分的云服務使用者不得不承受復雜的運維成本和較低的硬件使用率。
采用底層硬件虛擬的方案意味著所有的運維操作都要由開發人員自己來解決,并且為了保證運行在云上的服務具有足夠的穩定性,需要解決很多的問題,比如下面列出的這些:
注意到這些問題,亞馬遜在2015年推出了AWS Lambda服務,提出了Cloud Function的概念,并引起了業界對于Serverless的廣泛關注(Serverless這一詞并不是說真的沒有服務器了,只是開發人員不需要再關注服務器了,你的代碼仍然是運行在真實存在的服務器上的)。
Cloud Function最終被平臺打包成FaaS (Function as a Service, 函數即服務) 的形式,它代表著Serverless的核心理念。當然,云平臺也提供以BaaS (Backend as a Service) 形式存在的Serverless服務框架。簡單的說,Serverless Computing = FaaS + BaaS。
2. Serverless的形成
serverless相比serverful,有以下3個顯著的改變:
接下來文章解釋serverlss和一些相似的產品究竟有何不同。
接著文章探尋為何serverless計算能夠如此吸引云提供商、用戶和研究者們。
3. 當前Serverless計算平臺的局限性
為了探究是什么阻礙了serverless計算應用于更加廣泛的場景,作者選擇了幾個例子,
分別是:
嘗試把他們改造成serverless的形式來發現阻礙改造的難點。
4. Serverless計算應該是什么樣的
接下來作者給出了困擾serverless計算應用于更廣泛的硬件和軟件范圍的五大挑戰:抽象、系統、網絡、安全以及架構。
5. 陷阱與謬誤
謬誤是指人們對serverless的一些錯誤看法
陷阱則是指那些serverless潛在的坑和隱患
6. 總結和預測
serverless現在已經取得了一定的成功,但也仍然存在一定的挑戰,如果克服了這些挑戰,它將能夠在更廣的領域里獲得更大的成功。此外,serverless計算未來還將面臨安全和成本問題。最后作者對serverless計算未來的表現作出了一些預測:
- 有新形態的BaaS儲存服務出現,讓更多類型的應用能在serverless平臺上運行地更好。
- serverless計算未來應該能夠提供比當前serverful計算更簡單的方式來解決編程安全問題。
- serverless計算的收費模型將得到很大的改進
- 那些被證明是很難以serverless形式運行的應用(比如OLTP數據庫或者隊列),未來很可能會是云供應商所提供的更豐富的服務的一部分。
- 傳統的serverful在云計算中所占的相對比重將會逐漸下降。
- serverless計算將會成為云時代默認的計算范式,大面積取代原有的serverful計算,并為傳統的客戶端-服務器時代劃上一個句號。
感想
以上就是對這篇論文內容的概括總結,不過有很多細節,特別是第三部分的幾個應用我并不了解他們的特性,以及第四部分談到各方面挑戰包括了很多我不熟悉的名詞所以還沒有完全讀懂,只是有個模糊的概念。但至少通過閱讀這篇文章以及其他的一些資料,我大致了解了serverless的概念和優點,遇到的阻礙和未來發展的可能。目前我們常用的云服務器免去了買物理服務器的麻煩,只需要去申請虛擬機就可以部署上線項目,一般是包月包年使用,但是如果沒有訪問我們的應用我們也依然要付錢,而且去維護項目也是需要花費挺多精力的。所以后來就有了serverless的方式,并不是沒有服務器,而是說應用的裝載、啟動、卸載、路由是由平臺來做的。我們只需要編寫業務代碼,然后上傳到serverless的平臺設定好觸發規則,請求到來的時候就會創建函數實例,根據請求的多少來擴展和收縮實例,如果無人訪問就會卸載函數實例。不過這種方式會犧牲“狀態”,因為每次啟動可能會被部署到新的服務器上,用戶的會話狀態無法保持,所以說serverless更適合無狀態的應用。那些想持久化的東西也應該保存到外部的系統中,以“服務”的方式呈現(BaaS)。文章最后預測了這種serverless計算的方式在未來會成為趨勢,大面積替代原有的serverful計算方式:)
而剛好在前端領域,serverless也是當下炙手可熱的技術,所以我也瀏覽了一些相關的文章。通過Node來開發云函數,可以使前端開發者向全棧轉型,提升整體開發效率。比如在這篇文章千萬級流量業務的Serverless實踐,看FaaS給前端帶來的變化中講述了手淘中的哇哦視頻是如何轉型成serverless的(它是淘系首個Node Faas技術的項目),獲得了FaaS零運維的優勢,從而達到開發者的提效。
當然,論文中所說serverless在硬件和軟件上還存在著各種挑戰,如果可以克服的話,serverless會在更廣闊的領域取得更大的成功。
一個簡單的實踐
看完了文章,我們也可以來簡單來實驗一下,這樣也會對文章內容有更好地了解。
阿里云和騰訊云都有提供函數計算的服務,也有文檔可以參考。
騰訊云Serverless Framework快速入門
阿里云函數計算快速入門
我們就按照騰訊云的文檔,只需要幾行代碼,開始部署一個Serverless 服務
一、安裝 Node.js 和 NPM
我這邊已經安裝好了,查看一下版本
二、安裝 Serverless Framework CLI
這里我改用了淘寶鏡像會比較快
安裝完畢后查看下版本
C:\Users\63406>serverless -v Framework Core: 1.64.1 Plugin: 3.4.1 SDK: 2.3.0 Components Core: 1.1.2 Components CLI: 1.4.0三、通過模板創建服務
D:\wanshan\learn>cd serverless # 創建一個serverless服務 D:\wanshan\learn\serverless>serverless create --template tencent-nodejs --path my-service Serverless: Generating boilerplate... Serverless: Generating boilerplate in "D:\wanshan\learn\serverless\my-service"_______ __ | _ .-----.----.--.--.-----.----| .-----.-----.-----. | |___| -__| _| | | -__| _| | -__|__ --|__ --| |____ |_____|__| \___/|_____|__| |__|_____|_____|_____| | | | The Serverless Application Framework | | serverless.com, v1.64.1-------'Serverless: Successfully generated boilerplate for template: "tencent-nodejs"D:\wanshan\learn\serverless>cd my-service # 安裝依賴 D:\wanshan\learn\serverless\my-service>npm install √ Installed 1 packages √ Linked 197 latest versions √ Run 0 scripts Recently updated (since 2020-02-19): 5 packages (detail see file D:\wanshan\learn\serverless\my-service\node_modules\.recently_updates.txt) √ All packages installed (209 packages installed from npm registry, used 6s(network 6s), speed 1016.14kB/s, json 198(400.77kB), tarball 5.4MB)此時my-service下就有了serverless.yml文件
我們在里面配置觸發器
四、部署服務
D:\wanshan\learn\serverless\my-service>serverless deploy此時會彈出二維碼,用微信來掃碼登錄或注冊騰訊云。
看到這個就說明成功了
Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Uploading service package to cos[sls-cloudfunction-ap-guangzhou]. my-service-dev-5CeckR-2020-02-26-19-23-23.zip Serverless: Uploaded package successful D:\wanshan\learn\serverless\my-service\.serverless\my-service.zip Serverless: Creating function my-service-dev-hello_world Serverless: Created function my-service-dev-hello_world Serverless: Setting tags for function my-service-dev-hello_world Serverless: Creating trigger for function my-service-dev-hello_world Serverless: Created apigw trigger hello_world_apigw for function my-service-dev-hello_world success. service id service-0147bmx4 url https://service-0147bmx4-1301390953.gz.apigw.tencentcs.com/release/my-service-dev-hello_world Serverless: Deployed function my-service-dev-hello_world successful Serverless: Service Information service: my-service stage: dev region: ap-guangzhou stack: my-service-dev resources: 1 functions: hello_world: my-service-dev-hello_worldANY - https://service-0147bmx4-1301390953.gz.apigw.tencentcs.com/release/my-service-dev-hello_world可以訪問它給出的地址
五、測試服務
六、云端調用
D:\wanshan\learn\serverless\my-service>serverless invoke -f hello_world Serverless:"Hello World"---------- Log: START RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35 Event RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35 2020-02-26T11:33:30.099Z cb9b23f4-588b-11ea-acc2-525400c43e35 {}END RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35 Report RequestId: cb9b23f4-588b-11ea-acc2-525400c43e35 Duration:1ms Memory:128MB MemUsage:61.7578MB七、 移除服務
如果不再需要此服務,可以通過如下命令一鍵移除服務,該命令會清理相應函數和觸發器資源。
總結
以上是生活随笔為你收集整理的Cloud Programming Simplified: A Berkerley View on Serverless Computing笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebSocket的初步认识
- 下一篇: 在阿里云服务器上安装docker