暂无个人介绍
线上风控模型服务因活动流量增加出现超时,初步通过增加节点缓解,但仍有超时问题。分析发现,服务使用Python Flask和XGBoost,原启动方式(flask manager的run方法)不适合生产环境,应改用uwsgi。集成uwsgi后,线上出现概率值异常,所有用户得分相同。回滚线上环境,问题依旧存在,怀疑是uwsgi的多线程问题。通过日志追踪,发现在转换为xgboost矩阵时,特征值变为0,导致相同概率。
在优化代码时,将`MultipartFile`的`getInputStream()`调用改为使用try-with-resources,导致上传文件变为0KB。原因在于`getInputStream()`每次调用都会返回新的`InputStream`,且`FileUtils.getFileMD5String`的`read`操作消耗了流。`FileInputStream`的`read`方法会更新内部偏移量,所以在计算MD5后,流已指向文件末尾,导致上传时无数据。解决方案是使用两个独立的流分别用于计算MD5和上传文件。