騰訊 IMWEB 前端團隊一站式 Serverless 開發解決方案

IMWeb 團隊隸屬騰訊公司,是國內最專業的前端團隊之一。前端

IMWeb 團隊專一前端領域多年,負責過 QQ 資料、QQ 註冊、QQ 羣等億級業務。目前聚焦於在線教育領域,精心打磨 騰訊課堂、企鵝輔導及 ABCmouse 三大產品。node

學習成就夢想,咱們但願能用技術改變教育,改變世界。nginx

前言:現在的 Serverless 能夠說是一大有潛力的新技術方向,尤爲在當下上雲的熱潮中,Serverless 因其免運維、自動擴容、支持多種編程語言等優點,對前端來講,是一大提高服務開發、維護效率的利器也是可嘗試全棧發展的方向,但也由於其新,對落地到團隊開發中,結合團隊開發流也是遇到了一些挑戰,本文將分享 IMWEB 團隊對 Serverless 的實踐方案git

1、IMWEB 團隊 Serverless 研發模式的演進與思考

在過去1、兩年,咱們團隊在多個服務項目中嘗試使用 serverless,騰訊雲 Serverless 提供了一站式服務,經過使用該服務,前端可獨立完成接口服務開發,對前端我的而言可往全棧發展,也所以可緩解團隊後臺人力緊張問題web

img

在開發 Serverless 雲函數的過程當中,咱們也遇到了對比傳統服務,雲函數開發的一些挑戰點編程

(1)雲函數開發特色

前端傳統項目的開發流模式相對已經比較成熟,經過 git 協同管理代碼, 再經過 CI 來規範項目的部署流程,整個工做流能夠查看、回滾代碼,部署也作到了自動化安全

img

再來看雲函數的開發特色:less

  • 雲函數獨立的帳號和權限管理
  • 以函數爲單位進行建立、更新和部署
  • 建立網關 API 與函數關聯,藉此可經過網關 API 訪問到雲函數

以上是最基礎的開發雲函數三個基礎運維

img

而云函數的建立、更新有兩種方式:編程語言

  • 騰訊雲官網雲函數控制檯,可視化的操做界面,點擊按鈕便可建立、更新
  • 經過 CLI 建立,SERVERLESS 提供 SDK,調用 SDK 可完成自定義建立、更新操做,其優勢爲靈活編寫,也易於作成工程化

考慮團隊的協做,第二種方式經過調用 SDK 的方式因其靈活更適合定製爲團隊規範

img

總結下來能夠看到雲函數開發的三個特性:

  • 因其有獨立於 git 帳號的雲函數帳號,致使了雲函數的代碼缺少像 GIT 同樣能夠查看歷史代碼版本,代碼修改記錄等
  • 因其有多重方式能夠用來建立、更新函數,致使多人協做時,有互相覆蓋雲函數的風險
  • 提供的雲函數網關,可幫助快速配置訪問雲函數,而無需運維同窗幫忙作域名指向,機器申請等

img

(2)團隊協做上手雲函數開發問題

在初期團隊探索嘗試雲函數開發時,對比傳統項目的開發流,雲函數的開發步驟更多,也暴露出了一些缺點:

img

1) 上手成本高

首先有不小的學習成本,像雲函數配置文件,雲函數官網界面操做學習成本,實際使用時,因爲雲函數網關 API 連接過長、域名限制等,須要配置 nginx,用特定域名訪問雲函數網關 API,由於多數前端對 nginx 部署,致使有了 nginx 學習成本

img

2) 調試雲函數效率低

由於雲函數是部署在雲端的,Serverless 有其獨特的環境,context、event 等,有別於 NODE 服務的請求體等,本地要徹底模擬 serverless 請求比較困難,致使開發想要調試定位問題時,只能先將代碼部署到 serverless 上,這裏就須要等待部署了,因爲 serverless 是外網的,部署時間就更長了

img

3) 開發流困惑

  • 因爲雲函數直接就是部署在雲端,沒有咱們傳統的機器用於作環境區分,對團隊協做保證部署質量來講並不友好
  • 上述也有提到的,每每由於想要本身業務域名訪問服務接口,而云函數網關 API 是比較長的缺少語義化的連接,一般使用時會想配置 nginx 去經過自定義域名訪問雲函數,不止是成本問題也有容易配置錯誤的風險問題

img

4) 管理困難,存在質量問題

因雲函數獨立的帳號管理,沒有 git 進行管理,致使沒法追蹤代碼記錄,甚至任何有權限的人建立同名函數進行部署都會致使函數莫名被覆蓋,同理雲函數網關 API 也能夠隨意更改指向其它雲函數

