前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用于Web爬虫解决方案的无服务器体系结构

用于Web爬虫解决方案的无服务器体系结构

作者头像
CloudBest
发布2021-03-30 11:53:36
2.6K0
发布2021-03-30 11:53:36
举报
文章被收录于专栏:CloudBestCloudBest

如果你正在使用AWS,这篇文章对你会有一些很好的帮助。

对无服务器体系结构感兴趣,那么你可能已经阅读了许多相互矛盾的文章,并且想知道无服务器体系结构是经济高效还是昂贵的。我想通过对网络抓取解决方案的分析来消除有关有效性问题的疑虑。

用例非常简单:在一天中的某些时候,我想运行一个Python脚本并抓取一个网站。该脚本的执行时间不到15分钟。这是一个重要的考虑因素,我们将在后面讨论。该项目可以被视为没有用户界面的标准提取,转换,加载过程,并且可以打包到一个自包含的函数或库中。

随后,我们需要一个环境来执行脚本。我们至少要考虑两个选项:本地(例如在本地计算机上,家庭中的Raspberry Pi服务器,数据中心中的虚拟机等等),或者可以将其部署到云中。乍一看,前一种选择可能会更具吸引力-您可以免费使用基础架构,为什么不使用它呢?本地托管解决方案的主要问题是可靠性-在断电,硬件或网络故障的情况下,您可以确保其可用性吗?此外,您的本地基础架构是否支持持续集成和持续部署(CI / CD)工具以消除任何手动干预?考虑到这两个限制,我将继续在云中而不是在本地分析解决方案。

让我们从三种基于云的方案的定价开始,并在下面进行详细介绍。

* AWS Lambda免费使用层包括每月100万个免费请求和每月40万GB-秒的计算时间。查看AWS Lambda定价。

实践一

第一种实践是最原始的选择,即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的外部程序。

您可以通过Web控制台访问AWS Lambda,以创建新功能,更新Lambda代码或执行它。但是,如果您超越了“ Hello World”功能,则可能会意识到在线开发是不可持续的。例如,如果您想从函数访问外部库,则需要在本地对其进行存档,上传到Amazon Simple Storage Service(Amazon S3),然后将其链接到Lambda函数。

自动化Lambda函数开发的一种方法是使用 AWS Cloud Development Kit (AWS CDK),这是一个开放源代码软件开发框架,可以使用熟悉的编程语言来建模和配置您的云应用程序资源。最初,设置和学习可能会很费力;但是好处是值得的。举个例子,请看一下GitHub上的这个Python类,它创建一个Lambda函数,一个CloudWatch事件,IAM策略和Lambda层。

总而言之,AWS CDK允许您将基础架构作为代码,并且所有更改都将存储在代码存储库中。对于部署,AWS CDK会构建一个 AWS CloudFormation 模板,这是在AWS上对基础架构进行建模的标准方法。此外, AWS无服务器应用程序模型(SAM)允许您在本地测试和调试无服务器代码,这意味着您确实可以创建持续集成。

在GitHub上查看基于Lambda的网络抓取工具的示例。

结论

在这篇文章中,我们回顾了AWS云上用于Web爬虫的两种无服务器架构。此外,我们还探索了实施CI / CD管道的方法,以避免将来进行任何手动干预。

--END--

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字科智 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档