我目前要爬一个网站, 数据量 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%, 其他数据更低
想问问,除了加机器,还有什么具体的速度优化方案吗?
应该如何排查瓶颈呢?
如何最大化压榨这些机器的性能呢?
非常感谢
1
x66 2018-11-30 17:08:54 +08:00 via iPhone 1
Mark,关注一下,或许一台机器上多部署几个也算一个方案?
|
2
find456789 OP @x66 谢谢 我试试
|
3
PulpFunction 2018-11-30 17:15:40 +08:00
啥 20 亿数据能不设防?
|
4
lerry 2018-11-30 17:21:13 +08:00
瓶颈会不会在网站性能
|
5
dongisking 2018-11-30 17:31:05 +08:00 via Android
Mark
|
6
miniliuke 2018-11-30 17:39:23 +08:00 via Android
换了 python 可能会快点,不是说是 python 的坑,是你的代码的问题,最好排查一下......怀疑你处理没有做多线程或异步,还有 python 的多线程的 cpu 性能也是有限制的
|
7
find456789 OP @lerry 应该不会
|
8
find456789 OP @miniliuke 谢谢 用的是 scrapy 这个框架,各方面应该不会很差, 应该是我不会配置 目前还是维持在 400 个 url/s ,要想办法突破 1k 才行
|