我有一个客户发送批量短信的网站,因此我将短信请求转发给聚合器,他通过印度的移动运营商发送消息。
现在,我面临的问题是。一旦发送了SMS,为了获得实时传送报告,我需要使用PHP中的脚本从聚合器接收参数。所以我做了一个脚本,例如example.com/dlr.php,脚本包含
<?php
include('config.php');
$uid = sanitize($_GET['uniqueid']);
$status = sanitize($_GET['status']);
$cause = sanitize($_GET['cause']);
if($uid != "" || $status != "" || $cause != "" ){
$sql = "INSERT INTO `table` .....";
//execute code...
}
因此,使用它,我将数据存储在我的数据库中并按间隔更新记录。
当聚合器同时向我的网址example.com/dlr.php?uniqueid=1234332423&status=success&cause=delivered&time=12312432423
发送请求时,我的专用服务器崩溃,因此当我的客户发送100,000条消息时,所述网址会一次多次,有时数千次数字和所有100,000号码传送报告将转发到我的脚本。
可能是由于这个原因,我的服务器崩溃并无法访问。
处理此脚本的并发连接并将值存储到MySQL数据库的最佳方法是什么?
感谢您的帮助,谢谢
答案 0 :(得分:0)
问题可能出在您的数据库上,而不是脚本本身。我将检查您允许的最大连接数量...默认情况下,此数量设置为100
。您可以拥有的最大连接数为4,294,967,295
检查此链接以获取有关如何更改它的信息:MySQL Connection Limit
此外,您可以在崩溃之前,之中和之后发布一些服务器日志吗?这样我们可以更好地了解发生了什么以及为什么...
更好的方法是交错导入数据。即每隔X分钟将收据写入临时文本文件-然后使用cron作业;读取临时文本文件,并将第一批数据导入数据库。
答案 1 :(得分:0)
这主要是评论(但有点长)。
您需要在这里保持期望。您对问题的描述和分析都是错误的。
您将不会在这里得到有效的答案,因为需要收集大量信息来确定问题的实质和解决方法。您应该首先收集有关内存,CPU,负载,并发连接,Web服务器进程数,查询响应时间...的适当指标,而这仅仅是容量管理的开始。您甚至都不认为运行此操作系统与您的问题有关!
但是服务器崩溃应该与容量没有任何关系-过多的需求不应导致服务器崩溃。这意味着可能还会发生很多其他事情。并找出它们是什么,您需要阅读日志。如果“崩溃”与高需求相吻合,那么要检查的事情就排在前列,那就是磁盘控制器不稳定或配置错误的Web服务器+内存过量使用+ oomkiller。这两种情况都会在您的日志中留下大量证据。
您还需要进一步了解当系统从其正常状态变为您描述为“崩溃”的状态时所发生的情况-要么对此进行解释,要么对其进行更好的解释。
这里最快的解决方法是更努力地购买更多服务器,如果不能解决,那么聘请专家可能会比获得解决此问题所需的技能便宜。
(如果这确实是专用硬件,那么即使是最便宜的x86盒,也能够每秒处理500个并发连接和1000笔事务)。