我知道这些问题很难回答:)但是我想知道将服务分离到不同服务器的影响。
具体来说,我设立了一个网站,将有一个媒体服务器(Apache服务静态文件),一个应用程序服务器(Apache处理PHP文件),主数据库服务器和从数据库服务器。
我打算在媒体和应用程序服务器上运行memcached作为共享池,但是想知道是否这样做是昂贵的(在时间和资源方面)? 很显然,每次调用memcached(从应用服务器)时,都必须与媒体服务器build立tcp连接,找出结果的位置,然后返回。
对于这样的小型网站设置,是否应该在应用程序服务器上激活内存而不是跨服务器池memcached? 还是差别那么小,不值得担心?
尽pipe我使用memcached作为例子,但我宁愿如果答案保持相当通用,因为相同的场景可以应用于其他服务(如db)。
如果它是一个小网站,我认为这个优化水平是矫枉过正的。
但有一个方法可以肯定地find: testing它 。
过去我们用WCAT来回答这个问题。 这是一个很好的工具,可以查看网站在各种负载下的运行情况。 JMeter是这样的另一个伟大的工具。
例如,使用WCAT,我们最终决定让单独的Hyper-V服务器将我们的数据库虚拟机与我们的Web应用程序虚拟机(本例中为Fogbugz)分开。 testing表明,即使并发用户数量较less,将数据库虚拟机与应用程序虚拟机放在同一台计算机上,也会使应用程序无法使用(CPU是瓶颈)。
需要回答几个问题才能更好地回答你的问题。
没有足够的信息给出任何可能性的答案,实际上运行一些testing/基准将是唯一的方法来确定你得到正确的答案。
我从你所描述的最好的猜测是,池会增加个别请求的延迟,但增加你在陷入困境之前可以处理的总负载。
但是当我说我怀疑它可能会增加单个请求的延迟时,我的意思是介于几分之一毫秒到几十毫秒之间,这取决于您的networking设置。 如果您的网站足够忙碌,那么通过减less两倍的caching数据库调用的速度优势将大大超过这一点。 如果媒体服务器和应用程序服务器的硬件大致相同,则应用程序服务器很可能会占用大量的CPU,而媒体服务器的CPU将会相当闲置,这意味着使用memcached时实际上可能获得最佳性能媒体服务器而不是应用程序服务器。
确定优化的唯一方法就是testing。 testing,基准,configuration文件等没有testing,你永远不会知道你是否使性能更好,或使其变得更糟。 运行端到端的testing(换句话说,模拟的Web客户端使得真正的Web客户端的所有文件请求会)与真实的用户组合(所以你得到正确的caching命中和未命中混合)负载和“我们只是slashdotted”负载。 自动化您的testing,以便轻松重复。 在两台/所有服务器上testingmemcached,仅在一台服务器上,只在另一台服务器上,在一台服务器上比另一台服务器上的RAM多,等等…