在阿里云上部署定时任务最省钱的方式


背景

有一个很简单的爬虫项目,没啥反爬,代码也很简单,数据量也不大,就是每天都需要运行一遍,并且数据持久化存储。
 

解决方案参考

方案一(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