IMWeb 團隊隸屬騰訊公司,是國內最專業的前端團隊之一,
IMWeb 團隊專注前端領域多年,負責過 QQ 資料、QQ 注冊、QQ 群等億級業務,目前聚焦于在線教育領域,精心打磨 騰訊課堂、企鵝輔導及 ABCmouse 三大產品,
學習成就夢想,我們希望能用技術改變教育,改變世界,

前言:如今的 Serverless 可以說是一大有潛力的新技術方向,尤其在當下上云的熱潮中,Serverless 因其免運維、自動擴容、支持多種編程語言等優勢,對前端來說,是一大提升服務開發、維護效率的利器也是可嘗試全堆疊發展的方向,但也因為其新,對落地到團隊開發中,結合團隊開發流也是遇到了一些挑戰,本文將分享 IMWEB 團隊對 Serverless 的實踐方案
一、IMWEB 團隊 Serverless 研發模式的演進與思考
在過去一、兩年,我們團隊在多個服務專案中嘗試使用 serverless,騰訊云 Serverless 提供了一站式服務,通過使用該服務,前端可獨立完成介面服務開發,對前端個人而言可往全堆疊發展,也因此可緩解團隊后臺人力緊張問題

在開發 Serverless 云函式的程序中,我們也遇到了對比傳統服務,云函式開發的一些挑戰點
(1)云函式開發特點
前端傳統專案的開發流模式相對已經比較成熟,通過 git 協同管理代碼, 再通過 CI 來規范專案的部署流程,整個作業流可以查看、回滾代碼,部署也做到了自動化

再來看云函式的開發特點:
- 云函式獨立的賬號和權限管理
- 以函式為單位進行創建、更新和部署
- 創建網關 API 與函式關聯,借此可通過網關 API 訪問到云函式
以上是最基礎的開發云函式三個基礎

而云函式的創建、更新有兩種方式:
- 騰訊云官網云函式控制臺,可視化的操作界面,點擊按鈕即可創建、更新
- 通過 CLI 創建,SERVERLESS 提供 SDK,呼叫 SDK 可完成自定義創建、更新操作,其優點為靈活撰寫,也易于做成工程化
考慮團隊的協作,第二種方式通過呼叫 SDK 的方式因其靈活更適合定制為團隊規范

總結下來可以看到云函式開發的三個特性:
- 因其有獨立于 git 賬號的云函式賬號,導致了云函式的代碼缺乏像 GIT 一樣可以查看歷史代碼版本,代碼修改記錄等
- 因其有多重方式可以用來創建、更新函式,導致多人協作時,有互相覆寫云函式的風險
- 提供的云函式網關,可幫助快速配置訪問云函式,而無需運維同學幫忙做域名指向,機器申請等

(2)團隊協作上手云函式開發問題
在初期團隊探索嘗試云函式開發時,對比傳統專案的開發流,云函式的開發步驟更多,也暴露出了一些缺點:

1) 上手成本高
首先有不小的學習成本,像云函陣列態檔,云函式官網界面操作學習成本,實際使用時,由于云函式網關 API 鏈接過長、域名限制等,需要配置 nginx,用特定域名訪問云函式網關 API,因為多數前端對 nginx 部署,導致有了 nginx 學習成本

2) 除錯云函式效率低
因為云函式是部署在云端的,Serverless 有其獨特的環境,context、event 等,有別于 NODE 服務的請求體等,本地要完全模擬 serverless 請求比較困難,導致開發想要除錯定位問題時,只能先將代碼部署到 serverless 上,這里就需要等待部署了,由于 serverless 是外網的,部署時間就更長了

3) 開發流困惑
- 由于云函式直接就是部署在云端,沒有我們傳統的機器用于做環境區分,對團隊協作保證部署質量來說并不友好
- 上述也有提到的,往往因為想要自己業務域名訪問服務介面,而云函式網關 API 是比較長的缺乏語意化的鏈接,通常使用時會想配置 nginx 去通過自定義域名訪問云函式,不止是成本問題也有容易配置錯誤的風險問題

4) 管理困難,存在質量問題
因云函式獨立的賬號管理,沒有 git 進行管理,導致無法追蹤代碼記錄,甚至任何有權限的人創建同名函式進行部署都會導致函式莫名被覆寫,同理云函式網關 API 也可以隨意更改指向其它云函式

總結下來,在團隊協作 SCF 開發的時候,遇到的挑戰點如下:

