我有一个PHP程序,编写时要记住一台服务器,因此它可以处理的数量存在固有的局限性。例如,开发人员说他当前的虚拟主机服务为他提供了“50个MySQL连接”,他解释说只有50个人可以同时登录它。
如果我们想要扩展它以便它可以处理500或更多的负载,我们需要做什么?我们如何才能使这个程序适应“负载平衡器”而只需要很小的改变?
应用程序在PHP中编写并使用MySQL。
答案 0 :(得分:4)
无论主机设置何种限制,您都应明智地限制您的查询。如果您使用的是共享主机,或者拥有10个完全由您服务的机架,那就可以了。
呈现页面所需的查询越少:
典型的共享Web主机(如您所述)将具有单一服务器心态。如果要扩展,在与Web服务器相同的计算机上运行RDBMS几乎不是一个好主意。为什么?两者都必须分配比实际需要或使用更多的内存,以便能够处理请求并返回所请求的数据。对于任何支持类型亲和力的RDBMS尤其如此。
另外,请查看您实际需要的查询需要多长时间才能返回。它们完成得越快,释放的资源就越快(以及上面列表中的其他所有内容)。
这意味着,您的应用花在连接数据库上的时间越少,您获得连接限制的可能性就越小。 50可以服务500或更多用户。是限制查询,优化它们或两者兼而有之。
好好看看你的应用。在哪里可以实现缓存,以获取每次页面加载时不太可能发生变化的信息?如何更好地利用会话?这个groovy ajax接口是否为每个事件进行查询?
大多数人已经确定情况并非如此,因此这类问题将属于micro optimization类别。它真的是一个基本的设计理念。
设计它以扩展并解决这些约束,通常可以避免约束,直到时间和金钱允许解决它们。
另外,旁注,你控制一切的VPS几乎和典型的转售者托管账户一样便宜。为什么不建立自己的沙箱并按照自己的规则玩呢?
至于load balancing,首先要确定replication计划。然后,您决定如何最好地分配工作。在某些情况下,您可以从一个从站读取并写入另一个从站,在其他情况下,您需要使用某种逆向代理,无论是硬件还是软件。你的问题有点过于笼统,无法在这方面提供更全面的答案。
答案 1 :(得分:0)
MySQL连接仅在打开时计为使用状态。例如,如果我连接到网络服务器以获取页面,它只需要50ms左右(猜测)来实际创建页面并将其发送给我。这意味着它可以在1秒内通过1个MySQL连接提供20页。用户在发送到浏览器后对页面执行的操作不会影响服务器的性能。
因此,对于50,你必须每秒获得大约1000次点击才能引发问题。
如果它确实成为一个问题,你可以提前关闭MySQL连接(而不是让它们在脚本执行时终止)。
说实话,我认为这不是你认为的问题 - 如果你有足够的流量让它真正成为一个问题那么这就是我们所说的'一个很好的问题':)