为什么环回的延迟比鲤鱼接口的延迟少?


8

Stack Overflow Careers的服务类似于:

user -> internet -> our fw -> nginx -> haproxy -> web farm
  • FreeBSD是正在使用的操作系统
  • 此框上没有防火墙或QoS
  • nginx处理我们的SSL终止
  • haproxy处理负载平衡
  • nginx / haproxy正在以每种方式推动约15 Mbps

在正常操作期间,nginx接收HTTP请求,执行其操作,然后将请求移交给绑定到同一框上的回送地址(127.0.0.1)的haproxy实例。

为了在前几天进行一些故障排除,我将haproxy实例移到了运行nginx的同一接口上。这立即为所有请求增加了100ms的延迟。该接口不是真正的物理接口,而是鲤鱼接口

谁能向我解释为什么会这样?与数据包队列竞争?还是因为“软”回环总是更快?我在这里缺少一些基本知识,希望有人能对我进行教育。


1
不管是通过lo还是e {th,n}端口发送到收件箱地址的数据包,都不会碰到Linux中的硬件。不过,关于BSD,我不能说权威。
BMDan 2010年

确定要切换到相同的界面吗?将haproxy切换回环回时100ms消失了吗?
tomjedrz

@tomjedrz-是的。我一改回去,等待时间就消失了。
Michael Gorsuch

Answers:


2

恒定的100ms延迟看起来很奇怪。看起来数据包被缓冲并且没有立即传送。也许其中一些被丢弃并重新传输。您可以在此界面上运行tcpdump来显示问题吗?我不知道IP堆栈如何在FreeBSD上工作,也不知道CARP是如何实现的,但是例如从站是否有可能通过免费ARP定期发布其MAC地址,而主站又可以向每侧发送数据包呢?

您还可以在真实接口上运行tcpdump以确保没有发出任何东西吗?

系统是否有可能避免缓存CARP设备的ARP条目,从而导致针对会话的每个数据包发出CARP守护程序必须回答的ARP请求?

其中大多数是一些愚蠢的想法,但这是为了帮助您朝正确的方向搜索。


谢谢你的想法,威利。我在下班时间将配置移回接口,然后查看数据包跟踪结果。
Michael Gorsuch

1

为了清楚起见,您只更改了从127地址到本地IP的访问方式。正确?

如果是这样,并且有所作为,那是不对的。检查您的路由表,netstat -rn并查看将本地IP路由到什么,应该将其路由到lo0接口(就像127)。

您的netstat -rn输出应该与此大致相似:

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            1.2.3.1            UGS       131  2655014   nge1
1.2.3.0/23         link#2             U           0       88   nge1
1.2.3.4            link#2             UHS         0    34848    lo0
127.0.0.1          link#5             UH          0    64678    lo0
192.168.0.0/26     link#1             U           2 41703537   nge0
192.168.0.1        link#1             UHS         0    70088    lo0

我应该在帖子中包括这些:这些接口是carp接口。直到我运行netstat时,我的心才完全滑落。这有什么区别吗?
Michael Gorsuch

是的,就在那里。如果将您使用的地址分配给了鲤鱼接口,则该IP将在撞回环设备之前将其强制通过鲤鱼堆栈;但是100ms仍然太长了。所讨论的主机是该IP的主机,还是您正在使用负载平衡?它可能会将流量发送到其他鲤鱼宿主。
克里斯·S

主机是该IP的主机。
Michael Gorsuch

我刚刚完成了一个类似的环境并进行了测试。我看到鲤鱼接口IP,127 IP和物理IP之间的响应时间没有明显的差异。我只在这里测试一台服务器,因此没有鲤鱼奴隶,但是我怀疑您的环境中其他地方(防火墙或流量整形)有问题,这会导致延迟。这是i386-8.1-STABLE。
克里斯·S

谢谢,克里斯。我将看看交通中断时是否可以收集更多信息。当前系统未使用任何防火墙程序包或未进行任何流量调整。我还要注意(将更新原始问题),由于我们在SO系列网站上展示的招聘广告,我们收到了大量的访问量。正常情况下,我们将以每路15 Mbps的速度移动。
Michael Gorsuch

0

我已经看到将环回实现为中断级软件i / f,以使流量永远不会超出限制。运行环回时是否可能是这种情况?免责声明:只是一个普遍的问题;我对FreeBSD一无所知。

-皮特


这不是它在FreeBSD中的工作方式。
克里斯S 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.