Django3的改变
MariaDB: MySQL的一个分支,开源的一个版本
ASGI: 异步服务网关接口
重大的改变之支持ASGI
WSGI: Web Server Gateway Interface,也称为中间件
用于定义Python程序和Web服务器如何通信的协议,通常使用的有uwsgi、mod_wsgi等
Python程序 | Web服务器 | 客户端 |
---|---|---|
Django | Apache | 浏览器 |
Flask | Nginx | App |
Tornando | IIS | 小程序 |
… | … | … |
整个过程用示意图可表示为如下图所示的形式
其中,第一次通信使用的是WSGI协议;第二次通信使用的是Http协议。
如何实现实时的消息通知机制
-
使用Http协议
每隔一段时间进行一次轮询(poll),Http是一种同步的通信机制
缺点
- 服务器的压力相对较大
- 发送了很多重复的报文
-
使用WebSocket协议
建立持久、可双向通信的连接,WebSocket是一种异步的通信机制
优点
- 真正的实时通信
- 降低服务器资源消耗
缺点
- WSGI并不支持WebSocket,只能通过第三方库进行使用
C10K问题,单台服务器无法处理10,000+个并发连接
单个访问的情况
后端的Web程序在处理一个请求的时候,可能会发生一些数据库的CRUD操作,这些操作统称为"耗时操作"。
此时,响应这个处理的进程或者线程,就会一直处于等待的操作,什么任务都不执行。
为了避免这种浪费的发生,就产生了异步的思想:在进行数据库的CRUD操作的时候,Web程序去处理其他的事情。当这些耗时操作完成后,通过回调来通知Web程序继续处理。
ASGI——支持异步通信的机制
为了让Python的Web程序支持异步通信和相关处理机制,ASGI自此诞生。
目前,Django3.0内部采用了线程池做同步处理请求,底层的ASGI服务器是异步处理请求。尽管如此,性能也是之前的3~5倍,支持的并发连接数也更高。
ASGI服务器以及Web框架
ASGI服务器
-
Daphne
当前的ASGI的参考服务器,使用Twisted编写,并作为Django Channels项目的一部分进行维护。支持HTTP / 1,HTTP / 2和WebSockets。
-
Uvicorn
基于uvloop和httptools的快速ASGI服务器。支持HTTP / 1和WebSockets。
-
Hypercorn
基于sans-io hyper,h11,h2和wsproto库的ASGI服务器。支持HTTP / 1,HTTP / 2和WebSockets。
Web框架
- Django
- Quart: 兼容Flask
- Starlette
Django各版本发行时间及支持时间
最后附上Django的各版本发行时间以及支持时间
总结
Django3.0相较于Django2的变化,我认为最主要的有两点,分别是
1.提升了对Python版本的依赖,如Django2.0甚至可以使用Python2,但是Django3.0要求Python版本必须高于3.6。
2.开始支持异步框架,即自带的WebSocket协议,这是至关重要的一点。
总体来说,Django2.2目前是可用的,毕竟根据官方的显示,它是一个长期支持版,至少可以到2022年。如果没有明确的异步需求,自然是首选稳定的2.2版本。如果确实需要用到异步的功能,那么Django3.0也是一种不错的选择!