httpd web服务器服务内容不同的客户端下载速度?

对于我们的游戏,我们将它的静态资产托pipe在一个只安装了httpd的虚拟机上(当然还有一些本地linux的东西),以便为web内容提供服务。 configuration的MPM是MaxClients为6400,ServerLimit 100和ThreadsPerChild 64的工作者。内存为4 GB。 通过以上configuration,所提供的静态内容总大小约为20 MB,并在我国(保加利亚)以及其他国家/地区提供服务。 经过检查和确认,国内和国际的带宽速度没有差别。 然而,在高峰时刻,当带宽超出时,我们开始接受来自远程用户(即来自俄罗斯)的大量投诉,游戏被完全下载2-3分钟。 任何时候,我们检查从这里加载禁用caching的游戏,每次我们试图从任何一台计算机,大约需要10秒。 我们从原始虚拟机镜像(相同的configuration和内容)中添加了2个虚拟机,并且做了最快速的负载平衡 – DNS轮询到总共三个IP。 投诉缩减,但俄罗斯用户的加载时间保持在1分钟以上。 当我们再次尝试多次从这里下载游戏时,仍然是10秒,对我们来说没有什么不同。 静态内容服务器具有相同的国内和国际对等的可能原因是什么?当负载较低时,所有的俄罗斯用户都可以下载10秒,但不能在高峰时间下载? 所有的用户不应该一样吗?

PS在任何时候,静态服务器都有足够的内存,并且产生的httpd进程永远不会超过50,设置限制为100

编辑:简短的问题总结 – 在低负载,所有客户端(本地和远程)下载客户端的时间相等(例如15秒)。 当负载较高时,本地客户端再次加载15秒,而远端则加载2-3分钟。 有什么可能的原因?

根据澄清,这只是当带宽最大的时候 ,这可能听起来像一个完全正常的行为,那么 – 当你最大的可用带宽(线速率),你可能会开始丢失数据包,并有TCP窗口长期客户从未放大到最佳速度; 带宽延迟产品增长,在相同的pipe道上下载同一文件的时间增加; 如果要在超载期间为每个人提供更平均的stream量 ,则必须进行stream量整形 (换句话说, 数据包排队和优先级sorting )。 – 10月6日4:56

答案取决于很多事情。 你不能说你的国际速度是不变的。 远程用户总是会有较低的性能,这取决于你和他们之间的networking,以及它的负载有多重。

顺便说一句,你确实说你的带宽已经超出了。 您的服务器networking连接的带宽? 那么你真的需要一个CDN或caching逆向代理。

我可以提供一些快速的改进:

  • 使用Nginx; 它可以更有效地提供静态内容。
  • 使用像Cloudflare这样的CDN,或者如果这太精细了,你可以在俄罗斯租一个虚拟机,并安装一个caching逆向代理,让你的DNS地理知识,让俄罗斯用户在那里redirect。 Cloudflare实际上可能会更容易:)

你不能说,对于国内和国际的交通来说,对等是一样的。

它在过去几年可能已经发生了变化,但传统上在俄罗斯,大多数提供商从来没有为任何本地对等付费,直接从MSK-IX获得,其余的stream量由过境提供商处理。

各个方向的链接几乎总是有不同的容量,而且每隔一段时间,某些链接就会一直保持饱和(要么是因为意外的stream量高峰,要么是因为有人懒得更新链接,或者为更多的stream量付出更多的钱) ,这在高峰时段可能更常发生。

通常,在对等或中转点处,提供商支付固定的速率,无限制的100Mbps,1Gbps或10Gbps。 当stream量超过了已经支付的价格时会发生什么? 一些数据包被丢弃,一些数据包被放慢,一般只发生在高峰时段,有时只发生在一个方向上(但是即使发生在一个方向上,两者的stream量仍然减慢,因为延迟增加了,一些ACK拥塞控制包也会丢失)。

我会解决这个问题,向遇到问题的俄罗斯的一个主机,以及俄罗斯的一个主机在保加利亚的服务器上运行mtr 。 我发现最有用的做法是将每个实例运行30秒到15分钟(mtr将统计整个运行期间的统计数据),然后在上次运行完成后再运行5到15分钟。 通过这种方式,您将能够在问题发生的哪个时间段内确切地看到。

否则,这也可能是Apache的一个问题,也许与俄罗斯主机的延迟时间有关–nginx通常比Apache更有效地提供各种内容,所以,也许是尝试使用nginx的好机会?

虽然光速是恒定的,数据以相同的速度通过长距离的光缆传输,但离光源越远,就越需要经历更多的“跳跃”。

如果你运行一个traceroute到100英里以外的服务器,然后比较这个traceroute到一个位于全球一半的服务器,那么全球的一半可能会经过更多的跳跃。

延迟是数据在到达目的地之前通过每个路由器(跳跃)所花费的时间量,延迟是这里的问题。