<返回更多

高性能的Web服务器Gunicorn 20.1配置Superset 1.4

2022-01-30    怀揣梦想的软件人生
加入收藏

什么是Gunicorn?Gunicorn(绿色独角兽)是一个用于UNIX的Python/ target=_blank class=infotextkey>Python WSGI HTTP服务器。这是从Ruby的Unicorn项目移植来的一个前fork工作器模型。Gunicorn服务器广泛兼容各种web框架,并具有实现简单,轻量级,高性能等特点。它用来解析HTTP请求的网关服务。它通常是在进行反向代理(如Nginx),或者进行负载均衡(如 AWS ELB)和一个web 应用(比如 Django 或者 Flask)之间。它的运行模型基于pre-fork worker 模型,即就是支持eventlet,也支持greenletGunicorn服务器作为wsgi App的容器,能够与各种 Web 框架兼容(flask,django 等,得益于gevent 等技术,使用Gunicorn能够在基本不改变wsgi app 代码的前提下,大幅度提高 wsgi app的性能。目前Gunicorn最新版本为20.1.0,官方文档地址:
https://docs.gunicorn.org/en/20.1.0/,如下图:

高性能的Web服务器Gunicorn 20.1配置Superset 1.4

Gunicorn 20.1.0官方文档

静态资源可以使用nigix,动态资源使用Gunicorn,结构如下图:

高性能的Web服务器Gunicorn 20.1配置Superset 1.4

nigix+Gunicorn结构

与uWSGI的性能比较,Gunicorn性能表现突出,如下图:

高性能的Web服务器Gunicorn 20.1配置Superset 1.4

与uWSGI的性能比较

Gunicorn特点:

1.本身支持WSGI、web2py、Django和Paster,能和大多数的Python Web框架兼容

2.自动辅助进程管理

3.简单的Python配置

4.允许配置多个工作环境

5.各种服务器的可扩展钩子

6.兼容Python 3。 x > = 3.5

7.简单易上手,轻量级的资源消耗

不过目前gunicorn只能运行在linux环境中,不支持windows平台。

Python自带的有个web服务器:wsgiref,Python是单进程的语言,当进程阻塞时,后续请求将排队处理,因此在生产环境不会使用单进程的Web服务器。Gunicorn的优势在于,它使用了pre-fork worker模式,也就意味着有一个中心管理进程(master process)用来管理worker进程集合。Master从不知道任何关于客户端的信息。所有的请求和响应处理都是由worker进程来处理的。Master(管理者)主程序是一个简单的循环,监听各种信号以及相应的响应进程。master 管理着正在运行的 worker 集合,通过监听各种信号比如TTIN,TTOU,and CHLD. TTIN and TTOU 响应的增加和减少worker的数目。CHLD信号表明一个子进程已经结束了,在这种情况下master会自动地重启失败的 worker。gunicorn在启动时,会在主进程中预先fork出指定数量的worker进程来处理请求,gunicorn依靠操作系统来提供负载均衡,推进的worker数量是(2*核数)+1,比如2核的CPU,则worker数量为2*2+1=5

注:master进程不是管理处理请求的,只负责管理worker进程,比如对worker进程的创建、销毁、以及根据负载情况增减。(启动时设置的–workers参数只是worker数,而gunicorn还会创建个master进程。所以,即使配置workers为1,你的app也至少有两个进程:master负责管理,worker负责处理请求)。

对于Gunicorn来说,gunicorn是WSGI的实现,但同时也自带web server,能直接对外提供web服务。包括大部分的web app框架,比如Flask和Django也都带有web server。但是,在生产环境中,一般它们都是各司其职的,Web框架Flask、Django只用于写app、Gunicorn只用于运行和管理Python web app,而在它们有专门的web server,比如Nginx

Gunicorn支持多种worker_class工作模式,默认使用sync,具体如下:

1.sync:同步的工作模式, 性能最差

2.eventlet: 协程的工作模式

3.gevent: 协程的工作模式

4.tornado:基于tornado

5.gthread: 多线程模式 利用线程池管理连接

6.gaiohttp:基于aiohttp

安装Gunicorn,前提需要安装好Python:

pip install gunicorn

执行:gunicorn -h,执行成功如下图:

高性能的Web服务器Gunicorn 20.1配置Superset 1.4

gunicorn执行成功

查看gunicorn的版本如下:

pip show gunicorn
高性能的Web服务器Gunicorn 20.1配置Superset 1.4

查看gunicorn的版本

如果想让Gunicorn支持异步workers的话,需要安装一下三个python包:

pip install greenlet
pip install eventlet
pip install gevent

Apache Superset是一个开源的、现代的、轻量级BI分析工具,能够对接多种数据源、拥有丰富的图标展示形式、支持自定义仪表盘,且拥有友好的用户界面,十分易用。具体可以参考我之前写的几篇关于Superset的文章:

1.《一个开源免费高颜值的轻量级商业智能BI平台Superset 介绍

2.《开源自助商业分析BI工具SuperSet 1.3.2快速入门(以CSV文件数据)

3.《开源轻量级BI平台Superset的SQL编辑器使用指南

4.《解决开源轻量级BI平台SuperSet连接SAP Hana数据库的方案

5.《开源轻量级BI平台的Superset的数据集使用指南

在开发或测试环境下,我们可以用Superset自带的运行命令:

superset run -h 0.0.0.0 -p 8089

采用此种方式会有一个提示,此方式为非生产环境的部署,如下图:

* Environment: production

WARNING: This is a development server. Do not use it in a production deployment.

Use a production WSGI server instead.

高性能的Web服务器Gunicorn 20.1配置Superset 1.4

Superset自带运行方式

Superset官方建议生产环境默认用gunicorn,gunicorn运行superset如下:

gunicorn -w 5 -k gevent --timeout 120 -b  0.0.0.0:8089 --limit-request-line 0 --limit-request-field_size 0 "superset.app:create_app()"  --log-level info --access-logfile logfile.log --log-file error.log --daemon 
高性能的Web服务器Gunicorn 20.1配置Superset 1.4

gunicorn运行superset

--workers:指定进程个数

--timeout:worker进程超时时间,超时会自动重启

--bind:绑定本机地址,即为Superset访问地址

--limit_request_line:http request line最大字节数。值范围0-8190, 0表示无限制


--limit_request_field_size:http request header字段最大字节数。0表示无限制

--worker_class:worker进程的工作方式。 有 sync, eventlet, gevent, tornado, gthread, 缺省值sync

--worker_connections:客户端最大同时连接数。只适用于eventlet, gevent工作方式

--daemon:后台运行,如果处于调试阶段建议不加

--error-logfile:输出日志

高性能的Web服务器Gunicorn 20.1配置Superset 1.4

运行superset成功


高性能的Web服务器Gunicorn 20.1配置Superset 1.4

登录superset成功

gunicorn详细配置可参考官网文档:
https://docs.gunicorn.org/en/20.1.0/settings.html,这里就不一一介绍了。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>