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