三個基於 Python 的網站:知乎、豆瓣、V2EX 都存在卡頓的問題,是 Python 的問題嗎?
1. 知乎有時候打開一個鏈接非常之慢,大量評論展開更是無法忍受。有時頁面刷新完了,點任何連接都沒有響應。
2. 豆瓣經常掛掉,502 之類的(當然我知道這個跟 python 無關),也存在同樣的問題,時不時會響應非常慢,一個頁面等待 10s 以上。3. v2ex 相比來說要小一點兒,也是類似的問題,但它時快時慢跟網路環境關係差別巨大。======================================天天刷網頁,這三個網站卡頓是很明顯的現象。如果沒遇到這個問題請不要搗亂。
而且我沒有推導出跟語言『有關』,我在詢問『是否有關』。A、B、C 使用了同一種技術,有同樣的癥狀,難道不能懷疑這種技術 普遍/很可能 存在這樣的癥狀么?為什麼當年 twitter 從 ruby 遷移到了 java ?
再補一刀吧,之前沒看到。
雖然我用豆瓣從沒碰到過 502但是,如果你真的碰到了,而且確信這個 502 來自豆瓣的前端 HTTP 伺服器那麼這是唯一一個 可能和後面 Python 有關的現象。------------
一個網站是不是卡頓,可能的情況太多,隨之帶來的細節表現不同都是可以值得分析的問題。- 線路
- DNS
- CDN / 文件服務
- 靜態資源
- 動態資源
- 緩存同步
線路
國內出名的南北分裂、電聯分裂。雖然這些年很少再聽到集中討論這個問題,但真碰到誰家沒做好雙線機房設置也只能自認倒霉是不?去 ping 一下網站域名,看看 ping 的延遲,如果異乎尋常的大(比如數百毫秒到 1 秒以上,多半是這裡的問題)。DNS
其實和線路一樣相關。好的 DNS(e-DNS 擴展)會根據用戶當前位置,為用戶分配合適的伺服器。當然如果不支持 e-DNS 是沒辦法的,伺服器只有一個 IP 也沒什麼可以做的。CDN / 文件服務CDN 是將一時不會改變的靜態內容發放給用戶的最重要渠道。文件服務(Amazon S3 等)通常與 CDN 做類似的事情 / 與 CDN 搭配使用。CDN 通過動態緩存靜態文件到所謂的 edge server - 通常是位於靠近 ISP 接入的機房,使用戶訪問這些資源的路徑更短、延遲更低。同時因為 CDN 的巨大主機數量,正確使用也可以降低網站本身伺服器壓力。知乎的圖片來自 http://p4.zhimg.com 等一系列域名,這些域名實際上是重定向到雲存儲 / CDN 的主機去,譬如知乎:$ nslookup p3.zhimg.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
p3.zhimg.com canonical name = d.qiniudn.com.
d.qiniudn.com canonical name = wsall.36tr.com.wscdns.com.
wsall.36tr.com.wscdns.com canonical name = 08911.xdwscache.glb0.lxdns.com.
Name: 08911.xdwscache.glb0.lxdns.com
Address: 122.228.218.146
知乎經常出現 CSS / 圖片載入出錯,實際上是 CDN 和文件伺服器方面的問題,並不是後台伺服器出錯。(最近是 AB 測試出問題么?刷幾遍會換一個 CDN 地址給我?)
V2EX 的頭像直接掛在 http://9429127371.a.uxengine.net 域名上。靜態文件
伺服器設置錯誤可能導致讓 Python / Tomcat 之類的應用伺服器去直接響應沒有被 CDN 緩衝的靜態文件請求(嗯,我自己做的蠢事)動態內容 / 緩衝
最後才到這裡了。動態生成內容(時間線啊答案列表之類)是不是真正打在 Python 進程上,慢的是資料庫訪問還是 Python 自己的計算?如果是資料庫,有沒有做 memcached 緩衝,有沒有做讀寫分離,有沒有做 HA?如果是計算,是不是有演算法優化,是不是部分任務可以推遲到後台執行,是不是可以用 MQ 分布到後台伺服器執行?如果有多機,冷熱不是是均勻?是不是在多機同步上出現性能問題?如果每個請求負載重,能不能拆開(如何評價 Quora 的 Ultralisk 並行架構?)?能不能通過放鬆同步要求來減緩服務壓力(知乎的悲劇的緩存同步問題啊)。有多少東西可以靜態化解決?上面這一坨字里,真正跟 Python 有關的,一個字也沒有。
這個問題,是不是問得太草率了一點?課後作業,閱讀理解:
終於明白為什麼上不了YouTube了
我還想補充一下,php也是垃圾啊,facebook那麼大的網站,用php做的,根本上不去嘛。
1、簡短回答:
不是Python導致的,我這裡豆瓣非常快,但知乎好像真的有點卡頓的現象(也有可能看到問題之後才腦補意識到的.......).2、為什麼不是Python導致的
或者說,任何一個網站很卡,都不大應該說是其後端的某個語言導致的(雖然寫的很爛確實會導致卡頓,但知乎之類的肯定不是這個原因),對於知乎這類訪問量很大,同時又大量文本內容的網站,會大量使用Cache,也就是說直接從內存取數據不再頻繁訪問資料庫,從這個層面基本各個語言都不會差太多,甚至HTML頁面也都是cache出來的.
3、是什麼導致了卡頓
很有可能是大量的Ajax請求導致的,我注意到滑鼠移動到人名、話題上的時候都會觸發3個新的Ajax請求,新進入一個頁面大約有30~40個HTTP請求發出去,雖然數據量不大,但如果瀏覽器性能較差或者系統分配給瀏覽器的內存不足,頻繁的調用Ajax可能就會需要等待其他地方釋放一點內存。我沒有仔細看,但似乎有些知乎的頁面是整個HTML頁面都是Ajax非同步渲染的,由於dom樹的構造也很耗費性能,所以如果機器過老,或者網路太差都會出現這個問題.
4、如何解決
其實我並沒有特別留意到樓主說的卡頓現象,解決方法可能就是升級機器吧......對於知乎來說,可能需要考慮部分網路不好的用戶,盡量少的發送HTTP請求,一個頁面30多個請求我感覺還是蠻多的.或者學習Quora進行延遲載入(直觀的猜測),就是不要進入頁面的時候把Ajax請求一口氣全發出去,而是先等用戶進入頁面(比如8個請求的時候),然後頁面基本信息渲染完畢後再依次發送其他Ajax請求。武功差不要怪手上的兵器,網站慢不要怪所用的語言。
"屙屎不出賴地硬"
卡頓, 可能在服務端(也可能是應用層面,也可能是http伺服器層面,資料庫層面。。。),也可能是網路的情況,也可能是你瀏覽器的問題。這個*可能*和python無關。
知乎一直時好時壞,有時翻牆才能上。和Python無關吧,也許是被攻擊了呢。
首先,說Python慢,這是和編譯語言比,比如與C,C++,Java比,在動態語言中,它並不慢,它比Ruby要快,它和Perl性能相當。如果選擇動態語言的話,Python並不是很慢。另一方面,如果做網站開發,語言的不是速度的瓶頸,比如現在用Python寫的程序全部用C寫,程序當然會快一點,但是改變不是很大。Web網站一般會有很多對IO的操作,比如對資料庫的訪問,對硬碟的訪問響應用戶的請求,80%,90%你的時間都花在IO上,語言的速度,相對而言,不是那麼重要。也可以這樣說,網站的性能主要取決於架構設計的是否合理。因為網站需要響應大量的並發的請求,如果你的設計的不好,即使你用C寫的,也可能無法應付。所以更多的考慮是在架構設計上,要使架構體系不會產生速度瓶頸。
肯定是,我上google還經常被404呢,肯定是google用了python的原因!
我最想說的是:原來不止我一個人覺得慢。。。囧。
應該還是網路、CDN原因,和python毛關係沒有
我感覺google也做的挺爛的,以前偶爾能上去,現在完全上不去了。
成熟的語言並沒有如此大的問題以至於由於語言本身缺陷而導致一個頁面卡10s,那必然都是工程師實現方法不當的問題。
twitter 從 ruby 遷移到了 java ,因為rails作為項目啟動很快,但由於種種原因(比如人力、維護成本、成熟框架、插件支持等),完全可以有理由轉向傳統穩定平台。前兩個網站經常去,從能接觸到的種種細節來看,技術架構屬於呵呵水平。
換台電腦吧,或者重裝下也行。·