前段时间接手了一个老系统,其中对于“订单”的处理是通过一个 PHP 脚本来完成的。
这里说的“订单”,不一定是传统的订单概念,因为业务场景相对特殊,上面脚本的作用就是用来处理大量数据库 IO 操作。
<?php
function doSomething(){
// 查询数据库是否有需要处理的"订单"
if ($exists) {
// todo
}
}
while (true) {
doSomething();
}
起初上线时并没有什么问题,但随着用户逐渐增多,最近暴露出了很多问题。
- 首先上面那个脚本的处理方式是同步阻塞
- “旧订单”还没处理完,“新订单”又进来了,“订单”处理不及时从而引发一系列业务问题
- 类似处理还有其他几个脚本。导致数据库压力较大(数据库没做读写分离,单机部署)。
请问:
- 这个场景有什么好的处理方式吗?
- Swoole 的协程是否适用于该场景?
(老系统历史包袱较重,不适宜对项目整体进行大改动)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…