• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    浅谈Python项目的服务器部署

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

    基本概念:

    两者之间的区别:

    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

    配置解析

    额外配置

    常用命令

    上面介绍了相关常用的配置参数,当设置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项目部署到linux服务器
    • Django+python服务器部署与环境部署教程详解
    • python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
    • 基于腾讯云服务器部署微信小程序后台服务(Python+Django)
    • Python Web程序部署到Ubuntu服务器上的方法
    • Linux下将Python的Django项目部署到Apache服务器
    • 在服务器端实现无间断部署Python应用的教程
    • Python实现根据指定端口探测服务器/模块部署的方法
    上一篇:Python Socket编程详解
    下一篇:详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    浅谈Python项目的服务器部署 浅谈,Python,项,目的,服务器,