PHP 高并发的时候 CURL 超时咋办

2018-03-27 13:12:13 +08:00
 solaro

求教。。最近项目做促销,是外卖系统 然后出现 502 错误, 因为外卖系统需要调用 qq 地图 定位获取坐标,然后再通过坐标反解析(服务端 CURL 请求 qq service )出附近地址

排查了业务方面的,没毛病,数据库该优化的都优化了,没有慢查询。 看了 nginx,有几个访问页面请求响应时间都超过 1 秒,有的高达 3 秒。(服务器是阿里云,ping 18ms )

最后确定了是由服务器端 CURL 请求导致的 php 卡了,那么问题来了: 1.qq 地图只有 20qps (准备换高德,这是后话),老报超限 2.curl 报了几次这个错误( local.ERROR: CURL:'Operation timed out after 5000 milliseconds with 0 out of -1 bytes received'),每次卡几秒,导致全站 502 了。。。

v 站大神多,求帮助

7276 次点击
所在节点    问与答
37 条回复
simapple
2018-03-27 13:13:26 +08:00
异步处理
ovear
2018-03-27 13:15:07 +08:00
缓存一下
explon
2018-03-27 13:17:10 +08:00
系统底层连接数改大
solaro
2018-03-27 13:21:36 +08:00
@simapple 外卖业务要实时。。。没法异步
solaro
2018-03-27 13:22:06 +08:00
@ovear 咋整????缓存一下。。。有缓存了。已定位的有缓存了,主要还是新用户涌进来
solaro
2018-03-27 13:22:18 +08:00
@explon 怎么改,求教
ovear
2018-03-27 13:27:00 +08:00
@solaro #5 如果是新用户的话,那就把这个定位接口分开来。
全站 502 的话,如果是 lnmp 就加大 phpcgi 的进程数,如果是 lamp,就开 apache 的进程数
外部 curl 降低超时时间,比如说外部 api 2 秒内没返回就快速重试,或者直接报错给客户端。
eslizn
2018-03-27 13:29:22 +08:00
异步 io,不是异步处理业务
des
2018-03-27 13:30:24 +08:00
定位放在前端做?
zhangfeiwudi
2018-03-27 13:31:41 +08:00
php 不好做异步 可以把这一个模块用 node 重写 或者 楼上说的 加大 php-fpm 的个数 或者加机器
iRiven
2018-03-27 13:34:22 +08:00
同楼上,异步处理。
widdy
2018-03-27 13:38:52 +08:00
难道不应该联系 QQ 地图,加钱么!
male110
2018-03-27 13:46:45 +08:00
XiaoxiaoPu
2018-03-27 13:51:04 +08:00
@solaro 在消费速度跟不上的情况下,队列会越来越长;不异步的话,等待队列就是 php-fpm 的 worker,是有限的,超出了就会 502,异步处理的话,各种异步框架接管了队列,不会有问题,就是代码逻辑变复杂了
rootx
2018-03-27 14:03:17 +08:00
走不同的 php 运行池 避免全站 502
collinswang
2018-03-27 14:52:59 +08:00
联系 QQ 地图,付费加大 QPS
kimmykuang
2018-03-27 14:57:18 +08:00
自己做 map,异步调用接口做地图
qinrui
2018-03-27 15:02:50 +08:00
获取 ip,解析地址,这些动作不都在客户端上么?为什么会在服务端超时?
qinrui
2018-03-27 15:03:32 +08:00
获取坐标,解析地址,不是都在客户端么?为什么服务端会超时?
tianakong
2018-03-27 16:08:39 +08:00
饿了么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/441761

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX