第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,在计算中同样有用。