img

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

img

2、IMFLOW 一站式 Serverless 開發解決方案的破局與落地

總結上面的雲函數在團隊協做中遇到的一些問題,對應地提出解決方案:

  • 制定規範保證統一的協做,統一的規範保證統一的工做流,提高開發效率進而保證質量
  • 優化雲函數開發體驗,經過工具去自動化完成重複冗餘的操做,並經過封裝過濾掉一些開發學習成本
  • 根據雲函數特色制定 CI 和 CD,保證流程統一,也提高部署效率;統一網關規則,減小云函數網關 API 學習和操做

img

(1)制定規範,提高協做效率

1) 統一雲帳號管理

對於獨立雲函數帳號,每一個開發在上手開發前都須要單獨申請,同時還有開通各類權限,快點半天,慢點一兩天,針對這個問題,考慮使用團隊公共帳號進行統一雲函數管理,工具使用公共帳號進行雲函數部署、更新,免去開發的學習成本、帳號上手成本

img

2)基於 GIT 管理雲函數

對於雲函數獨立的管理方式,爲了能惟一追蹤雲函數,保留了原有的 git 管理項目代碼,制定一系列規範,將 git 項目與雲函數惟一關聯,保證雲函數惟一不可覆蓋

img

3)命名空間隔離函數環境

爲提供雲函數的開發流,針對雲函數的特色,使用雲函數命名空間的概念來隔離雲函數,同時限制測試環境的網關服務只容許內網訪問,保證業務安全

img

4)統一雲函數規則配置

制定雲函數名、對應網關服務 API 名、環境命名空間的命名規範,以達到命名空間、函數名、網關服務 API 能一一對應,可經過其一推導其二,如知道函數名,可知其訪問 API 是什麼,對應環境命名空間是什麼

img

(2)自研 CLI 工具, IMFLOW 提高 SCF 研發效率

在第一項制定了規範以後,要讓規範落地,就須要使用工具來輔助,IMWEB 團隊自研了 CLI 工具 -- IMFLOW, 提供 SCF 團隊開發流實踐方案,經過工具的方式提高 SCF 研發效率; 諸如建立帳號、申請權限、建立雲函數、開發雲函數調試、雲函數網關 API 關聯、函數隔離等等,經過 CLI 工具, 輸入命令便可完成。

img

1)上手開發更快

使用了 CLI 工具來輔助以後,對比團隊過往的開發模式,經過 CLI 可達到 2 分鐘上手進入開發

img

2)調試體驗同傳統服務開發一致

經過同構 + 構建的方式,保留傳統服務開發體驗,工具封裝屏蔽了雲函數文件,開發者開發時可同以往同樣

img

3)一鍵定位調試雲函數

雲函數的真實運行環境相對複雜,如果遇到了涉及雲函數環境調試的問題,須要真實調試雲函數,此時本地便可完成調試,工具封裝了一系列操做,如實時調試、監聽文件變動等,實時部署,實現一鍵定位調試雲函數

img

4)極致優化雲函數部署時間

雲函數的部署是走的外網部署,而云函數的部署時間影響到了雲函數的發佈時間,甚至在作本地實時調試雲函數時,影響了雲函數的調試效率,爲了極致優化雲函數部署時間,利用了雲函數的 layer 功能、項目的 node_module 變更概率較小、同時代碼包大小會影響部署時間這些特色,對雲函數項目部署進行了拆分,當 node_modules 沒有變更時無需部署 node_modules,進而減小了了部署時間

img

在作了部署優化後,查看項目的部署時間,大部分時間 35s 便可完成函數部署

img

(3)質量保證

在質量保證方面,主要是經過 CI | CD 規範部署流程,制定網關服務規範來隔離雲函數和下降網關配置成本。

img

限制測試環境網關服務爲內網可訪問。

img

另外,爲了保證雲函數的運行穩定,避免由於雲函數的冷啓動致使雲函數訪問失敗,即對雲函數的容災處理,作了一層 STKE 的容災,經過代碼同構的方式,利用工具構建打包,完成一套代碼實現既可部署 serverless ,也能夠部署 STKE, 配合網關的處理,完成雲函數的降級容災

img

3、IMFLOW 使用

imflow 內置命令

img

至此,感謝閱讀。在探索雲函數的開發之路中,感謝騰訊雲 Serverless 團隊的支持,但願 Serverless 能夠越作越好!

One More Thing

當即體驗騰訊雲 Serverless Demo,領取 Serverless 新用戶禮包 👉 serverless/start

歡迎訪問:Serverless 中文網

相關文章
相關標籤/搜索