我目前要爬一个网站, 数据量 20 亿,爬完存入数据库
爬虫框架用的 scrapy 最新版,url 都是已知的,直接爬,如果有需要的信息,就提取出保存到数据库,没有需要的信息就继续爬下一个 url
使用 scrapy-redis 分布式爬,目前有 10 台机器
(对方网站没有反爬措施,我可以随心而欲,也不用担心对方会被爬死)
现在,所有机器加起来,总共每秒只能处理处理 500-1000 条,那么 20 亿处理完需要大约 1 个月,我想尽可能的缩短这个时间
我尝试修改 scrapy 的配置文件,把 CONCURRENT_REQUESTS 修改成了 500,速度似乎有所提升
我的 redis 服务器( 2 个 vCPU,5GB 内存)
cpu 维持在 15%左右, 传入字节 160kb/s,传出 100kb/s, 网络数据包 800/s, 磁盘写入 800kb/s, 磁盘写入 4 次 /s 这些数据似乎都不是很高,说明瓶颈可能不在 redis 上(我猜的,因为我不太懂 redis )
我的数据库 1G 内存,最大允许 100 个连接数
内存 45%左右,cpu 1%左右,数据库连接数 10 个
我的 9 台爬虫机器( 1 个 vCPU,3.75GB 内存)
cpu 维持在 70%左右 网络字节数 60kb/s, 网络数据包 200/s, 磁盘写入 20kb/s
另外一台机器,配置更好,( 2 个 vCPU,7.5 GB 内存)
cpu 维持在 10%, 其他数据更低
想问问,除了加机器,还有什么具体的速度优化方案吗?
应该如何排查瓶颈呢?
如何最大化压榨这些机器的性能呢?
非常感谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.