背景
有一個很簡單的爬蟲項目,沒啥反爬,代碼也很簡單,數據量也不大,就是每天都需要運行一遍,並且數據持久化存儲。
解決方案參考
方案一(ECS)
方案說明:
買台服務器,想干啥干啥。根據自己的需求購買相應的配置。
優點:
非常簡單易用,不需要多說了
缺點:
貴。最便宜的服務器也要一個月30+。
方案二(函數計算)
白嫖阿里雲函數計算的免費額度:
https://help.aliyun.com/document_detail/54301.html
- 調用次數:每月前100萬次函數調用免費。
- 函數實例資源使用量:每月前400,000 GB-秒函數實例資源使用量免費。
方案說明:
代碼部署有兩種方式:
1.使用阿里雲提供的函數計算環境來部署,阿里雲提供了 python、node、php、java、go等運行時環境。詳見文檔:
https://help.aliyun.com/document_detail/73338.html。
2.使用自定義的 docker 鏡像提供服務
推薦使用第 2 種方式,第一種方式僅適合非常簡單的應用。因為運行時環境版本是固定的,而且依賴安裝起來有不少問題。
代碼部署完成后,如果是定時任務,可選用定時器觸發執行。其他類型,可選用 http 調用觸發執行。
優點
按量計費,且有免費額度,一般的小應用免費額度就夠用了, 一分錢不用花。
缺點
最大的缺點是:應用每次運行有時長限制,最大值 120 秒。所以如果你的代碼每次運行會超過120秒,那就沒辦法用這個了。
其他缺點:
1. 調試不方便
2. 以 python 為例,純 python的第三方依賴安裝沒有問題,但一旦涉及到 C 擴展,則依賴無法安裝成功。
3. 需要 docker 使用經驗
方案三(Serverless 容器服務 ASK)
阿里雲 Serverless 容器服務 ASK:
無需創建和管理 Master 節點及 Worker 節點,即可通過控制台或者命令配置容器實例的資源、指定應用容器鏡像以及對外服務的方式,直接啟動應用程序。
方案說明:
一個 k8s 集群,可以運行任何應用。定時任務可采用 k8s 的 CronJob 方式運行
優點:
可擴展性極強,一個 k8s 集群想干啥干啥
按量計費,沒有固定節點費用。
簡單易用
缺點:
1. k8s 集群必須創建一個負載均衡用來提供k8s api服務。最低配的費用 72 元/月
2. 如果你的應用需要訪問公網,必須配置一個 NAT 網關。最低配的費用 165 元/月
3. 需要 k8s 使用經驗
方案四(Serverless 應用引擎 SAE)
阿里雲 Serverless 應用引擎 SAE:
https://help.aliyun.com/document_detail/96732.html
- CPU 0.0030864元/分鍾/Core
- 內存 0.0007716元/分鍾/GiB
方案說明:
1. 使用自定義 docker 鏡像部署一個應用
2. 設置定時啟停規則
優點:
部署簡單
按量計費
可以使用釘釘機器人接收應用啟動和停止通知。
缺點:
1. 只能使用定時的方式啟動和停止應用,所以需要預估應用運行時間,避免造成不必要的時間浪費或者提前被停止
2. 如果需要訪問公網的話,必須提供購買彈性IP。按量付費的話:配置費用 14 元/月, 流量費用 0.8 元/G
3. 需要提前預估應用耗費的 CPU 和 內存用來選擇規格。
我的選擇
方案四(Serverless 應用引擎 SAE)
1. 爬蟲代碼運行時間是會超過120秒的
2. k8s 太貴了,而且我也用不到那么多復雜的功能。
3. ECS 也太貴了
具體實行方案:
1. 代碼打包成 docker 鏡像,docker 鏡像托管使用阿里雲的容器鏡像服務,個人版是免費的,而且同屬內網,也會加快鏡像拉取速度。
2. 注意啟動命令應該是先運行代碼,然后阻塞住。如果不阻塞的話,容器在運行完代碼后會退出,那么 SAE 服務會自動重啟容器,然后你的代碼就會再次運行,如此周而復始。。。
3. 配置 SAE 時不需要選擇健康探測,也不需要在容器里啟動 HTTP 服務。
4. 很重要的一個是數據持久化存儲,我選擇使用 OSS 服務,將采集后的數據存入 SQLite 數據庫, 然后將數據庫上傳到 OSS 進行持久化存儲。
5. 每次修改代碼只需要在本地打包成 docker 鏡像,然后上傳鏡像即可。
6. 可以使用釘釘機器人接收數據采集統計信息。