网络基本知识

Tornado解决C10K问题

2018-07-28  本文已影响94人  买不起扁担的沙和尚
以Django为代表的部署方式是什么

在谈Tornado解决C10K问题之前,首先要提一下django的部署web应用的方式。以Django为代表的python web应用部署时采用wsgi协议与服务器对接(被服务器托管),而这类服务器通常都是基于多线程(一种一个创建一个线程,另一种提前先创建count(n)个)的,也就是说对于每一个网络请求,服务器都会有一个对应的线程来用web应用进行处理。

多线程服务器的局限

虽然这种方式从一定程度缓解了服务器端的问题,但很难处理用户量大,高并发的场景(如秒杀抢购、双十一某宝购物、春节抢火车票等),同时在http1.1版本中所有的连接默认都是持久连接(在http1.0中要在在请求的header中添加Connection: Keep-Alive),这些问题都是多线程的服务器无法应付的。

C10K的概念

C10K—— Concurrently handling ten thousand connections,即并发10000个连接。对于单台服务器而言,根本无法承担,而采用多台服务器分布式又意味着高昂的成本。

Tornado的产生

Tornado在设计之初就考虑到了性能因素,旨在解决C10K问题,这样的设计使得其成为一个拥有非常高性能的解决方案(服务器与框架的集合体)。

Tornado的优势

Tornado全称Tornado Web Server。从字面意思来看,Tornado的强大之处就显现出来了。它可以作为一个web服务器有可以充当web应用框架,作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式;作为Web服务器,Tornado有较为出色的抗负载能力,最大浏览量能实现其他python web应用框架的三倍以上。性能上Tornado具有显著的优势,毕竟设计之初就是试图解决C10k问题(即处理大于或等于一万的并发),这也就是为什么之前我们每周日12:00看runningman爱奇艺的服务器没有瘫了~~。

关于Tornado使用平台及原理(官方直译版~~)

Tornado应该运行在类Unix平台,在线上部署时为了最佳的性能和扩展性,仅推荐Linux和BSD(因为充分利用Linux的epoll工具和BSD的kqueue工具,是Tornado不依靠多进程/多线程而达到高性能的原因)。
对于Mac OS X,虽然也是衍生自BSD并且支持kqueue,但是其网络性能通常不太给力,因此仅推荐用于开发。
对于Windows,Tornado官方没有提供配置支持,但是也可以运行起来,不过仅推荐在开发中使用。
最后,献上在Ubuntu上的使用文档一份(链接:https://pan.baidu.com/s/1RsXT4-815BYLRRy69SnFSg 密码:qco2)。

上一篇下一篇

猜你喜欢

热点阅读