python爬虫(二十五)-------------------商业爬虫 流水线与批处理

多机器并发分布式的控制模式与自由模式
在实际的应用过程中一般是混合使用,因为控制模式中的控制节点就是你的瓶颈,而自由模式节点之间通信的成本的较高:

URLManager:爬虫系统的核心。负责URL的重要性排序,分发,调度,任务分配。单个的爬虫完成一批URL的爬取任务之后,会找 URLManager要一批新的URL。一般来说,一个爬取任务中包含几千到一万个URL,这些URL最好是来自不同的host,这样,不会给一个 host在很短一段时间内造成高峰值

ContentAcceptor:负责收集来自爬虫爬到的页面或是其它内容。因为商业爬虫不像自己写的爬虫,自己写肯定获取与分析都在一个程序里,但商业爬虫强调分工,
所以爬虫一般将爬取的一批页面,比如,一百个页面,压缩打包成一个文件,发送给ContentAcceptor。ContentAcceptor收到后,解压,存储到分布式文件系统或是分布式数据库,或是直接交给 ContentParser去分析。

ProxyManager:负责管理系统用到的所有Proxy,说白了,负责管理可以用来爬取的IP。爬虫询问ProxyManager,得到一批 Proxy IP,然后每次访问的时候,会采用不同的IP。如果遇到IP被屏蔽,即时反馈给ProxyManager,ProxyManager会根据哪个host屏蔽了哪个IP做实时的聪明的调度

消息队列感觉和路由器差不多:
即虽然任务很多但并不是实时处理的,而是全扔到消息队列中,然后再慢慢处理
注意:爬虫的实时性并不是很重要
什么是消息队列:消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
分布式应用场景:通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。通过消息队列,应用程序可独立地执行

猜你喜欢

转载自blog.csdn.net/qq_41228218/article/details/89034200