Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践
當(dāng)下,Serverless 概念很火,很多同學(xué)被 Serverless 的優(yōu)勢吸引過來,比如它的彈性伸縮,免運(yùn)維,高可用,資費(fèi)少。但真正使用起來去落地的時候發(fā)現(xiàn)問題很多,大型項(xiàng)目如何組織函數(shù),性能優(yōu)化怎么做,怎么做Serverless調(diào)試,數(shù)據(jù)庫,共享會話怎么加等等。上周,Serverless Devs 2.0 正式版全新發(fā)布。Serverless Devs 2.0 在平臺能力、應(yīng)用模板以及開發(fā)者套件方面能力提升。接下來,以?Serverless Devs?的應(yīng)用中心(web 版)為案例,來看開箱實(shí)踐方案。
Serverless 函數(shù)代碼組織
如果想充分利用 Serverless 的能力函數(shù)是最佳方案,可以最大程度減少冷啟動時間,踐行用完即走的理念,保障用戶體驗(yàn)的同時,最大程度減少成本,不過對于中大型項(xiàng)目而言,以單函數(shù)的方式組織代碼,在維護(hù)上無疑是一個巨大挑戰(zhàn),可能一個應(yīng)用會有數(shù)百個函數(shù),維護(hù)成本極高也極易出錯。
最好的方式是用框架的方式組織代碼,以函數(shù)的方式部署執(zhí)行。框架組織代碼需要做業(yè)務(wù)的劃分,比如電商包含商品,訂單,用戶等服務(wù),都放到一個框架里面并通過函數(shù)去部署執(zhí)行的話明顯太大了。最好就是像微服務(wù)一樣,獨(dú)立業(yè)務(wù)的接口可以在同一個函數(shù)中,每一個業(yè)務(wù)有自己的獨(dú)立域名,再通過內(nèi)部路由訪問具體的業(yè)務(wù)服務(wù)。
這樣做可以最大限度的利用函數(shù)能力,并且維護(hù)得來相對容易一些。
我們把?Serverless Hub?的應(yīng)用市場作為一類場景,進(jìn)行了統(tǒng)一劃分,具體的函數(shù)調(diào)用如下實(shí)現(xiàn)(完整的代碼目錄 git)
代碼使用了 Serverless Devs 提供的?@serverless-devs/dk?,我們對標(biāo)準(zhǔn)的前端框架進(jìn)行了核心封裝,比如 express,koa 等,你可以繼續(xù)使用習(xí)慣的 web 框架進(jìn)行開發(fā)工作,最后通過 s 工具進(jìn)行函數(shù)部署。s.yaml 的配置如下:
如果你想再增加一個服務(wù)業(yè)務(wù),可以水平擴(kuò)展一個新的服務(wù)配置,并且可以用同樣的代碼包去實(shí)現(xiàn)。
性能優(yōu)化
通常 Serverless 應(yīng)用的最大耗時都在 冷啟動時間上,就以阿里云?FC?為例,如果我們的應(yīng)用以容器的方式進(jìn)行部署,冷啟動時間會比較長可能是 1 分鐘或者更多,即使采用鏡像加速也僅能縮短到幾十秒以內(nèi),所以如果項(xiàng)目不是特別大(AI 類應(yīng)用的包大小可能會達(dá)到 G 級別),都建議以 原生runtime 的方式去做。拿我們上面的 serverless hub 為例就是最終運(yùn)行到 nodejs12 runtime,冷啟動時間 1~2s
熱啟動則縮短到150ms
對于這類非高頻訪問的站點(diǎn)而言還是比較適合的,另外你可以根據(jù)需要在具體的某個時間點(diǎn)通過添加預(yù)留的方式保持高性能的訪問效果。
當(dāng)然,冷啟動這塊需要云廠商的進(jìn)一步優(yōu)化把他做到極致,最終才能真正讓 Serverless 完美。
端云調(diào)試
調(diào)試始終是 Serverless 應(yīng)用的最棘手的部分,我們開發(fā)的應(yīng)用是在本地,部署的應(yīng)用是在線上。并且線上的環(huán)境跟本地開發(fā)環(huán)境有著巨大的差異,通常我們只能通過在線打印輸出,然后還得通過日志平臺查看日志判斷問題,再回來本地修改代碼,一來一回耗時非常巨大,而且效果也不好。Serverless Devs 提供了自己的解決方案,我們巧妙的設(shè)計了一個在線的輔助函數(shù),輔助函數(shù)完整復(fù)刻線上代碼,然后通過本地跟輔助函數(shù)建設(shè)通道實(shí)現(xiàn)本地的代碼調(diào)試效果。
基于這樣的能力我們再來看看具體怎么在 Serverless Hub 實(shí)施的, 本次演示使用的是Serverless Desktop, 大家可以嘗試跟著我的操作步驟進(jìn)行使用:
1、新建一個Serverless 應(yīng)用,并把它部署到線上
我們可以通過 Serverless Desktop 的應(yīng)用市場搜索 xxx 應(yīng)用模板,然后加載到本地,然后通過可視化配置部分修改相應(yīng)的服務(wù)和函數(shù)內(nèi)容,進(jìn)行部署。
2、進(jìn)入工作空間->應(yīng)用管理->應(yīng)用詳情->端云調(diào)試
按照提示準(zhǔn)備好前置條件,比如安裝docker demon 指定調(diào)試端口,啟動資源準(zhǔn)備,這個時候會創(chuàng)建輔助函數(shù),同時構(gòu)建 vscode 的 debug 文件。
啟動好之后,使用 vscode 打開工程目錄,查看debug配置文件.vscode/launch.json
以這個啟動 debug 模式
3、發(fā)起調(diào)用
切換到"本地調(diào)試配置"面板,點(diǎn)擊"發(fā)起調(diào)用"
可以發(fā)現(xiàn) ?vscode 觸發(fā)調(diào)試
調(diào)試結(jié)束回到 Serverless Desktop 頁面,我們可以看到輸出效果:
這里我們發(fā)起調(diào)用是向這個服務(wù)的根目錄發(fā)起,如果我們想向其他的路由地址發(fā)起調(diào)用該怎么操作呢?我們可以復(fù)制發(fā)起調(diào)用后輸出的基礎(chǔ)地址。
然后貼到 postman, 再往后拼接上我們的測試路由地址,比如,想訪問"/appCenter/getSpecial",可以拼接成"<基礎(chǔ)地址>/appCenter/getSpecial"然后"Send"這個請求。
通過這樣的方式我們可以深入細(xì)節(jié)知道每一行代碼的調(diào)用問題到底出在哪里,極大的提高了我們的開發(fā)效率。
4、清空環(huán)境
調(diào)試結(jié)束后不要忘了清楚調(diào)試環(huán)境,包括關(guān)閉本地的容器地址,以及清理線上的函數(shù)。
綜上我們完成了一次完整的調(diào)試過程。
數(shù)據(jù)庫使用
Serverless 一大特色就是他的計費(fèi)模式:按需按量計費(fèi)。在數(shù)據(jù)庫存儲層面,阿里云推出 Serverless 分布式數(shù)據(jù)庫 Tablestore,和函數(shù)計算 FC 是最佳拍檔。
1、前提
2、Initializer 函數(shù)
首先讓我們先認(rèn)識下 initializer 函數(shù),initializer 函數(shù)能夠保證統(tǒng)一實(shí)例成功并且僅成功執(zhí)行一次。這個特性非常適合我們的數(shù)據(jù)庫初始化連接。
3、handler函數(shù)
數(shù)據(jù)庫建立連接后,我們就可以在 handler?函數(shù)中處理業(yè)務(wù)邏輯。
3、快速體驗(yàn)
1. Serverless Devs 提供 tablestore?組件, 通過一行命令快速體驗(yàn)
2. 本地調(diào)試
3. 一鍵部署到函數(shù)計算 FC
回到項(xiàng)目根目錄(s.yaml平級),執(zhí)行命令
社區(qū)網(wǎng)址一覽
- 社區(qū)官網(wǎng)
http://www.serverless-devs.com/
- 項(xiàng)目倉庫
https://github.com/Serverless-Devs/Serverless-Devs
- Serverless Desktop 桌面客戶端
https://serverlessdevs.resume.net.cn/zh-cn/desktop/index.html
- Serverless 應(yīng)用開發(fā)者套件
http://serverless-dk.oss.devsapp.net/docs/tutorial-dk/intro/react
- Serverless Devs CLI
https://serverlessdevs.resume.net.cn/zh-cn/cli/index.html
- Serverless Hub 應(yīng)用中心
https://serverlesshub.resume.net.cn/#/hubs/special-view
- 場景上手 Serverless Devs
點(diǎn)擊鏈接(https://developer.aliyun.com/adc/expo/serverless),立刻參與場景體驗(yàn)!
原文鏈接:https://developer.aliyun.com/article/791586?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報,一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 「技术人生」:技术同学应该如何理解业务?
- 下一篇: 钱大妈数据中台建设最佳实践