Hello!
2013/11/5 Kai Ding:
>
> 针对这个问题我也有做测试:将proxy_buffer_size设置的尽量小,2k,然后访问的文件比较大(100MB),这种情况下(proxy_buffering
> on & proxy_buffering off)观察发现其实效率差别也不大 ,我一度都在怀疑是不是我设置的proxy_buffering
> off没生效。
对于网络条件极好的场景,这里影响最大的“效率”其实是内存效率,而不是其他。
> 个人想法:proxy_buffering
> off且proxy_buffer_size为2k,那nginx每次只从后端1取2KB响应数据,
这种理解有问题。由于 nginx 使用的是非阻塞 IO,所以它只是在可读事件上读取当前能读的数据量。这里的 buffer size
只是规定了 nginx 从上游最多接收到这么多数据之后,如果这些数据不能及时都刷到下游去,就不再从上游读取更多数据了。这是一种通过下游写出速度来控制上游读入的速度的模式。
> 而proxy_buffering
> on时,nginx每次从后端获取的数据应该是proxy_buffers定义的大小吧,取的次数增加了,照理说,效率应该提升的比较明显才对~
>
在全缓冲模式下,上游的数据能读多少读多少,不会受下游写速度的影响。因为内存占用会明显高很多(同时有可能在超出 proxy_buffers
的大小之后,刷到临时文件,除非你把 proxy_max_temp_file_size 置为 0)。
全缓冲模式的最大意义是避免下游慢速连接影响到并发能力较弱的后端服务器,而不是提升吞吐量或者降低延时。
Best regards,
-agentzh