网络内的反向代理和TCP优化

78次阅读
没有评论

问题描述

想要对网络内的TCP连接进行优化,并阅读了一些相关文章。在使用负载均衡器和反向代理的情况下,是否有必要调整网络内的TCP连接参数?用户认为在负载均衡器和服务器之间几乎没有延迟和丢包。用户想知道是否需要在负载均衡器上设置net.ipv4.tcp_window_scaling、net.ipv4.tcp_timestamps和net.ipv4.tcp_sack等参数。感谢!

解决方案

请注意以下操作注意版本差异及修改前做好备份。
调整您提到的参数肯定会产生影响,但是会降低性能。例如,net.ipv4.tcp_window_scaling是一个开关选项。同样,net.ipv4.tcp_sack也是开关选项。在Linux和所有负载均衡器上,默认值都是开启的。这两个参数在RFC1323中定义,旨在实现10/100以太网网络。禁用这些参数将导致性能急剧下降。

这些性能优势是因为“几乎”零延迟和零延迟之间存在巨大差异。使用滑动TCP窗口允许设备使用选择性确认(SACK)来同时确认接收到的数百个数据包。因此,如果网络的延迟为10毫秒,并且没有使用SACK,那么每个数据包都必须被确认,而这10毫秒的延迟会非常快速地累积 – 即使在理论最小延迟下。这意味着我发送数据包A,然后必须等待数据包A的响应,然后才能发送数据包B。但事实证明,我可以在等待数据包B的ACK时发送剩余的字母表和更多数据。SACK允许接收方发出信号,表示它已成功接收到直到数据包Z的数据。同时,发送方已经发送了数据包AA-ZZ。

这导致了所谓的“TCP窗口大小”,即客户端可以缓冲/处理的最大数据量。由于内存可能是一个问题,如果接收方只能存储和处理数据包A-F,如果我们发送数据包A-Z,一些数据将会丢失。因此,接收方需要向发送方发出信号,表示它们能够接收数据 – 即“我只能缓冲这么多数据”。这实际上取决于CPU的速度,即接收方有多快地清空其缓冲区并将数据传输到第7层。TCP窗口从空到满(最大窗口大小从0表示窗口完全使用到最大表示窗口完全可用)是一种识别网络吞吐量瓶颈的方式。

TCP窗口缩放提供了两个主要优点:
1. 在传输过程中减少未使用的时间 – 我们不需要等待ACK,成功地消除了传播延迟(延迟)。
2. 减少拥塞控制所需的时间,从而腾出更多的数据传输时间。拥塞控制消息会占用传输时间和带宽。即使使用TCP窗口缩放,仍然可能发生拥塞崩溃,其中整个TCP窗口可能需要重新传输并且可能需要进行拥塞控制。

最后,更新net.ipv4.tcp_timestamps的唯一真正原因是提供额外的安全性,因为它否则基于服务器的正常运行时间。除非您在负载均衡器后面使用类似于性能层4配置文件的东西,否则调整此设置几乎没有价值。我怀疑调整此设置会有太大的影响,但是它很可能只会降低性能,而不会提高性能。

最有可能有所帮助的是调整发送和接收缓冲区的大小,并使用巨型帧。这将允许您使用相同的开销处理更多的数据(与标准MTU 1500相比,处理减少了75%)。这些是实现10 Gbps连接所需的主要更改。否则,只需确保您有足够的CPU来从TCP堆栈接收数据,并且要注意您的流量模式(例如,避免类似于C10K问题的情况)。

结论
这里没有固定的答案。您问的是“是否值得做这些工作?” – 我不知道。它值得吗?业务风险的可接受水平是多少?如果出现问题并且出现瓶颈,对您的业务造成了什么样的损失?

最后,我认为您基本上是在问两个问题:1)所有这些设置都是做什么的,调整它们会有什么效果?2)是否有任何捷径可以走?

不幸的是,您没有提供足够的信息来回答这两个问题(这就是为什么您的上一个问题被关闭,这个问题也将被投票降级)。首先,我没有时间解释/了解/记住/谷歌/每个proc中的TCP设置的含义,其次(更重要的是)如果不了解您的服务架构,就无法确定它们的影响。您的系统可能还可以提高性能,但是内核TCP参数基本上已经调整到了可以安全进行的最佳配置。您正在进入可能是安全的领域,但前提是您了解架构和TCP/IP协议。并且您最好学习它。如果您想成为房间里最聪明的人,请学习TCP/IP。阅读《TCP/IP Illustrated》和/或《Internetworking with TCP/IP》,并将基础知识牢记于心。了解HTTP请求和SSL握手的工作原理。学会在wireshark中读取pcap文件,并根据这些协议讲述故事。无论您从事系统管理、网络还是编程(我在这三个领域都使用过这些知识),这些知识都会让您受益匪浅。简而言之,没有什么能代替了解您在做什么,这不是您可以从Stack Exchange上回答的问题。这就是为什么您要支付顾问费用 – 因为如果他们很好,他们就会了解这些细节。一旦您了解了1)您的架构和2)设置的实际作用及其影响,您将更好地判断是否可以采取任何捷径(即,我不需要调整此设置;它是无关紧要的。这种测试将是无用的,因为它无法模拟客户体验)。

以上是一个详细的解决方案,希望对您有所帮助。如果您有任何其他问题,请随时提问。

正文完