扫码关注官方订阅号
几乎同时对某个网址发送1万个含有sql命令的request,让php update1万条数据,php会挂掉吗?还是会一条一条处理?
需要使用队列吗?有多大的意义去使用?
光阴似箭催人老,日月如移越少年。
并发嘛
首先 1W个请求,并不会产生1W个fpm,具体你可以看下fpm的配置,有最大进程数限制的。后面的请求就被舍弃了,报错502,应该很常见吧?
就算你有资源容纳1W个进程处理,其实PHP运行速度还是挺快的,就是每次初始化耗时而已,逻辑处理很快就结束了,链接mysql吧,mysql能同时容纳1W个链接吗?报错吧,sql错误。
PHP和mysql都支持了,那就没话说了,肯定不会瘫。
按照你的服务器资源(1台),建议还是队列,最好还是单例模式,这样不会太影响其他业务。
如果用队列还可以优化啊,1W次请求的数据都拿出来合并,一次性全部更新完不可以?合并成几次(小于1W)不可以?
PHP哪有那么容易挂掉,在我的笔记本Ubuntu(i5-3230M)上用PHP内置的单进程HTTP服务器insert/select读写Linux内存文件系统上的SQLite,每秒处理请求数(RPS)都能达到2660,1万个这样的请求不到4秒就能处理完.下面就是测试代码,功能是用内存级SQLie实现一个队列.
<?php $file = '/dev/shm/app/data.db3'; //保存在Linux内存文件系统上的SQLite $ddl = " BEGIN; CREATE TABLE IF NOT EXISTS queue ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER ); COMMIT; "; if(!file_exists($file)) { $db = new PDO('sqlite:'.$file); $db->exec($ddl); } else { $db = new PDO('sqlite:'.$file); } $user_id = time(); //time()换成你的用户ID,真实环境user_id字段需要加入UNIQUE唯一约束. $stmt = $db->prepare('INSERT INTO queue(user_id) VALUES(?)'); $stmt->execute(array($user_id)); echo 'rowCount:'.$stmt->rowCount()."\n"; //查询中受影响(改动)的行数,插入失败时为0 echo 'lastInsertId:'.$db->lastInsertId()."\n"; //插入的自增ID,插入失败时为0 $stmt = $db->query('SELECT * FROM queue WHERE id = '.$db->lastInsertId()); var_export($stmt->fetchAll(PDO::FETCH_ASSOC)); // PHP内置的单进程HTTP服务器 // php -S 127.0.0.1:8080 -t /home/eechen/www >/dev/null 2>&1 & // ab并发100测试5000个请求 // ab -c100 -n5000 http://127.0.0.1:8080/
树莓派(BCM2709)上RPS为185,如果SQLite不在内存上而在SD卡上RPS会降到30.
有几台服务器
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
并发嘛
首先 1W个请求,并不会产生1W个fpm,具体你可以看下fpm的配置,有最大进程数限制的。后面的请求就被舍弃了,报错502,应该很常见吧?
就算你有资源容纳1W个进程处理,其实PHP运行速度还是挺快的,就是每次初始化耗时而已,逻辑处理很快就结束了,链接mysql吧,mysql能同时容纳1W个链接吗?报错吧,sql错误。
PHP和mysql都支持了,那就没话说了,肯定不会瘫。
按照你的服务器资源(1台),建议还是队列,最好还是单例模式,这样不会太影响其他业务。
如果用队列还可以优化啊,1W次请求的数据都拿出来合并,一次性全部更新完不可以?合并成几次(小于1W)不可以?
PHP哪有那么容易挂掉,在我的笔记本Ubuntu(i5-3230M)上用PHP内置的单进程HTTP服务器insert/select读写Linux内存文件系统上的SQLite,每秒处理请求数(RPS)都能达到2660,1万个这样的请求不到4秒就能处理完.下面就是测试代码,功能是用内存级SQLie实现一个队列.
树莓派(BCM2709)上RPS为185,如果SQLite不在内存上而在SD卡上RPS会降到30.
有几台服务器