Django+uWsg+Nginx原理的初步理解

1. 整体架构

整体结构图
各部分简介:

  • Nginx
    Nginx 是一个反向代理服务器,负责静态资源处理、动态请求转发以及结果的回复。
  • uWSGI
    uWSGI 是一个Web服务器,负责接收 Nginx 请求,转发并处理后发给 Django 以及
    接收 Django 返回信息转发给 Nginx。uWSGI是 实现了uwsgi协议,WSGI规范和HTTP协议的 一个C语言实现的软件。
  • Django
    Django 是一个Web应用框架,在收到请求后进行逻辑和数据处理,然后响应结果给 uWSGI 服务器。

2. 通信关系

各部分的通信关系

2.1 交互流程

  1. 首先客户端请求服务资源
  2. Nginx作为反向代理服务器,也是直接对外的服务接口,接收客户端发送过来的Http请求并对请求进行解包和分析
  3. 如果是静态文件请求,Nginx会根据其配置的静态文件目录,返回请求的资源
  4. 如果是动态的请求,Nginx会把请求(HTTP协议)转换uwsgi协议传递给uWSGI,uWSGI将接收到的包进行处理,并转发给WSGI
  5. WSGI根据请求调 Django工程的某个文件或函数,处理完后Django将返回值交给WSGI
  6. WSGI将返回值进行打包,转发给uWSGI
  7. uWSGI接收后转发给Nginx,Nginx最终将返回值返回给客户端(如浏览器)。

2.2 协议简介

  • WSGI(Web Server Gateway Interface)
    一种实现Python解析的通用接口标准/协议,WSGI规定了Python Web应用和Python Web服务器之间的通讯方式。目前主流的Python Web框架,比如Django,Flask,Tornado等都是基于这个规范实现的。
  • uwsgi
    uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,它和WSGI相比是两样东西。

3. Unix Socket 和 IP Socket

  • Unix Socket
    UNIX Domain SOCKET 是在Socket架构上发展起来的用于同一台主机的进程间通讯(IPC)。UNIX Domain SOCKET有SOKCET_DGRAM和SOCKET_STREAM两种模式,类似于UDP和TCP,但是面向消息的UNIX socket也是可靠的,消息既不会丢失也不会顺序错乱。
  • IP Socket
    IP socket要利用主机的传输层(tcp),可以用于同一台主机上不同进程间的通信,也可以用于网络上不同主机间的通信。
  • 效率对比
    基于localhost的IP Socket需要实现跨网络主机通讯的全部环节,包括建立socket连接,ACk开销,tcp流控,封装/解封,路由。在这个过程中还会有2个context switch,因为使用网络层传输数据需要调用system call,而调用system call会产生中断,导致context switch的;另外一个进程接受到来自网络层的连接请求,也会产生系统中断,导致context switch。以上过程导致2个context switch的开销,外加其它各种开销(overhead)。
    Unix Socket 直接进行内存交换,它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序列号应答等。只是将应用层数据从一个进程拷贝到另一个进程。相对于IP Socket,它的效率更高。

参考博客:
https://www.jianshu.com/p/1c50b15b143a
https://blog.csdn.net/as57147/article/details/82889288
https://www.jianshu.com/p/aefe19723667
https://blog.csdn.net/zhangkun2609/article/details/84188465

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值