現在我們Disqus能夠處理一個月80億PV,每秒處理45000個請求。在把評論傳送到很多不同的人的時候,我們學到了一些東西。眾所周知Disqus是用Django來處理絕大部分的web流量。在使用任何web框架之時,都要在開發速度 vs 效能、快速上手 vs 定製等之間做取捨。而Disqus更趨向於快速開發和容易上手,同時兼顧效能和靈活定製。
那麼為什麼web框架慢?
表面上,對於web框架的第一印象就是慢,因為在你的應用裡有很多你不需要的程式碼,這是一個正常的印象。在實踐中,緩慢往往不是由於膨脹的框架和語言選擇造成的。緩慢應該是由於你的請求在你的網路裡與其他的服務進行通訊的結果。在我們的場景下,這些’其他的服務’是 PostgreSQL、Redis、Cassandra和Memcached。緩慢的資料庫查詢和網路延遲通常會拖累像Django這樣一個健壯框架的效能。
為了規避這些延遲,人們使用各種各樣的快取技術。最常見的方法就是使用Django內建的cache庫。
常見的應用快取如下:
1 2 3 4 5 |
data = cache.get('stuff') if data is None: data = list(Stuff.objects.all()) cache.set('stuff', data) return data |
如果你熟悉Django,這應該是個很常用的模式。這種形式的快取是非常簡單明瞭,並且在大多數情況下都適用。配合Memcached,它就足夠快了,但是為了響應一個請求仍然有很多工作需要做。
處理每秒45000次請求
我們已經對處理很慢的東西做了快取。不過在達到每秒45000次請求的時候仍然有很多工作需要做。我們可能會返回JSON,渲染HTML模版,簡單的解析HTML或者執行Django中介軟體。問題是,我們希望能夠讓這些工作更快返回,讓Django來處理它擅長的:只處理唯一的資料。
在每秒45000次請求裡面,有多少是唯一的?在這裡面有多少請求的返回與下一個返回不一樣?你真的需要在返回結果一樣的時候做重複的工作嗎?我們需要將整個HTTP返回快取起來以是我們不用做重複工作。
介紹Varnish
Varnish是神馬?Varnish是工作於負載均衡和Django後端之間,作為HTTP快取層。這意味著它能夠將整個HTTP返回快取起來,讓那些不唯一的請求不用命中Django伺服器。
之前,Varnish使我們的一個黑盒子。我們安裝並且最小程度的配置它,老實說,它工作的非常棒。但我覺得我們還能做的更多。
我花了一些時間來學習更多關於Varnish和我們能用得上的東西。隨著時間的過去,我們能夠讓每秒數千次請求不用命中Django伺服器。今天,在每秒45000次請求裡面,只有15000次請求會命中我們的應用伺服器。剩下的被Varnish接收,它執行的非常快和有效。
因為這對我們非常有用,也是一段很好的學習經歷,這個主題也成為了我近期的一些演講的主題。
最近,我在芝加哥的DjangoCon大會上有一個演講。這個演講是面向不熟悉Varnish的人,用希望來鼓舞和驅動他們學習更多。對我而言,我對這次演講很興奮,因為這個主題是很少被應用開發者提到的。這是一個我希望幾年前就能聽到的演講,希望能夠讓人明白HTTP是如何工作,以及如何使用像Varnish這樣的工具來管理它的互動。(HTTP for Great Good)
在那之前,我出席了在紐約舉辦的VUG7(Varnish 使用者組),並且深入介紹了一些解決我們問題的技巧。這次演講裡涉及到很多我們使用的Varnish配置語言。 (Caching is Hard: Varnish @ Disqus)
tl;dr
學習Varnish,它不會解決你全部的問題,但它值得你投入時間來學習它和評估它的價值。
如果這型別的東西很吸引你,並且你跟我一樣也喜歡一週至少5天對著電腦吼叫,速度聯絡我們,我們在招人!
(編注:原文評論也精彩,值得一看。)
補充資訊:
Disqus是一家第三方社會化評論系統,主要為網站主提供評論託管服務。WordPress、Blogger、Tumblr等第三方部落格平臺均提供了Disqus第三方評論外掛。Disqus的主要目標是通過提供功能強大的第三評論系統,將當前不同網站的相對孤立、隔絕的評論系統,連線成具有社會化特性的大網。通過Disqus評論系統所具備的評論回覆通知、評論分享和熱文分享等社會化功能,網站主可以有效的提高網站使用者的活躍度和流量。
使用者使用Disqus,在不同網站上評論,無需重複註冊賬號,只需使用Disqus賬號或者第三方平臺賬號,即可方便的進行評論,且所有評論都會儲存、儲存在Disqus賬號後臺,方便隨時檢視、回顧。而且,當有使用者回覆自己的評論時,可以選擇使用郵箱接收相關資訊,保證所有評論的後續行為都可以隨時掌握。於此同時,Disqus將社交交友功能也很好的融入到了評論系統中,當使用者在某一網站上看到有與自己類似觀點的評論時,可對該評論的評論者進行關注,關注後,該評論者以後的所有評論都會顯示在自己的賬號後臺。(摘自百度百科)