多Flask微服务前置使用Gunicorn:是否需为每个服务单独部署Gunicorn实例?
回答
要不要为每个Flask应用单独部署Gunicorn,完全取决于你那些被主应用调用的Flask应用的实际形态:
情况1:被调用的Flask应用是独立对外提供服务的实例
如果主应用是通过HTTP请求调用其他Flask应用的接口,那你必须给每个独立的Flask应用都单独部署Gunicorn实例。
- 每个Gunicorn实例可以独立配置worker数量、进程参数,适配各自的接口并发量级
- 如果不用Gunicorn,直接用Flask自带的
werkzeug开发服务器运行,默认只能处理单线程请求,完全满足不了高并发场景的要求
情况2:被调用的Flask应用是代码层面拆分的内部模块
如果你说的“其他Flask应用”只是项目内按功能拆分的蓝图(Blueprint)或者独立模块,只会被主应用直接import调用、不会单独对外提供接口,那完全不需要单独部署Gunicorn。
- 所有业务逻辑都会在主应用的Gunicorn worker进程内运行,只要给主应用的Gunicorn配置足够的worker数即可处理并发请求
实用部署建议
- Gunicorn的worker数常规配置规则为
2 * CPU核心数 + 1,可以在这个基础上根据实际压测结果调整,避免worker开太多导致内存占用过高 - 如果是多服务部署的场景,可以给每个Gunicorn实例配置不同的监听端口,前面加Nginx做反向代理,统一入口的同时还能处理静态资源、SSL证书、负载均衡等需求
- 不要直接将Gunicorn暴露在公网,前置Nginx可以大幅提升服务的整体稳定性
内容的提问来源于stack exchange,提问作者M.Erkin
相关产品推荐
相关产品推荐

