第10章 理解Scrapy性能
通常情况下,性能很容易出现问题。对于Scrapy来说,性能就不只是容易出现问题了,而是几乎肯定会出现,因为它有很多有悖常理的行为。除非你对Scrapy内部有非常好的理解,否则你会发现,即使非常努力地优化性能,也很可能得不到收益。这是使用高性能、低延迟以及高并发环境复杂性的一部分。在优化瓶颈性能时,阿姆达尔定律仍然是正确的,不过除非你能指明真正的瓶颈所在,否则在系统其他任何部分的优化都无法增长每秒能够抓取的item数量(吞吐量)。我们可以从Goldratt博士经典的The Goal一书中获得更多的感知,这本商务书籍通过优秀的隐喻对瓶颈、延迟和吞吐量的理念进行了阐释。相同的理念同样也适用于软件。本章将帮助你找出Scrapy配置中的瓶颈,以及避免出现明显的错误。
请注意本章是一个进阶章节,其中会涉及一些数学知识。计算将会比较简单,并且会附有用于展示相同概念的图表。如果你不喜欢数学,只需忽略掉公式即可,你仍然能够获得Scrapy性能如何工作的重要领悟。
10.1 Scrapy引擎——一种直观方式
并行系统看起来与管道系统很相似。在计算机科学中,我们使用队列符号来表示队列以及处理中的元素(见图10.1左侧)。队列系统的基本法则是利特尔法则,该法则认为在稳定状态下,队列系统中的元素数量(N)等于系统吞吐量(T)乘以总排队/服务时间(S),即N = T · S。另外两种形式是:T = N / S以及S = N / T,在计算中同样有用。
本文深入探讨了Scrapy爬虫框架的性能,指出性能问题几乎肯定会出现,除非对其内部工作原理有深入了解。文章通过类比管道系统解释了Scrapy的并发和瓶颈,强调了下载器作为关键性能因素。介绍了如何使用telnet获取组件利用率以监控系统状态,展示了不同场景下的基准测试,并提供了解决性能问题的案例,包括CPU饱和、代码阻塞、下载器中的“垃圾”请求、响应大小限制以及item并发问题。作者强调了解系统瓶颈并针对性优化的重要性,以及避免使用阻塞代码和充分利用下载器的并发能力。
订阅专栏 解锁全文
65万+

被折叠的 条评论
为什么被折叠?



