基于Django的Disqus如何支持每月80億PV
現在我們Disqus能夠處理一個月80億PV,每秒處理45000個請求。在把評論發送到很多不同的人的時候,我們學到了一些東西。眾所周知 Disqus是用Django來處理絕大部分的web流量。在使用任何web框架之時,都要在開發速度 vs 性能、快速上手 vs 定制等之間做取舍。而Disqus更趨向于快速開發和容易上手,同時兼顧性能和靈活定制。
那么為什么web框架慢?
表面上,對于web框架的第一印象就是慢,因為在你的應用里有很多你不需要的代碼,這是一個正常的印象。在實踐中,緩慢往往不是由于膨脹的框架和語 言選擇造成的。緩慢應該是由于你的請求在你的網絡里與其他的服務進行通信的結果。在我們的場景下,這些’其他的服務’是 PostgreSQL、Redis、Cassandra和Memcached。緩慢的數據庫查詢和網絡延遲通常會拖累像Django這樣一個健壯框架的性 能。
為了規避這些延遲,人們使用各種各樣的緩存技術。最常見的方法就是使用Django內建的cache庫。
常見的應用緩存如下:
- 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將社交交友功能也很好的融入到了評論系統中,當用戶在某一網站上看到有與自己類似觀點的評論時,可對該評論的評論者進行關 注,關注后,該評論者以后的所有評論都會顯示在自己的賬號后臺。
原文鏈接:http://blog.disqus.com/post/62187806135/scaling-django-to-8-billion-page-views