引言
回想django的部署方式
以django 为代表的python web 应用部署是采用的是wsgi协议与服务器对接(被服务器托管),而这类服务器通常都是基于多线程的 也就是说每一个网络请求服务器都会有一个对应的线程来用web应用(如 django)进行处理。
考虑两类应用场景
1 用户量大 高并发
如秒杀抢购 双十一某宝购物 春节抢火车票
2 大量的http持久连接
- 使用同一个TCP 连接来发送和接收多个htttp 请求应答 而不是为每一个新的请求/应答打开新的连接方法。
- 对于HTTP 1.0 可以在请求的包头(Header)中添加Connection:Keep-Alive
- 对于Http 1.1 所有的连接默认都是持久连接
对于这两种场景,通常基于多线程的服务器很难应对
C10K 问题
- 对于前文提出的这种高并发问题 我们通常用C10K 这个概念来描述 C10K— Concurrently handing ten thousand connections 即并发10000个连接 对于单台服务器而言,根本无法承担,而采用多台服务器分布式又意味着高昂的成本,如何解决C10K问题?
Tornado
Tornado 在设计之初就考虑到了性能因素 旨在解决c10K 问题 这样的设计使得其成为一个拥有非常高性能的解决方案(服务网器与框架的集合体)。