浅谈Python项目的服务器部署

 更新时间:2021年04月25日 10:49:53   作者:咸鱼彬  
这篇文章主要介绍了Python项目的服务器部署,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下

关于Web服务器和应用服务器

基本概念:

  • Web服务器主要功能就是存储、处理、传递网页,客户端和服务器之间基于HTTP协议进行通信。
  • 应用服务器主要是处理动态请求,调用相应的对象完成对请求的处理,返回响应的结果。

两者之间的区别:

  • Web服务器主要是以HTTP为核心,WEB UI为向导的应用,处理一些静态请求。
  • 应用服务器虽然也支持HTTP协议,但应用服务器可以通过很多协议为应用程序提供商业逻辑。

Python项目部署架构

在我们平时搭建一个Python Web项目时,比如Django框架的项目,这时候常见的服务端架构:

  1. Nginx服务器作为代理服务器,代理处理静态资源(js,css,图片)请求,以及动态请求(增删改查)转发以及返回处理结果。
  2. uWSGI服务器负责接受Nginx服务器,处理过后转发给Django应用,接受Django应用处理返回的信息,在转发给nginx
  3. Django应用从uWSGI服务器接收请求,调用相应的业务逻辑,处理数据渲染相应的页面并且返回给uWSGI服务器。

关于cgi、wsgi、uwsgi、http协议

接下来针对上文提到Django项目部署架构,聊聊这几个协议在这过程中的作用:

  1. http协议:客户端程序和Nginx服务器通信就是基于http协议,而Nginx服务器作为一个代理服务器,会根据HTTP请求返回静态资源还是转发动态请求。
  2. cgi协议:cgi协议是外部应用程序和Web服务器之间的接口标准,简而言之,就是规定如何让一个程序与Web服务器程序之间通信。
  3. wsgi协议:基于现存的CGI标准设计,一个Python web框架编写的应用程序和Web服务器之间通信的规范。
  4. uwsgi:uWSGI服务器独有的协议,用于uWSGI服务器和其他Web服务器之间的数据通信

关于cgi、fastcgi、php-fpm、FastCGI(额外)

  1. CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。
  2. FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。
  3. PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。
  4. PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。

关于uWSGI、Nginx服务器

简单来讲,uWSGI也是一个Web服务器,他虽然同时实现了http、uwsgi、wsgi协议,但是更多被作为应用服务器和应用程序之间进行通信。
那么这里就有个疑问了,为什么uWSGI都能直接处理http请求了,还需要Nginx服务器?这样处理有几点原因:

  1. 首先Nginx服务器在这过程中属于代理服务器的角色,每当一个http请求进来,就需要经过Nginx服务器,而Nginx服务器的优势就在于异步非阻塞的网络模型,它能够在单线程的情况下处理大量的请求,针对处理静态资源请求;而对于动态请求,能够通过缓存的功能,并且配合CDN进行优化,这样能够极大降低系统的负载,降低客户端响应时间。
  2. 其次,Nginx服务器能够进行负载均衡,启用多个后端服务器,通过Nginx对HTTP请求进行分配,这样能够极大优化架构的效率,提高处理的性能。
  3. 最后,Nginx有很多模块支持一些比如白名单,黑名单功能,并且配合keepalive实现高可用的架构.

总而言之,Nginx服务器在处理http请求上,都有着uWSGI没有的优势,所以在日常部署环境中,经常会使用到Nginx+uWSGI。

uWSGI

安装部署

uWSGI有两种安装方式,一种是通过pip安装,一种是通过源码安装。这里就简单介绍pip安装方式,源码安装有兴趣可以私下自己了解。

pip install uwsgi

相关文件

uWSGI服务器在启动的过程中主要涉及到以下这几个文件,其中uwsgi.sock还会涉及到Nginx相关部署的问题,在Nginx配置的时候回继续展开讲。

