python web高并發(fā)框架思考

前言(一般這里說下寫文章的原因):

首先作為一個QA傀蓉,寫過大大下下的web項目有十幾個了,但是遺憾的是一直沒有一個項目的使用壓力能達到項目瓶頸(阿里云2核4G的ECS)职抡,其實我只是用django+uwsgi+nginx這套東西葬燎,當然有一些自以為是的調(diào)優(yōu),但是壓力確實全都沒上去缚甩,自己壓測感覺也不是真實數(shù)據(jù)谱净,當然壓力大了uwsgi會突突突報錯,但是最近還是在思考python的高并發(fā)解決方案擅威,說句糟心的話壕探,萬一有一個項目到了呢,不至于措手不及

郊丛。

首先我不質(zhì)疑django+uwsgi+nginx這套架構李请,說實話開發(fā)項目速度賊快,小打小鬧的壓力也還可以厉熟,但是總是要追求下更好导盅。以下只是小編自己的調(diào)研和YY,歡迎大牛指正揍瑟。

首先說一下linux解決高并發(fā)的機制就是著名的IO多路復用了,三種機制epoll\poll\select白翻,想詳細了解的同學可以谷歌查下啦,這里只是簡單粗略的說說自己的理解绢片,這三個東西滤馍。

我們都知道,當一個請求到達服務器底循,也就是進行soket通信時巢株,是通過套接字接受一個連接并開啟一個線程進行通信,但是這個時候我們并不知道客戶端的信息有沒有發(fā)完此叠,肯定有發(fā)一大坨過來的數(shù)據(jù)纯续,要接收好久,那得了灭袁,我們咋知道客戶端發(fā)送完了呢猬错,這就有兩種方法了。

1茸歧、死磕倦炒,就在這等著你,發(fā)完了我在走软瞎。

2逢唤、你發(fā)吧拉讯,我一會來問問,要是沒發(fā)問鳖藕,我就一會在來問問魔慷。

很顯然第二種方法好太多,不占用時間著恩,如果高并發(fā)有多個連接院尔,可以在一定時間輪詢,看有沒有數(shù)據(jù)讀寫喉誊,這樣就可以并發(fā)處理了邀摆,這個其實就是poll和select的解決方案,當然詳細的比我說的復雜的多的多伍茄。雖然看起來問題解決了栋盹,但是隨著連接的越來越多,輪詢查看的時間就越來越久敷矫,而且很多soket連接是不活躍的例获,這浪費了大量的時間。因為這個時間大牛們對poll進行了升級沪饺,此時epoll出來了躏敢,他可以只輪詢活躍的soket連接闷愤,這就節(jié)省了大量的時間整葡。

那知道epoll這東西好,就去研究研究epoll吧讥脐。

其實epoll很簡單遭居,提供了四個核心api

1、epoll_create

用來創(chuàng)建epoll描述符的旬渠,就是創(chuàng)建用俱萍。

2、epoll_ctl:

操作epoll的方法封裝在這個里面告丢,包括EPOLL_CTL_ADD(新增一個epoll)\EPOLL_CTL_DEL(刪除一個epoll)\EPOLL_CTL_MOD(改變epoll的監(jiān)聽方式)

改變監(jiān)聽方式又有7種枪蘑,這里就不一個一個說了,重要的有三個:EPOLLIN岖免,可讀岳颇,緩沖器滿\EPOLLOUT(可寫,緩沖區(qū)空)\EPOLLERR(發(fā)送錯誤)

3颅湘、epoll_wait

讓epoll開始工作话侧,其中timeout參數(shù);大于0-監(jiān)聽(阻塞)時間、等于0-立即返回闯参、等于-1一直監(jiān)聽

4瞻鹏、close

關閉epoll

好了為啥和大家說上面這一堆悲立,其實是想說,用epoll新博,是linunx下最快高并發(fā)解決方案薪夕,那目標就是linux下的py使用epoll的web框架了。

然后找到了tornado--開始潛心調(diào)研赫悄。

寫過tornado的小伙都知道啟動tornado服務最后的啟動語句是

tornado.ioloop.IOLoop.current().start()

重點 就在tornado.ioloop這個文件里面寥殖,這個里面機智的封裝了epoll里面上面說的四個api,良心啊涩蜘。

既然了解了tornado嚼贡,說一說高并發(fā)怎么搞吧。

nginx做反向代理同诫,啟動多個分發(fā)模塊粤策,分發(fā)給多個啟動的tornado進程,比如nginx啟動在80端口误窖,根據(jù)模塊分給8001叮盘、8002、8003等等霹俺,啟動多個tornado服務柔吼。因為python畢竟有GIL這東西,一個進程永遠不能多線程丙唧,特別是連接數(shù)據(jù)庫愈魏,感覺這里會有瓶頸,所以用nginx做反向代理想际,tornado起多進程培漏。

當然用慣了django的我不會落下這東西的,把django的orm胡本,中間節(jié)等特性和tornado結(jié)合牌柄,在tornado中可以使用dj的特性,同時支持tornado中的異步回調(diào)侧甫。

最后說的python珊佣,肯定是pypy啦。

所以最后準備 用nginx+tornado+django+pypy,數(shù)據(jù)庫mysql披粟,包管理機conda.

補一句咒锻,如果上面的方案不行,后面會使用lua(openrestry)--我負責項目使用的,或者使用go(未開始調(diào)研)僻爽。

折騰完繼續(xù)更新文章~

轉(zhuǎn)載務必標明出處3娴铩!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胸梆,一起剝皮案震驚了整個濱河市敦捧,隨后出現(xiàn)的幾起案子须板,更是在濱河造成了極大的恐慌,老刑警劉巖兢卵,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件习瑰,死亡現(xiàn)場離奇詭異,居然都是意外死亡秽荤,警方通過查閱死者的電腦和手機甜奄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窃款,“玉大人课兄,你說我怎么就攤上這事〕考蹋” “怎么了烟阐?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長紊扬。 經(jīng)常有香客問我蜒茄,道長,這世上最難降的妖魔是什么餐屎? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任檀葛,我火速辦了婚禮,結(jié)果婚禮上腹缩,老公的妹妹穿的比我還像新娘屿聋。我一直安慰自己,他們只是感情好庆聘,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布胜臊。 她就那樣靜靜地躺著勺卢,像睡著了一般伙判。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上黑忱,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天宴抚,我揣著相機與錄音,去河邊找鬼甫煞。 笑死菇曲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的抚吠。 我是一名探鬼主播常潮,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼楷力!你這毒婦竟也來了喊式?” 一聲冷哼從身側(cè)響起孵户,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岔留,沒想到半個月后夏哭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡献联,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年竖配,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片里逆。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡进胯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出原押,到底是詐尸還是另有隱情龄减,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布班眯,位于F島的核電站希停,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏署隘。R本人自食惡果不足惜采幌,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一芳誓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦雨膨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脾还,卻和暖如春伴箩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鄙漏。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工嗤谚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怔蚌。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓巩步,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桦踊。 傳聞我的和親對象是個殘疾皇子椅野,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容