用于Web爬虫解决方案的无服务器体系结构
如果你正在使用AWS,这篇文章对你会有一些很好的帮助。
对无服务器体系结构感兴趣,那么你可能已经阅读了许多相互矛盾的文章,并且想知道无服务器体系结构是经济高效还是昂贵的。我想通过对网络抓取解决方案的分析来消除有关有效性问题的疑虑。
实践一
第一种实践是最原始的选择,即AWS中虚拟机的一个实例(称为Amazon Elastic Cloud Compute或EC2)。但是,它肯定与任何无服务器架构都不相似,因此让我们将其视为参考点或基准。此选项类似于为您提供对实例的完全控制权的本地解决方案,但是您需要手动旋转实例,安装环境,设置调度程序以在特定时间执行脚本,并继续执行该操作。24×7。并且不要忘记安全性(设置VPC,路由表等)。此外,您将需要监视实例的运行状况,并可能运行手动更新。
实践二
第二个实践是对解决方案进行容器化并将其部署在Amazon Elastic Container Service(ECS)上。这样做的最大好处是平台独立性。拥有一个Docker文件(一个文本文件,其中包含您可以在命令行上调用以组装映像的所有命令)和环境副本,该脚本使您能够在AWS平台或其他地方在本地重用该解决方案。在AWS上运行它的一个巨大优势是,您可以与其他服务集成,例如AWS CodeCommit,AWS CodeBuild,AWS Batch等。您还可以从Amazon EC2 Spot实例等打折的计算资源中受益。
如上图所示,该架构由 Amazon CloudWatch,AWS Batch和 Amazon Elastic Container Registry (ECR)组成。CloudWatch允许您创建触发器(例如,将代码更新提交到代码存储库时启动作业)或计划的事件(例如,每小时执行一次脚本)。我们希望后者:根据计划执行作业。触发后,AWS Batch将从Amazon ECR获取预构建的Docker映像,并在预定义的环境中执行它。AWS Batch是一项免费服务,可让您配置任务执行所需的环境和资源。它依赖于ECS,ECS在执行时管理资源。您只需为执行任务期间消耗的计算资源付费。
您可能想知道预构建的Docker映像来自何处。它是从Amazon ECR中提取的,现在您有两个选择可以在其中存储Docker映像:
您可以在本地构建Docker映像并将其上传到Amazon ECR。
您只需将少量配置文件(例如Dockerfile,buildspec.yml等)提交到AWS CodeCommit(代码存储库)并在AWS平台上构建Docker映像即可。完整的CI / CD管道。在本地更新脚本文件并将更改提交到AWS CodeCommit上的代码存储库之后,将触发CloudWatch事件,并且AWS CodeBuild将构建新的Docker映像并将其提交到Amazon ECR。调度程序启动新任务时,它将使用更新的脚本文件获取新映像。如果您想进一步探索或者想要实际实现这种方法,请查看GitHub上的项目示例。
实践三
第三个实践基于AWS Lambda,它使您可以按需构建非常精简的基础架构,可以连续扩展,并且每月都有免费的免费套餐。Lambda的主要限制是执行时间不得超过15分钟。如果您的任务运行时间超过15分钟,则需要将其拆分为多个子任务并并行运行,否则您可以使用选项2。
默认情况下,Lambda允许您访问标准库(例如 Python Standard Library)。此外,您可以 构建自己的程序包 以支持功能的执行,也可以使用 Lambda Layers 来访问外部库,甚至是基于Linux的外部程序。
结论
在这篇文章中,我们回顾了AWS云上用于Web爬虫的两种无服务器架构。此外,我们还探索了实施CI / CD管道的方法,以避免将来进行任何手动干预。
--END--
持
续关注