在实际应用中为了掌握多个系统的服务状态,灵活管理对于后端的请求,加入了Traefik作为网关,最初的应用为微信公众号的消费接收和处理,访问量比较小,每天4w多次,发现引入网后有个别情况会出现500和502。随后用JMeter对不经过网关和经过网关进行了对比。确认Traefik有此问题。

另外在测试过程中后端服务是Django写的使用的uWsgi服务,默认不支持KeepAlive,JMeter默认开启的KeepAlive,会产生大量502,JMeter关闭KeepAlive后测试无错误。

刚好在网上发现了一篇有关这方面的文章:

https://blog.csdn.net/weichuangxxb/article/details/107131619

整体调试过程跟网上文章稍有不一样,因为我的uWSGI和Django版本不一样

调整uWSGI配置

尝试找为uWSGI添加http-keepalive选项,很可惜我的uWSGI版本是2.0的不支持这个开关。

#!/bin/sh
export PYTHONIOENCODING=UTF-8
env python /var/www/app/manage.py migrate

uwsgi --http-socket :80 \
  --chdir /var/www/app/ --plugin python3 --wsgi-file cayywechat/wsgi.py \
  --static-map=/static=static \
  --processes 2 --threads 2 \
  --python-path /usr/local/lib/python3.7/site-packages

因为KeepAlive是HTTP1.1协议中支持的,随后将先将--http-socket修改为--http11-socket,修改完后直接对uWSGI进行测试,测试正常,无502。

从前端网关再次测试也无502产生。

[ 编辑 | 历史 ]
最近由“jilili”在“2021-11-05 04:45:09”修改