tornado【第一篇】简介

官方文档

http://www.tornadoweb.org/en/stable/

why tornado

tornado不仅可以作web框架,还支持其它框架做不到的高并发和长链接

tornado优缺点

优点

tornado为了解决高并发(每秒可处理数以千计的连接)和长连接产生的web服务器(因此部署简单)

tornado也有异步客户端 AsyncHttpClient

部署方便

注:新版tornado采用Asyncio

缺点

协程的写法复杂些

tornado VS 其它框架

高并发

在python的web开发框架中,目前使用量最高的几个是django、flask和tornado, 经常会有人拿这几个对比,相信大家的初步印象应该是 django大而全、flask小而精、tornado性能高。

1. tornado、gevent、asyncio、aiohttp:底层使用的是事件循环+协程

2. django和flask: 传统的模型,阻塞io模型

编码方式

虽然django和flask比tornado和asyncio性能低,但是他们作为老牌的框架:生态丰富,代码容易理解,简单啊!但是我相信通过asyncio和tornado进行并发编程必定会成为未来的另一个主流方向。这里我个人更看好基于asyncio的框架。nodejs和go语言都得益于协程轻松实现了高并发。

django如何编写异步代码呢

1. 直接用传统的异步编程(进程,线程,协程),虽然有些 wsgi server 支持 asynio 模型,但是这也需要用户所写的代码做相应的支持。这就导致了如果我们在 wsgi application 的时候不能随便使用线程和异步 IO ,如果用了就需要配置 wsgi server 使其支持我们自己的写法。因此为了使得我们缩写的 application 能部署在任意的 wsgi server(container)中,我们就只能写同步代码了。 

2. 使用分布式异步编程,使用类似 celery 的方式,将需要异步处理的东西发送到 worker 去处理。 

部署方式

这里先介绍一下经典后端架构部署方式

 像Django,Flask框架都有自己实现的简单的WSGI server,一般用于服务器调试,生产环境下建议用其他WSGI server。比如django启动 manage.py runserver 就是启动的这个,这种只适用于本地开发的时候使用,线上运行还是需要配置nginx+uwsgi+django才行。
  

wsgi 除了解析 http 协议以及 http 端口侦听外,还负责了流量转发以及 wsgi application 进程管理的功能。一般 wsgi 框架内置的 wsgi server 都是一个单进程,一次只能处理一个请求。而目的通用的 wsgi server(gunicorn, uwsgi)都至少支持 pre fork 模型,这种模型会起一个 master 来侦听请求,并启动多个 slave(每个 slave 是一个 wsgi application), master 负责把请求转发到空闲的 slave 上。除了这种传统的基于进程的 pre fork 同步模型,不同的 wsgi server 也会支持一些其它模型,有基于线程的同步模型,也有基于 asyncio 的异步模型。
后端架构简析
Nginx是一个高性能的HTTP/WS和反向代理服务器,可以理解为就是端口转发或者中间层

反向代理的作用
1. 安全,客户端对Web服务器的访问需要先经过反向代理服务器。这样可以防止外部程序对Web服务器的直接攻击。
2. 负载均衡,反向代理服务器可以根据Web服务器的负载情况,动态地把HTTP请求交给不同的Web服务器来处理,前提是要有多个Web服务器。
3. 提升Web服务器的IO性能。一个HTTP请求的数据,从客户端传输给服务器,是需要时间的,例如N秒,如果直接传给Web服务器,Web服务器就需要让一个进程阻塞N秒,来接收IO,这样会降低Web服务器的性能。如果使用反向代理服务器,先让反向代理服务器接收完整个HTTP请求,再把请求发给Web服务器,就能提升Web服务器的性能。还有一些静态文件的请求,可以直接交给反向代理来处理,不需要经过Web服务器。
nginx概念
1.WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范。要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Django。

2.uwsgi:与WSGI一样是一种通信协议,是uWSGI服务器的独占协议,用于定义传输信息的类型(type of information)
3.uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等。
4.WSGI协议主要包括server和application两部分
5.WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
6.WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。
7.WSGI协议其实是定义了一种server与application解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的server和application组合实现自己的web应用。例如uWSGI和Gunicorn都是实现了WSGI server协议的服务器,Django,Flask是实现了WSGI application协议的web框架,可以根据项目实际情况搭配使用。
wsgi uwsgi 概念

  

 

 

 

 

 

 

 

 

 

  

 

转载于:https://www.cnblogs.com/hyit/articles/10953234.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值