Serverless 架構揭秘與靜態網站部署實戰(附實戰源碼)
- 2020 年 3 月 2 日
- 筆記
Serverless被譽為下一代雲計算技術,因為其能帶來研發交付速度提升與成本的降低在業內異常火爆。本文主要為大家分享 Serverless Framework 的架構演進、技術解析以及應用發展,並通過 Serverless+Hexo 實戰案例,分享如何快速基於 Serverless Framework 進行業務開發部署。
文章整理自Serverless Framework 社區專家陳濤在騰訊雲大學的視頻分享,完整分享視頻如下,感興趣的讀者也可以點擊文末【閱讀原文】下載講師PDF。
文章大綱:
1、Serverless 架構演進 2、Serverless 技術解析 3、Serverless 應用與發展 4、Serverless 靜態博客實戰
1、Serverless 架構演進
單體架構使最原始的站點架構模型,採用單一 VPS 或者服務器做業務支撐,數據庫、靜態存儲和 PAP 腳本打包在一起,提供對外的訪問,顯著缺陷複雜性高,並且隨着業務的增長,其技術載會逐漸上升,部署速度變慢,擴展性能也會受限。所以引出了第二種架構方式即 SOA 架構,最常用的企業架構,通過各個服務模塊,將較為複雜的業務拆分治理,是面向服務的架構,也是目前為止用得最多的架構方式。容器架構與 SOA 架構並沒有明顯的差異。容器架構只是更好的 SOA 載體,是底層計算的革新,但還是會強依賴自身運維能力。Serverless 架構封裝了所有的底層資源管理和系統運維工作,使開發人員更容易使用雲基礎設施。
首先是從最原始的 SOA,有一個管理機構完成功能、接口的定義,然後各個系統統一調用接口,通過服務器進行訪問,從而需要運維一個服務器集群。
接下來看Kubernetes容器編排,它是屬於主從分佈式的架構,主要是由Master節點和工作節點組成的,它主要的意義是對傳統 SOA 的服務層做改造,來實現自動化部署容器、水平擴展、負載均衡等,總的來說,不論是Docker還是Kubernetes,其實現的意義主要是替代服務層級的使用調度分佈式方面的改造。
下圖是 Serverless 架構的簡單模型,Serverless 架構封裝了所有底層資源,包括MVM、Docker和 BaaS 的功能,進行集成封裝,只需要關注 Serverless 應用的架構模型等,簡化了運維,具有彈性伸縮的能力。
開發一個全棧應用需要了解的東西,首先是最底層的 K8S、系統安全、網絡安全、備份等,中間需要留意到監控、日誌報警、負載均衡、可靠性等,再上一層是DB、框架、文件存儲、CDN,這樣開發出一個 Full-stack 網站,對於一個普通的開發者來說是不可接受的,因為需要學習大量底層又不是很必要的知識,而Serverless 架構最核心的價值是讓開發者可以聚焦到最核心最關鍵的業務能力上,而無需關注通用、底層、標準化的東西。
最後,總結一下,Serverless 是什麼?
無服務器雲計算(Serverless Computing)幾乎封裝了所有的底層資源管理和系統運維工作,使開發人員更容易使用雲基礎設施。Serverless 提供了一種方式,極大地簡化了基於雲服務的編程,猶如彙編語言到高級編程語言般的轉換。
Serverless一定是未來的架構方式,而且更方便企業層級做出更好的架構和應用。
2、Serverless 架構演進
Serverless的開發模型,應用層有 REST API、BFF、 SSR、Website、Full-Stack APP,需要研發團隊與 TencentCloud 進行功能的對接,如API、SCF、存儲、DB,這只是現有的 Serverless 的開發模型,現在看來是還不夠優雅的,需要龐大的研發團隊來支撐。
於是引出了一個問題,有沒有辦法可以改善團隊研發的進程,或是中間對接的環節呢,那麼也就是引出了今天的主題我們需不需要框架?
先看一下Serverless Framework 框架能帶來什麼效益,我個人認為框架的幫助有兩個部分,第一部分是組件化開發,第二部分是標準化框架。組件化開發通常是跨業務的可復用性來提高業務能力,對上通過組件化來提高代碼復用的能力跨產品的。標準化框架的作用是幫助我們對接更多的雲服務,如 COS、SAF、API 等一系列雲服務。
那麼組件化和標準化具體是替代哪些功能?組件化能夠提供一些component來製作一些組件化的輪子,如 Express、website、FullStack 、Next.js等,幫助我們完成組件化的功能。標準化做的是部署、調試、架構、資源整合、應用、監控、告警等,對上是承接應用層,如REST API、BFF、SSR、Website、Full-Stack App;對下是接入雲服務,如 API、COS、DB 等。以上是我們技術大綱,幫助大家理解Serverless Framework到底是做什麼,可以幫助實現什麼東西。
- Serverless Framework 應用生命周期管理是由CLI和Dashboard組成,覆蓋了serverless的整個應用生命周期,如服務的部署/刪除/查看/回滾、調試、查看日誌、統計運行數據、DevOps支持。
- Serverless 應用,也就是上述提到的標準化框架和組件化開發。
- Serverless資源,是可以無縫對接騰訊雲Serverless資源。Serverless Framework 其實類似一個承接層或開發組件或包管理的工具。
3、Serverless 應用與發展
下圖是 IVWEB 團隊在 Serverless 的業務落地,用到了 Serverless 值出渲染。首先是在客戶端層,然後到 NGW 接入層完成業務轉發、灰度、鑒權、統計,再接到 Apigateway 完成最終的訪問環節,涉及到雲函數同構環境,Koa 業務邏輯,最後直出返回結果。那麼這一套應用架構最方便最可取之處是免運維、全量日誌、多維度數據統計、雲 API 打通工作流,使得業務上線&維護工作量降低了80%。
下圖是NOW直播B側運營平台的架構圖,主要是實現了 BFF 到 SFF,Serverless 主要包括創建、更新代碼、刪除、容災,達到了提高迭代效率、按需取用,用完即走、分離部署,安全可靠、細粒度的業務邏輯拆分。
下圖是挑選的具有代表性的 component,可供使用,可以在 Serverless 官網站找到 component 文檔。
總結一下Framework的功能:
- 代碼重用,減少代碼重複的開發量
- 統一規範,Framework是對下進行標準化,通過它可以直接對接到基礎產品的功能
- 降低運維門檻和難度
- 專註業務邏輯
- 社區優勢,Serverless Framework其實是北美完成了主力開發,由很多開發者進行維護,具體可以在GitHub搜索Serverless Framework進行了解。
- 易於維護,其實serverless不需要維護的,是將維護的工作交給雲端。
- 提升效率,提高工作和應用效率。
4、Serverless 靜態博客實戰
接下來以一個 Serverless +Hexo 的案例,分享下如何基於 Serverless Framework 快速進行開發部署。實戰步驟很簡單,只有3步:
- 安裝 Serverless Framework、HEXO
- 配置 YML 文件
- 部署到騰訊雲 其中的環節很多是免費的,所以大家可以大膽放心地部署項目。
1. 安裝
安裝前提:
- 安裝Node.js (Node.js 版本需不低於 8.6,建議使用 Node.js 10.0 及以上版本)
- 安裝Git
首先,安裝 Serverless Framework
$ npm install -g serverless
安裝 Hexo
$ npm install -g hexo-cli
安裝 Hexo 完成後,請執行下列命令,Hexo 將會在指定文件夾中新建所需要的文件。
$ hexo init hexo # 生成hexo目錄$ cd hexo$ npm install
新建完成後,指定文件夾的目錄如下:
.├── _config.yml├── package.json├── scaffolds├── source| ├── _drafts| └── _posts└── themes
安裝完成後,可以通過hexo g命令生成靜態頁面
$ hexo g # generate
註:如果希望在本地查看效果,也可以運行下列命令,通過瀏覽器訪問 localhost:4000 查看頁面效果。
$ hexo s # server
2. 配置
在 hexo 目錄下,創建 serverless.yml 文件
$ touch serverless.yml
在 serverless.yml 文件中進行如下配置
# serverless.yml myWebsite: component: '@serverless/tencent-website' inputs: code: src: ./localhexo/public # Upload static files generated by HEXO index: index.html error: index.html region: ap-guangzhou bucketName: my-bucket
配置完成後,文件目錄如下:
.├── .serverless├── hexo| ├── public| ├── ...| ├── _config.yml| ├── ...| └── source└── serverless.yml
3. 部署
通過 serverless deploy 命令(或者 sls 命令)進行部署,並可以添加–debug參數查看部署過程中的信息。
如您的賬號未登陸或註冊騰訊雲,您可以直接通過微信掃描命令行中的二維碼進行授權登陸和註冊。
$ serverless --debug DEBUG ─ Resolving the template's static variables. DEBUG ─ Collecting components from the template. DEBUG ─ Downloading any NPM components found in the template. DEBUG ─ Analyzing the template's components dependencies. DEBUG ─ Creating the template's components graph. DEBUG ─ Syncing template state. DEBUG ─ Executing the template's components graph. DEBUG ─ Starting Website Component. Please scan QR code login from wechatWait login...Login successful for TencentCloud DEBUG ─ Preparing website Tencent COS bucket my-bucket-1250000000. DEBUG ─ Deploying "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ "my-bucket-1250000000" bucket was successfully deployed to the "ap-guangzhou" region. DEBUG ─ Setting ACL for "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ Ensuring no CORS are set for "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ Ensuring no Tags are set for "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ Configuring bucket my-bucket-1250000000 for website hosting. DEBUG ─ Uploading website files from D:hexotinalocalhexopublic to bucket my-bucket-1250000000. DEBUG ─ Starting upload to bucket my-bucket-1250000000 in region ap-guangzhou DEBUG ─ Uploading directory D:hexotinalocalhexopublic to bucket my-bucket-1250000000 DEBUG ─ Website deployed successfully to URL: https://my-bucket-1250000000.cos-website.ap-guangzhou.myqcloud.com. myWebsite: url: https://my-bucket-1250000000.cos-website.ap-guangzhou.myqcloud.com env: 13s » myWebsite » done
訪問命令行輸出的 website url,即可查看您的 Serverless Hexo 站點
註:如果希望更新 hexo 站點中的文章,需要在本地重新運行hexo g進行生成靜態頁面,再運行serverless更新到頁面
4. 移除
可以通過以下命令移除 hexo 網站
$ sls remove --debug DEBUG ─ Flushing template state and removing all components. DEBUG ─ Starting Website Removal. DEBUG ─ Removing Website bucket. DEBUG ─ Removing files from the "my-bucket-1250000000" bucket. DEBUG ─ Removing "my-bucket-1250000000" bucket from the "ap-guangzhou" region. DEBUG ─ "my-bucket-1250000000" bucket was successfully removed from the "ap-guangzhou" region. DEBUG ─ Finished Website Removal. 6s » myWebsite » done
最後,奉上實戰源碼地址:
https://serverlesscloud.cn/doc/providers/tencent/templates/hexo
敲黑板:感興趣讀者可以根據上述操作步驟完成 Serverless Hexo 博客部署,部署成功並提交鏈接至信息表:http://u6uvxlniyxhd4qgj.mikecrm.com/fMWq2Um,即可有機會獲得騰訊企鵝公仔、騰訊雲價值 50元產品代金券等精美禮品。
免費上雲,就用 Serverless Framework
目前,Serverless Framework 服務暫時免費,且 Serverless Framework 服務用到雲函數 SCF、API 網關、對象存儲 COS 等產品,均提供免費額度。
具體免費詳情可查閱:
https://cloud.tencent.com/document/product/1154/38792
立即使用 Serverless,只需三步!
Serverless Framework 是構建和運維 Serverless 應用的框架,簡單三步,即可通過 Serverless Framework 快速實現服務部署。
1、創建本地應用
- 通過 npm 安裝 Serverless
$ npm install -g serverless
- 基於 tencent_nodejs 模板創建 hello_world
$ serverless create --template tencent-nodejs --path my-service
2、安裝相關依賴
- 執行 npm install 安裝相關依賴
$ cd my-service$ npm install
3. 部署
- 掃描微信二維碼一鍵登錄騰訊雲賬號,部署函數到雲端
$ serverless deploy
- 觸發雲函數
$ serverless invoke -f hello_world
部署完成後,即可在命令行中看到部署情況,也可以在騰訊雲控制台看到對應資源。