在单独的线程中服务WSGI应用程序端点



我有一个WSGI应用程序(它是一个Flask应用程序,但这应该是不相关的,我认为)运行在端口9077的Gunicorn服务器下。应用程序有一个/status端点,如果应用程序正在运行,它应该报告'OK'。如果它不能在合理的时间内报告OK,整个容器将被杀死(由Kubernetes)。

问题是这样的:当应用程序处于非常重的负载下(偶尔会发生),/status端点可能需要一段时间才能响应,并且容器有时会过早地被杀死。是否有一种方法来配置Gunicorn总是在一个单独的线程中服务/状态端点?也许是在不同的端口?对于处理这种情况,我将非常感谢任何提示或想法。

从未使用过Gunicorn,我不确定它是否支持此功能。

但是对于uWSGI,当我知道应用程序将处于高负载下时,
我运行uwsgi--processes(也可以运行在多线程模式或两者)

uWSGI只是启动flask应用的多个实例并充当负载均衡器,不需要不同的端口,uwsgi照顾一切。
你不再受GIL的约束,你的应用程序使用机器上所有可用的资源。

关于uWSGI并发的文档

关于如何设置flask应用、uWSGI和nginx的快速教程(你可以跳过nginx部分)

下面是我提供的配置文件的一个示例。

[uwsgi]
module = WSGI:app
master = true
processes = 16
die-on-term = true
socket = 0.0.0.0:8808
protocol = http

uwsgi --daemonize --ini my_uwsgi_conf.ini

当它以这种方式运行时,我可以很容易地达到1000次/秒。
希望对你有帮助。

ps:另一个解决方案,只是旋转更多的容器来运行你的应用程序。
并将它们放在nginx后面以实现负载平衡

相关内容

最新更新