Asynchronous 爬虫设计-调用异步作业与调用服务

Asynchronous 爬虫设计-调用异步作业与调用服务,asynchronous,architecture,microservices,jobs,system-design,Asynchronous,Architecture,Microservices,Jobs,System Design,我在看。 爬网程序服务处理新爬网的url,然后: 向反向索引服务队列添加作业,以生成反向索引 将作业添加到文档服务队列以生成静态标题和代码段 如果爬虫服务将同步调用这两个服务,会发生什么情况?我仍然能够根据每个服务上的负载水平扩展所有3个服务,对吗?在我看来,一个可能的原因是,如果其中一个出现故障,那么流控制会更加复杂。这些异步作业还有其他更令人信服的原因吗?这种设计选择背后可能有更多的原因,但其中一个原因几乎可以肯定是使用。这是一种很流行的技术,因此演示对它的掌握是回答设计问题的一个好主意

我在看。 爬网程序服务处理新爬网的url,然后:

  • 向反向索引服务队列添加作业,以生成反向索引
  • 作业添加到文档服务队列以生成静态标题和代码段

如果爬虫服务将同步调用这两个服务,会发生什么情况?我仍然能够根据每个服务上的负载水平扩展所有3个服务,对吗?在我看来,一个可能的原因是,如果其中一个出现故障,那么流控制会更加复杂。这些异步作业还有其他更令人信服的原因吗?

这种设计选择背后可能有更多的原因,但其中一个原因几乎可以肯定是使用。这是一种很流行的技术,因此演示对它的掌握是回答设计问题的一个好主意,它的好处在维基百科上有很好的描述:

  • 模块化:这使应用程序更易于理解、开发、测试,并对架构侵蚀具有更强的恢复能力。[6]与单片架构的复杂性相比,这一优势常常被认为是有道理的。[33]
  • 可伸缩性:由于微服务是相互独立地实现和部署的,即它们在独立的流程中运行,因此可以独立地对它们进行监控和伸缩。[34]
  • 异构系统和遗留系统的集成:微服务被认为是现有单片软件应用程序现代化的可行手段。[35][36]有几家公司的经验报告,他们已经成功地用微服务替换了现有软件的(部分),或者正在这样做。[37]遗留应用程序的软件现代化过程是使用增量方法完成的。[38]
  • 分布式开发:它使小型自主团队能够独立开发、部署和扩展各自的服务,从而使开发并行化。[39]它还允许通过不断重构形成单个服务的体系结构。[40]基于微服务的体系结构有助于持续集成,持续交付和部署。[41][42]
所有这些都适用于这种情况。事实上,定义良好的API使模块分离、可重用、易于理解。这三个模块中的每一个都很可能有非常不同的执行时间和CPU/内存需求,因此单独扩展它们非常有意义。页面上提到的一些像亚马逊这样的公司可能会更进一步,根据团队编号将这些模块拆分为微服务,因此可以根据假设有3个团队而不是技术限制来选择将这些模块拆分为3个服务


本页还介绍了对该技术的批评。

选择这种设计可能有更多的原因,但其中一个原因几乎可以肯定是使用了。这是一种很流行的技术,因此演示对它的掌握是回答设计问题的一个好主意,它的好处在维基百科上有很好的描述:

  • 模块化:这使应用程序更易于理解、开发、测试,并对架构侵蚀具有更强的恢复能力。[6]与单片架构的复杂性相比,这一优势常常被认为是有道理的。[33]
  • 可伸缩性:由于微服务是相互独立地实现和部署的,即它们在独立的流程中运行,因此可以独立地对它们进行监控和伸缩。[34]
  • 异构系统和遗留系统的集成:微服务被认为是现有单片软件应用程序现代化的可行手段。[35][36]有几家公司的经验报告,他们已经成功地用微服务替换了现有软件的(部分),或者正在这样做。[37]遗留应用程序的软件现代化过程是使用增量方法完成的。[38]
  • 分布式开发:它使小型自主团队能够独立开发、部署和扩展各自的服务,从而使开发并行化。[39]它还允许通过不断重构形成单个服务的体系结构。[40]基于微服务的体系结构有助于持续集成,持续交付和部署。[41][42]
所有这些都适用于这种情况。事实上,定义良好的API使模块分离、可重用、易于理解。这三个模块中的每一个都很可能有非常不同的执行时间和CPU/内存需求,因此单独扩展它们非常有意义。页面上提到的一些像亚马逊这样的公司可能会更进一步,根据团队编号将这些模块拆分为微服务,因此可以根据假设有3个团队而不是技术限制来选择将这些模块拆分为3个服务

该页还描述了对该技术的批评

如果爬虫服务将同步调用这两个服务,会发生什么情况

第一点-然后最慢的服务将成为爬虫程序的瓶颈。同步调用意味着爬虫程序需要等待服务处理请求。在排队的情况下,爬虫将更快地工作,处理新的链接,而不等待其他服务。我们可以假设爬虫程序可以有自己的内部队列tho

第二点——耐久性。如果一个或多个链接丢失,或者任何一个服务停止,并且无法处理来自爬虫程序的请求,那么这可能并不重要。但是队列可以持久,保存磁盘上的状态,在停止时恢复其工作。如果所有服务同时关闭,许多链接将丢失,这将非常有用

在我看来,一个可能的原因是,如果其中一个