Crawlab 是基于 Golang 的分布式爬虫管理平台,旨在解决大量不同种类的爬虫管理困难的问题。Crawlab 的目标是轻松管理一切爬虫,让爬虫管理变得更简单( Easy Crawling )。自去年( 2019 年) 3 月份上线以来,Crawlab 经历了大量的迭代和优化,受到爬虫爱好者们和开发者们的好评。如今在 Github 上已经有 6.4k Star,总用户数接近 7k,成为了最受欢迎的爬虫管理平台。经过近数月的迭代,我们陆续上线了定时任务、数据分析、可配置爬虫、SDK 、消息通知、Scrapy 支持、Git 同步等功能,将 Crawlab 打造得更加实用,更加全面,能够真正帮助用户解决爬虫管理困难的问题。
Crawlab 专业版 (Crawlab Pro) 是针对专业用户以及企业量身打造的。它的稳定性更高,相较于 Crawlab 社区版功能更强大。专业版在底层特别是数据库层面做了大量的优化,保证爬虫任务能够稳定而高效的运行并抓取数据。此外,专业版相较于社区版有很多强大的专属功能,例如节点、数据库监控功能,SQL 数据库 (MySQL 、Postgres) 集成等等。近期我们将上线 Kafka 、ElasticSearch 集成的功能,以帮助 Crawlab 用户更好的集成自己的数据系统 (例如数据仓库)。在未来,我们将支持更加高级的可配置爬虫。
为什么会开发专业版产品?其实,最开始我们只是打算商业化来收取一些费用来负担服务器的费用。但是,后来我们突然发现,专业版用户(或企业用户)的反馈意见比社区版用户提出的问题要有价值得多,特别是在企业使用 Crawlab 方面,让我们意识到很多需要解决的真实问题。于是,我们相信收费是一个产品改进的最好途径,因为很少有人会对一个免费产品各种挑剔。只有付了钱或上了生产环境,用户才会占在提出真正的反馈意见,而且往往都是非常实用而且我们意识不到的问题。因此,我们会坚持开发 Crawlab 的商业版本,并根据付费用户的反馈意见不断完善产品,让所有人都能轻松管理一切爬虫。
下面,我们将详细介绍 Crawlab 专业版的一个强大而实用的专属功能:性能监控。
对于企业级应用来说,特别是分布式应用服务,经常需要监控各个服务器或数据库的性能指标,例如 CPU 、内存、磁盘空间以及网络资源。爬虫管理平台同样不例外,也是需要了解爬虫所在节点的性能状况,以便更合理的分配资源、及时扩容等等。否则,可能会出现一些意料不到的状况。例如,当分布式爬虫抓取的数据量非常大,占满了磁盘空间,这将导致服务器上的应用崩溃;同样的,如果服务器的 CPU 或内存被占满,将导致服务器无法登录、操作或运行应用等问题。这通常都将是灾难性的,如果数据量比较大、应用服务较多,恢复起来也是个很头疼的问题。
为了解决这个问题,我们在 Crawlab 专业版中加入了节点 /数据库性能监控功能,以帮助用户更方便的时刻掌握自己分布式节点的性能状况,预测好性能瓶颈,好随时扩容或合理分配资源。
Crawlab 专业版的监控功能主要包括两个:
在 Crawlab 专业版首页,我们可以看到 MongoDB 数据库、Redis 数据库、主节点、工作节点的性能数据概览。这些都是及时获取的数据,反应的是当前各个节点数据库的性能状况(如下图)。
从这个图我们看到,其实主节点( Master )和工作节点( Worker )的负载,例如内存,都已经比较高了,工作节点的 CPU 负载甚至达到了 100%。这时,为了扩展业务,我们可以考虑增加一台服务器来部署 Crawlab 工作节点。
每次登录 Crawlab 专业版,节点数据库性能指标是我们第一个看到的数据,这能帮助我们时刻了解分布式集群的健康状况,从而避免因资源不够而导致的抓取流程中断。
在 “监控” 页面,我们可以看到各个节点、数据库的性能指标时序图(如下图)。监控时序图能帮助我们了解过去的性能演化情况,通过增长速率预测未来的性能瓶颈,并帮助我们随时采取相应的措施。
从这张图我们看到,节点磁盘空间的增长速度大概是 0.4% 每小时,也就是 9.6% 每天。这是一个非常高的增长速度。也就是说,如果我们不采取任何措施的话,5 天内磁盘空间就会触顶,这将导致节点磁盘空间不足,从而发生宕机的风险。因此,我检查了一下磁盘空间上升的原因,发现 Docker 日志无限制增长导致的。知道了原因就很简单了,我后续限制了 Docker 容器日志大小为 500MB,防止其无限制增长导致磁盘空间占满。
我们有一位企业客户,在成功部署了我们的 Crawlab 专业版之后,开始使用很顺利,都能够顺利抓取数据。当时,在这台服务器上部署有:Crawlab 主节点、MongoDB 、Redis 。后来通过性能监控发现 MongoDB 的数据增长速度很快,内存迅速到达瓶颈。于是,客户决定扩容,我们帮其在新服务器上部署了 Crawlab 工作节点,并通过内网连接到原 MongoDB 和 Redis,成功加入集群。随着客户业务量的增大,同时运行的爬虫数量越来越多,消耗的 CPU 、内存、网络带宽资源又逐渐达到瓶颈。我们建议将主节点迁移出来,保证数据与服务隔离,同时空出更多的资源给爬虫。我们接着又帮助客户在新采购的两台服务器上部署了 Crawlab 专业版,将原先的主节点迁移到一台新服务器,在另一台新服务器上部署工作节点。这样调整以后,各个资源的负载更加均衡了,抓取稳定性也更好了。
整个架构的演进过程如下图。
可以看到,性能监控功能帮助客户及时掌握自己的爬虫管理平台健康状况,保证能够在业务量增大的时候处变不惊。这就跟我们开车一样,需要一个实时的仪表盘,能够看到速度、引擎转速、发动机温度等指标,协助我们安全驾车。
Crawlab 专业版的性能监控功能是一个非常实用的功能,能够帮助用户全方位的随时掌握节点动态,及时调整资源分配或扩容。如果没有性能监控,就像飞行员靠肉眼开飞机一样危险。因此,我们推荐每一个希望应用 Crawlab 在企业生产环境的用户,都使用 Crawlab 专业版。
我知道很多企业都有部署 Zabbix 、Prometheus+Grafana 来监控节点性能。当然,这些都是很棒的工具,我并不反对使用它们。只是 Crawlab 专业版内置了这些功能,让我们随时都能在一个一体化平台中看到相关性能指标,而不是打开新的页面来查看,这样要来得更方便一些;另外,Zabbix 、Prometheus 同样需要专门部署,而 Crawlab 专业版是内置的,不需要专门部署安装,非常方便。有了专业版之后,其实完全可以不用其他的性能监控工具了。