背景: 生产的数据导入平台,突然被连续几个月被投诉,导入平台上传的性能很差,超过5M就不能上传成功。
拿到该问题的时候,进行代码查看和分析:
代码就是只有一句 AddAttachment(&sUrl, &sSysFileName, &sFileExtension, &sUserFileName, 0) = %Attachment_Success
url不是ftp,而是用record:// recordName;
刚开始以为是数据库的表空间的问题,于是乎,我直接另外一个新建一个表,进行验证,发现测试环境依旧没有问题,生产环境问题并没有解决,但是发现一点,我上传的文件其实是已经保存到表中,说明至少表空间没有问题。
无奈之下,我新建了一个ftp文件服务器,把代码中url,全部换成ftp的url,发现测试环境和生产环境并没有什么差别,性能依旧很差,依旧一直转圈。
这个时候,我关注到了PS的架构图上,我们的具体架构如下,我们的架构使用了Nginx反向代理进行分发请求,但是上传文件的话,一共是两个POST的请求,其中第一个POST已经成功,第二请求在运行一段时间后就直接报错584,那么应该就是Nginx的请求超时导致。
既然大概猜到了问题了,那么就是解决问题了,直接在生产的克隆环境中复现,然后1. 修改Nginx的缓存大小 改成跟上传文件限制大小一样 200m,2,修改Nginx的超时时长。3. 修改应许的最大文件字节。
-----终于问题解决: 开发不容易,PS更不容易,可以参考资料太少。