1. 程式人生 > >三分鐘學會如何在函數計算中使用 puppeteer

三分鐘學會如何在函數計算中使用 puppeteer

但是 span 排查 認證 MQ order 截圖 lan rds

摘要: 使用 puppeteer 結合函數計算,可以快速的構建彈性的服務完成各種功能,包括:生成網頁截圖或者 PDF、高級爬蟲,可以爬取大量異步渲染內容的網頁、模擬鍵盤輸入、表單自動提交、登錄網頁等,實現 UI 自動化測試和捕獲站點的時間線,以便追蹤你的網站,幫助分析網站性能問題

簡介

使用 puppeteer 結合函數計算,可以快速的構建彈性的服務完成各種功能,包括:

  • 生成網頁截圖或者 PDF

  • 高級爬蟲,可以爬取大量異步渲染內容的網頁

  • 模擬鍵盤輸入、表單自動提交、登錄網頁等,實現 UI 自動化測試

  • 捕獲站點的時間線,以便追蹤你的網站,幫助分析網站性能問題

接下來,將基於一個腳手架項目開發我們自己 puppeteer 項目。

下載項目

技術分享圖片


項目結構

技術分享圖片


如何寫業務代碼

index.js 文件

技術分享圖片

本地測試

執行命令: npm run local 。測試您操作 chrome headless 的相關 api 是否正確運行。

編譯打包

包含 chrome headless

執行命令:npm run package 。命令會將 chrome headless 文件一起打包進項目,放在項目根目錄,函數執行的時候,默認將 chrome headless 安裝到 /tmp 目錄。

不包含 chrome headless

執行命令:npm run package-nochrome 。命令不會將 chrome headless 文件一起打包進項目,你需要額外將 chrome-headless 上傳到 OSS,通過環境變量告訴函數如何從 OSS 下載並安裝,默認將 chrome headless 安裝到 /tmp

目錄。為函數計算設置環境變量:

  • CHROME_BUCKET(必填): chrome headless 上傳到 OSS 的 bucket

  • CHROME_REGION(必填): chrome headless 上傳到 OSS 的 region

  • CHROME_KEY(必填): chrome headless 上傳到 OSS 的 key。 默認值: headless_shell.tar.gz

部署

編譯打包輸出的文件:package.zip,通過函數計算控制臺或者 fcli 命令工具上傳已打包文件。fcli 上傳已打包文件命令:

技術分享圖片

為什麽要使用函數計算

函數計算是一個相對較新的事物,可能大部分開發人員或架構師對它很陌生。微服務架構是當下很流行的一種系統架構,微服務架構有沒有不夠完美的地方?答案是肯定的。基於微服務架構,我們需要考慮使用什麽微服務框架來架構系統、需要多少臺服務器、如何有效減輕運維負擔等一些列問題。另外,按照《福布斯》雜誌的統計,在商業和企業數據中心的典型服務器僅提供 5%~15% 的平均最大處理能力的輸出。這無疑是一種資源的巨大浪費。

有沒有辦法解決上面的不足?答案也是肯定的,阿裏雲函數計算就是在這樣的背景下應運而生的。如果把雲計算理解成一個執行環境,那麽,在這個環境裏,函數(即業務邏輯的載體)+ 數據(即跟業務相關的輸入與輸出)就是應用的核心,有了函數、數據、事件這三者,其它任何代碼和框架,無非是整個應用的膠水和UI罷了。那麽,最理想的情況就是用最少的時間寫膠水,將更多的時間投入到核心應用的開發中,甚至,徹底實現整個軟件棧的微服務化。函數計算就是這裏的膠水。

開發效率

項目開發效率傳統微服務方式函數計算方式
采購服務器等基礎設施需要不需要
管理服務器等基礎設施需要不需要
開發業務服務模塊需要需要
部署業務服務模塊需要需要,但是很簡單,提供了很多工具
通過 nginx 搭建反向代理、https 和負載均衡需要不需要,通過阿裏雲 API 網關或函數 HTTP 觸發器可以實現
搭建相關日誌服務需要不需要,通過日誌開關開啟日誌服務
配置安全訪問規則需要不需要,自帶基礎安全訪問配置,API 網關提供更多的配置
運維負擔
開發效率高,通常幾天就能完成

可靠性

項目可靠性傳統微服務方式函數計算方式
峰值壓力當峰值壓力突增時,計算資源擴容不及時容易導致服務過載彈性伸縮,面對峰值壓力
錯誤處理需要自行處理服務器宕機,進程崩潰等問題無需處理服務器等故障,函數計算實現基礎設施的容錯
項目架構基礎設施管理比較復雜系統架構經過大量項目的驗證和長時間的打磨,相對穩定可靠很多

成本

項目成本傳統微服務方式函數計算方式
采購服務器等基礎設施成本成本高,利用率低
代碼開發成本成本高,包含基礎架構代碼和業務代碼成本低,只需關註業務代碼開發
函數計算成本成本低,按需付費,每月還有一定免額
運維成本成本高,難度大成本低,難度很小,甚至可以不需要專門的運維人員
集成阿裏雲其他產品成本,如 OSS 和RDS 等成本高成本低,提供對阿裏雲其他產品無縫集成

安全

項目安全傳統微服務方式函數計算方式
身份認證和訪問控制需自行實現除非您顯式的允許匿名調用函數,函數計算將對每一個 API 調用進行身份驗證。只有獲得您的顯式授權(借助於阿裏雲訪問控制服務,RAM),您的函數才可以訪問其他雲服務資源或者被其他用戶/雲服務調用。借助阿裏雲 API 網關,您也可以使用 OpenID 等機制對函數調用進行身份驗證
操作追蹤和審計需自行實現需自行實現
數據安全需自行實現通過使用訪問控制授權和函數計算環境變量等功能,您不必再將訪問憑證等敏感信息保存在代碼中。所有您借助函數計算服務持久化保存的數據,包括代碼、環境變量等等,都被加密存儲。系統在運行代碼之前,將對代碼進行完整性檢測
運行時安全需自行實現每個函數都在獨立的、隔離的環境中被執行。函數計算提供與阿裏雲彈性計算(ECS)相同的隔離強度。函數計算會周期性的重置運行時環境,並自動更新操作系統以及運行時依賴軟件的安全補丁
異常響應需自行實現函數計算允許您設置資源使用的上限,確保您的費用消耗可控。同時,函數計算提供函數調用次數,流控次數,錯誤率等指標。借助雲監控,您可以為相關指標設置監控報警,快速響應異常情況

總結

函數計算有如下優勢:

  • 無需采購和管理服務器等基礎設施

  • 專註業務邏輯的開發

  • 提供日誌查詢、性能監控、報警等功能快速排查故障

  • 以事件驅動的方式觸發應用響應用戶請求

  • 毫秒級別彈性伸縮,快速實現底層擴容以應對峰值壓力

  • 按需付費。只需為實際使用的計算資源付費,適合有明顯波峰波谷的用戶訪問場景

原文鏈接


三分鐘學會如何在函數計算中使用 puppeteer