做团队技术分享之前写了稿子, 防止自己脑子一片空白不知道讲什么. 干脆放到自己这里吧.
Gunicorn是一个遵循WSGI协议的HTTP SERVER,WSGI应该都比较熟悉,简单略过一下,一般我们都不会把项目的接口直接暴露在互联网中,前面都会加一个web服务器,比如nginx,但是不是所有的服务器和项目框架都能完美的搭配使用,这就需要WSGI协议的存在,web服务器和应用框架双方只需要提供一个WSGI的接口,就可以各自发挥自己的专长了。在Python中应用比较广泛的两种HTTP服务器就是Gunicorn和uWSGI。
Gunicorn在从RUBY的unicorn移植过来的,属于轻量级,高性能的Http server。
Gunicorn的服务器模型是pre-fork, pre-fork就是在还没有收到请求的时候,提前开启设定的进程数,等待并处理接到的请求,比起来fork模式,一定程度上减少了响应的延迟,但是如果请求很多的话,进程不够用还是会启动新的进程,响应变慢。pre-fork模型,就意味着有一个master的进程,来控制其他的worker。
他们的工作模式大概是下面这张图。从别的博主搬来的.
其实这个master进程就是一个循环,不断监听不同的进程发来的信号,并作出响应的动作。
master根据侦听来的信号来控制要增加进程或者减少进程数,master是不处理外部的http请求的,只用来控制其他worker。
这个Worker有几种不同的工作模式:
一