在实际应用中为了掌握多个系统的服务状态,灵活管理对于后端的请求,加入了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产生。