在阿里雲上部署定時任務最省錢的方式


背景

有一個很簡單的爬蟲項目,沒啥反爬,代碼也很簡單,數據量也不大,就是每天都需要運行一遍,並且數據持久化存儲。
 

解決方案參考

方案一(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. 可以使用釘釘機器人接收數據采集統計信息。

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM