我想知道ESI模块的性能现在怎么样?我在网上读到一些帖子说,Varnish上的ESI性能实际上比真正的东西慢。
假设我有一个包含超过3500个ESI包含的页面,这会如何表现? ESI是否设计用于此类使用?
我想知道ESI模块的性能现在怎么样?我在网上读到一些帖子说,Varnish上的ESI性能实际上比真正的东西慢。
假设我有一个包含超过3500个ESI包含的页面,这会如何表现? ESI是否设计用于此类使用?
[
<esi:include src="/station/best_of_80s" />,
<esi:include src="/station/herrmerktradio" />,
<esi:include src="/station/bluesclub" />,
<esi:include src="/station/jazzloft" />,
<esi:include src="/station/jahfari" />,
<esi:include src="/station/maximix" />,
<esi:include src="/station/ondalatina" />,
<esi:include src="/station/deepgroove" />,
<esi:include src="/station/germanyfm" />,
<esi:include src="/station/alternativeworld" />
]
这些所包含的资源本身就是完整和有效的JSON响应。所有站点的完整列表大约有1070个。因此,当缓存为空且完整站点列表是第一个请求时,varnish会在后端发出1000个请求。当缓存热时,ab看起来像这样:
$ ab -c 100 -n 1000 http://127.0.0.1/stations
[...]
Document Path: /stations
Document Length: 2207910 bytes
Concurrency Level: 100
Time taken for tests: 10.075 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 2208412000 bytes
HTML transferred: 2207910000 bytes
Requests per second: 99.26 [#/sec] (mean)
Time per request: 1007.470 [ms] (mean)
Time per request: 10.075 [ms] (mean, across all concurrent requests)
Transfer rate: 214066.18 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 11 7.3 9 37
Processing: 466 971 97.4 951 1226
Waiting: 0 20 16.6 12 86
Total: 471 982 98.0 960 1230
Percentage of the requests served within a certain time (ms)
50% 960
66% 985
75% 986
80% 988
90% 1141
95% 1163
98% 1221
99% 1229
100% 1230 (longest request)
$
100次/秒的请求速度看起来不是很好,但考虑文档的大小。214066K字节/秒可以充分利用1G位接口。
使用带有缓存的单个请求 ab(ab -c 1 -n 1 ...)显示83ms / req。
后端本身基于Redis。我们在NewRelic中测量了平均响应时间为0.9ms [sic]。在重新启动Varnish后,第一个具有冷缓存(ab -c 1 -n 1 ...)的请求显示3158ms / rec。这意味着在生成响应时,Varnish和我们的后端每个ESI包含大约需要3ms。这是一个标准的带有8个核心的core i7比萨盒子。我在满负荷下测量了这个数字。以这种方式提供大约1.5亿次请求/月,命中率为0.9。这些数字确实表明ESI-包含是串行解析的。
设计这样的系统时必须考虑以下因素:1)在Varnish重新启动时缓存为空时,您的后端能够承受负荷;2)通常您的资源不会全部同时过期。对于我们的站点,它们每小时过期一次,但我们将到期头添加了最多120秒的随机值。
希望这可以帮到你。
我不是第一手资料,但我听说Varnish的当前ESI实现序列化包含请求;也就是说,它们不是并发的。
如果是这样的话,在你提到的情况下,性能确实会很差。
我会尝试让有第一手经验的人来评论。
并行 ESI 请求在 varnish 的 **商业**版本中可用:https://www.varnish-software.com/plus/parallel-esi/。片段请求的并行性显然使由多个片段组成的页面的组装更快。
(这将是一条评论,但我声望不足以这样做)