我在看邓恩·马丁的网络爬虫设计。爬虫服务处理一个新抓取的url,然后:
如果爬虫服务同步调用这两个服务,会发生什么情况?我仍然可以根据每个服务的负载水平地扩展所有3项服务,对吗?我认为可能的原因是,如果其中一个失败了,就会有更复杂的流控制。这些异步作业还有其他更有说服力的原因吗?
发布于 2020-04-10 10:56:50
如果爬虫服务同步调用这两个服务,会发生什么情况?
首先,最慢的服务将成为爬虫的瓶颈。同步调用意味着爬虫需要等待服务处理请求。在排队的情况下,爬虫将工作得更快,处理新的链接,而不是等待其他服务。我们可以假设爬虫可以有自己的内部队列。
第二点--耐久性。如果一个或多个链接丢失了,如果任何服务都会被关闭,并且无法处理来自爬虫的请求,这可能就不那么重要了。但是队列可以是持久的,在磁盘上保存状态,在停止时恢复它的工作。如果所有服务同时中断,并且许多链接将丢失,则可能非常有用。
我认为可能的原因是如果其中一个失败的话,更复杂的流控制。
这种方法不灵活。通常,您应该能够添加任意数量的新服务,可以轻松地扩展工作负载,而无需对代码进行任何更改。因此,“流控制”不应该作为每次添加或删除服务实例时都需要修改的代码而存在。在可以向上或向下扩展的实际应用程序中,所有这些操作都是自动完成的,而无需重新部署应用程序。
发布于 2020-04-10 03:01:13
这种设计选择背后可能有更多的原因,但几乎可以肯定的是使用微型服务。它是一种流行的技术,因此演示它的命令是回答设计问题的一个好主意,维基百科很好地描述了它的好处:
所有这些都适用于这种情况。事实上,定义良好的API使模块分离、可重用、易于理解.很可能这三个模块中的每个模块都有非常不同的执行时间和CPU/内存需求,因此单独扩展它们很有意义。页面上提到的一些公司可能会进一步将这些模块分割成基于团队号的微服务,因此这种分割成3种服务的前提是假设有3个团队,而不是技术上的限制。
这一页还描述了对这项技术的批评。
https://stackoverflow.com/questions/60479306
复制相似问题