二、IMFLOW 一站式 Serverless 開發解決方案的破局與落地
總結上面的云函式在團隊協作中遇到的一些問題,對應地提出解決方案:
- 制定規范保證統一的協作,統一的規范保證統一的作業流,提升開發效率進而保證質量
- 優化云函式開發體驗,通過工具去自動化完成重復冗余的操作,并通過封裝過濾掉一些開發學習成本
- 根據云函式特點制定 CI 和 CD,保證流程統一,也提升部署效率;統一網關規則,減少云函式網關 API 學習和操作

(1)制定規范,提升協作效率
1) 統一云賬號管理
對于獨立云函式賬號,每個開發在上手開發前都需要單獨申請,同時還有開通各種權限,快點半天,慢點一兩天,針對這個問題,考慮使用團隊公共賬號進行統一云函式管理,工具使用公共賬號進行云函式部署、更新,免去開發的學習成本、賬號上手成本

2)基于 GIT 管理云函式
對于云函式獨立的管理方式,為了能唯一追蹤云函式,保留了原有的 git 管理專案代碼,制定一系列規范,將 git 專案與云函式唯一關聯,保證云函式唯一不可覆寫

3)命名空間隔離函式環境
為提供云函式的開發流,針對云函式的特點,使用云函式命名空間的概念來隔離云函式,同時限制測驗環境的網關服務只允許內網訪問,保證業務安全

4)統一云函式規則配置
制定云函式名、對應網關服務 API 名、環境命名空間的命名規范,以達到命名空間、函式名、網關服務 API 能一一對應,可通過其一推導其二,如知道函式名,可知其訪問 API 是什么,對應環境命名空間是什么

(2)自研 CLI 工具, IMFLOW 提升 SCF 研發效率
在第一項制定了規范之后,要讓規范落地,就需要使用工具來輔助,IMWEB 團隊自研了 CLI 工具 -- IMFLOW, 提供 SCF 團隊開發流實踐方案,通過工具的方式提升 SCF 研發效率; 諸如創建賬號、申請權限、創建云函式、開發云函式除錯、云函式網關 API 關聯、函式隔離等等,通過 CLI 工具, 輸入命令即可完成,

1)上手開發更快
使用了 CLI 工具來輔助之后,對比團隊過往的開發模式,通過 CLI 可達到 2 分鐘上手進入開發

2)除錯體驗同傳統服務開發一致
通過同構 + 構建的方式,保留傳統服務開發體驗,工具封裝屏蔽了云函式檔案,開發者開發時可同以往一樣

3)一鍵定位除錯云函式
云函式的真實運行環境相對復雜,若是遇到了涉及云函式環境除錯的問題,需要真實除錯云函式,此時本地即可完成除錯,工具封裝了一系列操作,如實時除錯、監聽檔案變更等,實時部署,實作一鍵定位除錯云函式

4)極致優化云函式部署時間
云函式的部署是走的外網部署,而云函式的部署時間影響到了云函式的發布時間,甚至在做本地實時除錯云函式時,影響了云函式的除錯效率,為了極致優化云函式部署時間,利用了云函式的 layer 功能、專案的 node_module 變動幾率較小、同時代碼包大小會影響部署時間這些特點,對云函式專案部署進行了拆分,當 node_modules 沒有變動時無需部署 node_modules,進而減少了了部署時間

在做了部署優化后,查看專案的部署時間,大部分時間 35s 即可完成函式部署

(3)質量保證
在質量保證方面,主要是通過 CI | CD 規范部署流程,制定網關服務規范來隔離云函式和降低網關配置成本,

限制測驗環境網關服務為內網可訪問,

另外,為了保證云函式的運行穩定,避免因為云函式的冷啟動導致云函式訪問失敗,即對云函式的容災處理,做了一層 STKE 的容災,通過代碼同構的方式,利用工具構建打包,完成一套代碼實作既可部署 serverless ,也可以部署 STKE, 配合網關的處理,完成云函式的降級容災

三、IMFLOW 使用
imflow 內置命令

至此,感謝閱讀,在探索云函式的開發之路中,感謝騰訊云 Serverless 團隊的支持,希望 Serverless 可以越做越好!
One More Thing
立即體驗騰訊云 Serverless Demo,領取 Serverless 新用戶禮包 ?? serverless/start
歡迎訪問:Serverless 中文網!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/228761.html
標籤:其他
上一篇:企業ERP核心模型與云計算生態
