Gunicorn+Supervisor部署高性能高稳定的算法服务

gunicorn

gunicorn简介

Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有部署使用非常简单,轻量级的资源消耗,以及高性能等特点。

gunicorn安装

1.Debian/Ubuntu可通过apt安装

apt-get install gunicorn

2.Centos可通过yum安装

yum install gunicorn

3.pip安装

pip install gunicorn

gunicorn使用

以下面的示例文件为例,简述使用方法。

# filename:test.py
def app(environ, start_response):
  """Simplest possible application object"""
  data = 'Hello, World!\n'
  status = '200 OK'
  response_headers = [
    ('Content-type','text/plain'),
    ('Content-Length', str(len(data)))
  ]
  start_response(status, response_headers)
  return iter([data])

可以直接用命令运行,

gunicorn --workers=2 test:app

常见[OPTIONS]参数,

  • -c CONFIG, --config=CONFIG: 指定配置文件(配置文件必须是py文件)

  • -b BIND, --bind=BIND: 与指定socket进行绑定

  • -D, --daemon: 以守护进程形式来运行Gunicorn进程,其实就是将这个服务放到后台去运行。

    如果希望supervisor来监控,daemon必须为false

  • -w WORKERS, --workers=WORKERS: 工作进程的数量。上边提到gunicorn是一个pre-fork worker模式,就是指gunicorn启动的时候,在主进程中会预先fork出指定数量的worker进程在处理请求时,gunicorn依靠操作系统来提供负载均衡,通常推荐的worker数量是:(2 x $num_cores) + 1。

    起多少个进程需要根据服务器的内存来定,如果太多了内存扛不住可能起不来。

  • -k WORKERCLASS, --worker-class=WORKERCLASS: 工作进程类型. 包括 sync(默认), eventlet, gevent, or tornado, gthread, gaiohttp

  • –backlog INT: 最大挂起的连接数

  • –chdir: 切换到指定的工作目录

  • –log-level LEVEL: 输出error log的颗粒度,有效的LEVEL有:debug、info、warning、error、critical

  • –access-logfile FILE: 确认要写入Access log的文件FILE. ‘-’ 表示输出到标准输出

  • –error-logfile FILE, --log-file FILE: 确认要写入Error log的文件FILE. ‘-’ 表示输出到标准错误输出

下面是一个参考的配置文件

# filename:gunicorn.conf.py
# 绑定ip和端口号
bind = '0.0.0.0:8080'

# 设置守护进程,将进程交给supervisor管理
daemon = 'false'

# 监听队列
backlog = 512

# 超时
timeout = 30

# 使用gevent模式,还可以使用sync 模式,默认的是sync模式
worker_class = 'gevent'

# 进程数
# workers = multiprocessing.cpu_count() * 2 + 1
workers = 4

# 指定每个进程开启的线程数
threads = 2

# 设置最大并发量
worker_connections = 2000

# 设置访问日志路径
accesslog = "/home/rd/logs/access.log"

# 设置错误日志路径
errorlog = "/home/rd/logs/debug.log"

# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
loglevel = 'info'

相应的运行命令,

gunicorn -c gunicorn.conf.py test:app

如果你的gunicorn不是系统默认的,运行时你需要指定gunicorn的路径,否则会出现找不到相应命令的错误。如果是用pip安装的,你需要先激活安装了gunicorn的环境。

supervisor

supervisor简介

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

supervisor安装

1.Debian/Ubuntu可通过apt安装

apt-get install supervisor

2.Centos可通过yum安装

yum install supervisor

3.pip安装

pip install supervisor

4.easy_install安装

easy_install supervisor

supervisor使用

生成 supervisor 默认配置文件,首先生产一个supervisor目录,默认放在/etc/目录下,当然你可以根据需要放在其他目录下面。

echo_supervisord_conf > /etc/supervisor/supervisor.conf

这里我们放在/etc/supervisor/目录下,文件名为supervisor.conf,可以取其他名字。

如果你的项目的配置文件想根据项目需求单独写,你需要修改一些配置,将你的配置文件的路径加到include下,

sudo vim /etc/supervisor/supervisor.conf

在文件最后一行添加你的配置文件的路径

[include]
files =/xxx/test.conf

配置文件中注释是用冒号注释

下面我们开始写配置文件,

[program:test]

;项目工作目录(脚本启动目录的全路径)
directory = /home/rd/xxx

;启动命令
command = gunicorn -c gunicorn.conf.py app:app

;启动时间
startsecs = 0

;终止等待时间
stopwaitsecs = 0

;supervisord守护程序启动时自动启动tornado
autostart = true

;supervisord守护程序重启时自动重启tornado
autorestart = true

;log 日志
stderr_logfile=/home/rd/logs/error.log

启动命令,

supervisord -c /etc/supervisor/supervisor.conf

supervisorctl一些常见的命令,

supervisorctl status    # 查看程序状态
supervisorctl stop update_ip   # 关闭 update_ip 程序
supervisorctl start update_ip  # 启动 update_ip 程序
supervisorctl restart update_ip    # 重启 update_ip 程序
supervisorctl reread    # 读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update    # 重启配置文件修改过的程序

你可能感兴趣的:(Linux)