使用多个服务器为网站提供服务的速度有哪些缺点?

我知道这些问题很难回答:)但是我想知道将服务分离到不同服务器的影响。

具体来说,我设立了一个网站,将有一个媒体服务器(Apache服务静态文件),一个应用程序服务器(Apache处理PHP文件),主数据库服务器和从数据库服务器。

我打算在媒体和应用程序服务器上运行memcached作为共享池,但是想知道是否这样做是昂贵的(在时间和资源方面)? 很显然,每次调用memcached(从应用服务器)时,都必须与媒体服务器build立tcp连接,找出结果的位置,然后返回。

对于这样的小型网站设置,是否应该在应用程序服务器上激活内存而不是跨服务器池memcached? 还是差别那么小,不值得担心?

尽pipe我使用memcached作为例子,但我宁愿如果答案保持相当通用,因为相同的场景可以应用于其他服务(如db)。

如果它是一个小网站,我认为这个优化水平是矫枉过正的。

但有一个方法可以肯定地find: testing它

过去我们用WCAT来回答这个问题。 这是一个很好的工具,可以查看网站在各种负载下的运行情况。 JMeter是这样的另一个伟大的工具。

例如,使用WCAT,我们最终决定让单独的Hyper-V服务器将我们的数据库虚拟机与我们的Web应用程序虚拟机(本例中为Fogbugz)分开。 testing表明,即使并发用户数量较less,将数据库虚拟机与应用程序虚拟机放在同一台计算机上,也会使应用程序无法使用(CPU是瓶颈)。

需要回答几个问题才能更好地回答你的问题。

  • 这是一个单一的网站?
  • 它是使用密集资源(沉重的服务器端编程,stream媒体video等)?
  • 你只是使用video,数据库和PHP / .net?
  • 服务器有多好?
  • 硬盘的速度是什么,他们在RAIDconfiguration?
  • 多less个处理器?
  • 多less内存?
  • 你正在运行100MB或1000GB的NIC和交换机?
  • 你的上游速度是多less?
  • 你的操作系统是否简化和优化?

没有足够的信息给出任何可能性的答案,实际上运行一些testing/基准将是唯一的方法来确定你得到正确的答案。

我从你所描述的最好的猜测是,池会增加个别请求的延迟,但增加你在陷入困境之前可以处理的总负载。

但是当我说我怀疑它可能会增加单个请求的延迟时,我的意思是介于几分之一毫秒到几十毫秒之间,这取决于您的networking设置。 如果您的网站足够忙碌,那么通过减less两倍的caching数据库调用的速度优势将大大超过这一点。 如果媒体服务器和应用程序服务器的硬件大致相同,则应用程序服务器很可能会占用大量的CPU,而媒体服务器的CPU将会相当闲置,这意味着使用memcached时实际上可能获得最佳性能媒体服务器而不是应用程序服务器。

确定优化的唯一方法就是testing。 testing,基准,configuration文件等没有testing,你永远不会知道你是否使性能更好,或使其变得更糟。 运行端到端的testing(换句话说,模拟的Web客户端使得真正的Web客户端的所有文件请求会)与真实的用户组合(所以你得到正确的caching命中和未命中混合)负载和“我们只是slashdotted”负载。 自动化您的testing,以便轻松重复。 在两台/所有服务器上testingmemcached,仅在一台服务器上,只在另一台服务器上,在一台服务器上比另一台服务器上的RAM多,等等…