引言
回想Django的部署方式
以Django為代表的python web應(yīng)用部署時采用wsgi協(xié)議與服務(wù)器對接(被服務(wù)器托管),而這類服務(wù)器通常都是基于多線程的,也就是說每一個網(wǎng)絡(luò)請求服務(wù)器都會有一個對應(yīng)的線程來用web應(yīng)用(如Django)進行處理。
考慮兩類應(yīng)用場景
用戶量大,高并發(fā)
如秒殺搶購、雙十一某寶購物、春節(jié)搶火車票
大量的HTTP持久連接
使用同一個TCP連接來發(fā)送和接收多個HTTP請求/應(yīng)答,而不是為每一個新的請求/應(yīng)答打開新的連接的方法。
對于HTTP 1.0,可以在請求的包頭(Header)中添加Connection: Keep-Alive。
對于HTTP 1.1,所有的連接默認都是持久連接。
對于這兩種場景,通?;诙嗑€程的服務(wù)器很難應(yīng)對。
C10K問題
對于前文提出的這種高并發(fā)問題,我們通常用C10K這一概念來描述。C10K—— Concurrently handling ten thousand connections,即并發(fā)10000個連接。對于單臺服務(wù)器而言,根本無法承擔(dān),而采用多臺服務(wù)器分布式又意味著高昂的成本。如何解決C10K問題?
Tornado
Tornado在設(shè)計之初就考慮到了性能因素,旨在解決C10K問題,這樣的設(shè)計使得其成為一個擁有非常高性能的解決方案(服務(wù)器與框架的集合體)。