1、supervisor:监控服务进程的工具;
web服务跑起来之后,为了保证服务的稳定性,需要加一个收获进程。supervisor非常好用,配置也简单方便,它是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。
nginx一般不会莫名其妙被关闭,但gunicorn是一个进程,完成有有可能因为一些原因被关闭或者阻塞,为了保证gunicorn进程,需要使用看护进程插件。这里使用supervisor来解决这个问题。
supervisor专门用户linux端进程管理,
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
启动主程序的命令传递:supervisor->gunicorn->flask
看着步骤很多,其实除了Gunicorn都不是必须的
https://www.cnblogs.com/andy0816/p/15371152.html
2、为什么使用Gunicorn,简单点就是为了并发。利用异步,提高性能。
Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。
和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。
目前Gunicorn只能运行在Linux环境中,不支持windows平台
部署 Flask 应用时,为什么会需要 gunicorn 或 uWSGI?
简单说就是 Flask自带的wsgi性能低下
只适合你开发调试的时候用,
线上你必须用Gunicorn+Nginx才能获得更强的性能,和更高的安全性
下面我说一些废话:
django、flask 都有自带的http server,
仅仅是方便我们开发的时候调试代码而已
这些开源框架的维护者不可能投入大量精力来优化自带的wsgi服务器,
他们需要把更多的精力投入到框架自身的优化中,
因为服务器方面已经有Gunicorn/uWSGI、nginx等优秀的开源解决方案
假设我们用自带的来部署到线上,会有什么问题呢?
性能很差,差到不好意思出门见人(如果你的网站就几十个人访问,那性能应该问题不大)
https://jiajunhuang.com/articles/2017_04_08-gunicorn.md.html
一般来说,起一个gunicorn作为服务器足以,但是有时候我们可以在Gunicorn前面挡一个 Nginx,原因如下:
Nginx可以缓存住请求,然后内网再次发起请求,并且可以配置负载均衡,如果一台机器 的多进程(Gunicorn就是多进程)吃不消的情况下,负载均衡可以把请求打向多个机器
Nginx替代Python处理静态文件的请求,以提高性能
很多时候一个机器上可能不止一个服务,需要像Nginx这样的web服务器做一次proxy_pass
https://juejin.cn/post/7034301809032331300
Python sorted() 函数 reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)