Files
crawlab/documentation/Architecture/SpiderDeployment.md
2019-12-05 12:06:38 +08:00

1.6 KiB
Raw Blame History

爬虫部署

之前已经在部署爬虫中介绍了爬虫是自动部署在工作节点上的。下面的示意图展示了Crawlab爬虫部署的架构。

如上图所示,整个爬虫自动部署的生命周期如下(源码在services/spider.go#InitSpiderService)

  1. 主节点每5秒会从爬虫的目录获取爬虫信息然后更新到数据库这个过程不涉及文件上传
  2. 主节点每60秒,从数据库获取所有的爬虫信息然后将爬虫打包成zip文件并上传到MongoDB GridFS并且在MongoDB的spiders表里写入file_id文件ID
  3. 主节点通过Redis PubSub发布消息(file.upload事件包含文件ID给工作节点通知工作节点获取爬虫文件
  4. 工作节点接收到获取爬虫文件的消息从MongoDB GridFS获取zip文件并解压储存在本地。

这样,所有爬虫将被周期性的部署在工作节点上。

MongoDB GridFS

GridFS是MongoDB储存大文件大于16Mb的文件系统。Crawlab利用GridFS作为了爬虫文件储存的中间媒介可以让工作节点主动去获取并部署在本地。这样绕开了其他传统传输方式例如RPC、消息队列、HTTP因为这几种都要求更复杂也更麻烦的配置和处理。

Crawlab在GridFS上储存文件会生成两个collectionfiles.filesfiles.fs。前者储存文件的元信息,后者储存文件内容。spiders里的file_id是指向files.files_id

参考: https://docs.mongodb.com/manual/core/gridfs/