Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
负载平衡PHP程序以支持不断增加的用户?_Php_Mysql_Load Balancing - Fatal编程技术网

负载平衡PHP程序以支持不断增加的用户?

负载平衡PHP程序以支持不断增加的用户?,php,mysql,load-balancing,Php,Mysql,Load Balancing,我有一个PHP程序,它是在考虑单个服务器的情况下编写的,因此它可以处理的量存在固有的限制。例如,开发人员说,他目前的网络托管服务为他提供了“50个MySQL连接”,他解释为只有50人可以同时登录 如果我们想扩大它的规模,使它能够处理500或更多的负载,我们需要做什么?我们如何将此程序调整为“负载平衡器”,而只需最少的更改 应用程序是用PHP编写的,并使用MySQL。MySQL连接只有在打开时才算作正在使用。例如,如果我连接到一个Web服务器来获取一个页面,那么实际创建该页面并将其发送给我只需要5

我有一个PHP程序,它是在考虑单个服务器的情况下编写的,因此它可以处理的量存在固有的限制。例如,开发人员说,他目前的网络托管服务为他提供了“50个MySQL连接”,他解释为只有50人可以同时登录

如果我们想扩大它的规模,使它能够处理500或更多的负载,我们需要做什么?我们如何将此程序调整为“负载平衡器”,而只需最少的更改


应用程序是用PHP编写的,并使用MySQL。

MySQL连接只有在打开时才算作正在使用。例如,如果我连接到一个Web服务器来获取一个页面,那么实际创建该页面并将其发送给我只需要50毫秒左右(猜测)。这意味着它可以在1秒内通过1个MySQL连接提供20个页面。用户在将页面发送到浏览器后对页面所做的操作不会影响服务器的性能

因此,50次点击时,你必须每秒获得大约1000次点击才能引起问题

如果出现问题,您可以提前关闭MySQL连接(而不是让它们在脚本关闭时终止)


老实说,我不认为这是你所认为的问题——如果你有足够的流量让它真正成为一个问题,那么这就是我们所说的“一个很好的问题”:)

无论主机设置了什么限制,只要可能,你都应该明智地限制你的查询。如果您使用共享主机,或者拥有10个机架,其中装满了完全由您支配的服务器,则会出现这种情况

呈现页面所需的查询越少:

  • 更快的数据库连接被关闭,从而允许RDBMS释放内存
  • 更快的连接资源被关闭,允许应用程序释放内存
  • 更快的HTTP服务器进程退出,允许它们释放内存
  • 用户获取所需信息的速度越快
一个典型的共享web主机(正如您所注意到的)会有一种单一服务器的心态。如果您想扩展,在同一台计算机上运行RDBMS作为web服务器几乎从来都不是一个好主意。为什么?两者都必须分配比实际需要或使用的内存更多的内存,以便能够处理请求并返回请求的数据。这对于任何支持类型关联的RDBMS来说尤其如此

另外,看看返回实际需要的查询需要多长时间。它们完成得越快,释放资源的速度就越快(以及上面列表中几乎所有的内容)

这意味着,你的应用程序连接到数据库的时间越短,你达到连接限制的可能性就越小。50个可以服务500个或更多用户。限制查询、优化查询或两者兼而有之

好好看看你的应用程序。在哪里可以为每次页面加载时都不可能更改的信息实现缓存?如何更好地利用会话?GroovyAjax接口是否对每个事件都进行查询

大多数人已经确定情况并非如此,因此类似这样的问题属于这一类。这确实是一个基本的设计概念

将其设计为可扩展并围绕这些约束进行工作,通常可以避免这些约束,直到时间和金钱允许解决它们为止

另外,附带说明的是,你控制一切的VPS几乎和一个典型的转售托管帐户一样便宜。为什么不建立自己的沙箱,按照自己的规则玩呢


至于,首先决定一个方案。然后决定如何最好地分配工作。在某些情况下,您可以从一个从机读取数据并向另一个从机写入数据,在其他情况下,您需要使用某种反向代理,无论是硬件还是软件。在这方面,你的问题过于笼统,无法提供更全面的答案。

我不同意“尽可能限制你的查询”的原则。这个数字应该是合理的,而不是不惜任何代价降低。它通常会产生奇怪的问题“如何在一次查询中获得完全不同的信息”。大多数情况下,查询的数量取决于适当的架构师,而不是性能。性能调优并不是减少查询数量。但是基于分析的查询/数据库优化是。@Col.shrapanel:只要有可能,我就说
敏感度
会进入任何确定
可能的过程。不过,为了清晰起见,我将进行编辑。它仍然不能解决负载平衡和真正的性能优化问题question@Col.弹片:你,我过于直率的笔友,也可以自由地扩展你的答案:)@Tim-谢谢Tim的解释性答案。你对我如何“压力测试”这个简单的应用程序有什么见解吗?看看它会破坏多少concurrnt用户?你能更具体地说明一下负载平衡器吗?我以为php重用了MySQL连接。。编辑:查了一下,显然有一个名为
mysql\u pconnect()
[,但它实际上可能会导致连接耗尽,因为Apache的性能不好。我想说的是,您应该总是尽早关闭任何连接,而不仅仅是在出现性能问题时。