(venv) [root@mbb-48 uwsgi]# tree .
.
|-- uwsgi.ini       # uwsgi配置文件
|-- uwsgi.log       # uwsgi日志文件
|-- uwsgi.pid       # uwsgi运行进程pid
|-- uwsgi.sock      # uwsgi socket
`-- uwsgi.status    # uwsgi状态文件

配置示例

以下配置是自己一个项目中用到的,其中的配置参数都是比较常见通用。

[uwsgi]
chdir=/data/Novel/novel_test
module=novel_test.wsgi:application
home=/data/Novel/venv
static-map=/static=/data/Novel/novel_test/static
threads=8
http=0.0.0.0:23606
master=true
vacuum=true
thunder-lock=true
uid=root
gid=root
harakiri=30
post-buffering=4096
socket=%(chdir)/uwsgi/uwsgi.sock
stats=%(chdir)/uwsgi/uwsgi.status
pidfile=%(chdir)/uwsgi/uwsgi.pid
daemonize=%(chdir)/uwsgi/uwsgi.log

配置解析

  • chdir: 定义项目的目录
  • module: 要使用的 WSGI 模块,不同的Python web框架中使用方式也不太一样。
  • home: 指定Python执行环境,这个参数针对有不同Python运行环境,比如virtualenv创建独立Python环境的情况。
  • static-map: 映射静态目录
  • threads: 线程数量
  • http: 指定启动地址和端口
  • master: 启用主进程
  • vacuum: 退出时,清理产生的中间文件(sock,pid,stats)
  • thunder-lock: 序列化接收的内容
  • uid: 指定启动用户
  • gid: 指定启动组
  • harakiri: 设置服务器响应时间
  • post-buffering: 启用缓冲
  • socket: socket文件存放路径
  • stats: stats文件存放路径
  • pidfile: pid文件存放路径
  • daemonize: 日志文件输出文件路径

额外配置

  • processes: 进程数量
  • buffer-size: 设置缓冲大小
  • listen: 设置监听队列大小(默认100)
  • max-requests: 每个工作进程请求书的最高上限
  • procname-prefix-spaced: 工作进程的前缀名
  • wsgi-file: 指定加载WSGI文件

常用命令

上面介绍了相关常用的配置参数,当设置uWSGI参数后,需要启动指定配置文件,以及有关暂停,重启的动作。

uwsgi --ini uwsgi.ini   # 启动uWSGI
uwsgi --stop uwsgi.pid  # 暂停uWSGI
uwsgi --reload uwsgi.pid    # 重启uWSGI

服务监控

uWSGI之一Stats服务器机制,它能将uWSGI状态作为一个JSON对象导出一个socket中,只需要像我们前面配置uWSGI配置文件一样,添加stats选项,跟着一个有效的socket地址接口。

当你配置完毕后,就可以通过客户端连接到指定的socket地址,将会获得一个包含uWSGI内部统计数据的JSON对象。

uwsgi --connect-and-read uwsgi.status

执行完这个命令后,读取的返回的结果是一个json字符串,字符串中包括每个线程的状态,整个应用的负载,版本,监听队列等详细的信息。

uwsgitop查看实时状态
uwsgitop是一个开源的实时监控uWSGI服务器状态的工具,安装也十分简单:

pip install uwsgitop

具体uwsgitop像一个top命令,监听应用程序并且使用socket地址进行调用,查看进程运行状态,运行详细信息:

uwsgitop uwsgi/uwsgi.status
uwsgi-2.0.19.1 - Sun Sep 20 15:58:48 2020 - req: 6 - RPS: 0 - lq: 0 - tx: 67.6K
node: mbb-48 - cwd: /data/Novel/novel_test - uid: 0 - gid: 0 - masterpid: 15109
 WID    %       PID     REQ     RPS     EXC     SIG     STATUS  AVG     RSS     VSZ     TX      ReSpwn  HC      RunT    LastSpwn
 1	100.0   15144   6	0	0	0	idle    15ms    0	0	67.6K   1	0	125.449 15:48:08
  :2    16.7    -	1	0	-	-	idle    -	-	-	-	-
  :3    16.7    -	1	0	-	-	idle    -	-	-	-	-
  :0    33.3    -	2	0	-	-	idle    -	-	-	-	-
  :1    33.3    -	2	0	-	-	idle    -	-	-	-	-

具体有兴趣的同学可以参考github地址:

https://github.com/xrmx/uwsgitop

总结

关于uWSGI服务器相关使用就总结到这里,因为在平时工作中会经常接触到,但是由于没有应用到一些高并发的场景,对于uwsgi调优方面没有多少经验,等待以后遇到此类问题再继续总结性能调优方面的问题。同时有关Nginx方面的配置留到下一篇文章继续讲,未完待续。。。。。

以上就是浅谈Python项目的服务器部署的详细内容,更多关于python 服务器部署的资料请关注脚本之家其它相关文章!

相关文章

  • Python极简代码实现杨辉三角示例代码

    Python极简代码实现杨辉三角示例代码

    杨辉三角形因为其形式简单,又有一定的使用价值,因此是入门编程题中被用的最多的,也是很好的语言实例标的。这篇文章就给大家介绍了Python极简代码实现杨辉三角的方法,文章给出了详细的示例代码和解释,对大家理解很有帮助,感兴趣的朋友们下面来一起看看吧。
    2016-11-11
  • 如何理解python对象

    如何理解python对象

    在本篇文章里小编给大家分享的是一篇关于python对象的理解相关内容,有兴趣的朋友们可以学习下。
    2020-06-06
  • python中的格式化输出方法

    python中的格式化输出方法

    这篇文章主要介绍了python中的格式化输出方法, 数据可以以人类可读的形式打印,或写入文件以供将来使用,甚至可以以某种其他指定的形式。 用户通常希望对输出格式进行更多控制,而不是简单地打印以空格分隔的值,更多格式化输出方式需要的朋友可以参考下面文章内容
    2022-03-03
  • Django之编辑时根据条件跳转回原页面的方法

    Django之编辑时根据条件跳转回原页面的方法

    今天小编就为大家分享一篇Django之编辑时根据条件跳转回原页面的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 在python中实现对list求和及求积

    在python中实现对list求和及求积

    今天小编就为大家分享一篇在python中实现对list求和及求积,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 爬山算法简介和Python实现实例

    爬山算法简介和Python实现实例

    这篇文章主要介绍了爬山算法,爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)然后用Python实现了这个算法,需要的朋友可以参考下
    2014-04-04
  • Python多进程使用及进程池详解

    Python多进程使用及进程池详解

    这篇文章主要为大家介绍了Python多进程使用及进程池详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • python多进程(加入进程池)操作常见案例

    python多进程(加入进程池)操作常见案例

    这篇文章主要介绍了python多进程(加入进程池)操作,结合常见案例形式分析了Python多进程复制文件、加入进程池及多进程聊天等相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • 使用sklearn之LabelEncoder将Label标准化的方法

    使用sklearn之LabelEncoder将Label标准化的方法

    今天小编就为大家分享一篇使用sklearn之LabelEncoder将Label标准化的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python实现猜数字小游戏

    Python实现猜数字小游戏

    这篇文章介绍了Python实现猜数字小游戏,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以收藏下,方便下次浏览观看
    2021-12-12

最新评论