成人網站YouPorn使用Redis之經驗談

老碼農發表於2013-07-14

【譯者注】成人網站往往是網際網路中大流量、高併發的典型,因此對其效能的改進是非常關鍵的。之前翻譯過的一篇>《成人網站效能提升20倍之經驗談》也談到了成人網站通過巧妙利用RTMP協議、epoll機制和Python語言效能提高效能的一些實踐,這一篇則重點關注採用Redis作為後端資料儲存來提高網站開發運營效率的案例。兩篇文章都是伯樂線上的某編輯同學在HN上看到後推薦給我的,不得不說,編輯同學果然是火眼金睛,想必他對於成人網站也有很深的研究造詣。我預計下次他會找到一些關於如何hack成人網站VIP賬號的文章,為廣大讀者造福,也請廣大讀者多多支援編輯同學的工作。

以下是譯文:

RedisToGo 的賈斯汀(Justin)最近對Manwin集團(YouPorn和Pornhub之類的成人網站背後的公司)的 IT 總監埃裡克(Eric Pickup)做了一次採訪。在採訪中,埃裡克講述他們向 Redis 的遷移過程,為什麼要做這樣的遷移,以及遷移後的成效。對 Redis 感興趣的朋友,可看看他的《建立一個易於擴充規模的網站》(Youtube)視訊。下面是 Justin 對 Eric 的訪談。

 

賈斯汀:您能否談談你們為什麼要過渡到Redis?

埃裡克:基本上是這樣的:大約兩年前我們收購了這個網站(YouPorn)。當時它是用Perl編寫的,這也是我被招進來的原因之一。雖然我曾經用Perl幹過活,但是我們很快就認定了用它維護這個網站不可行。Perl的開發人員不足,尤其是能力強的高階開發人員更少。所以,如果我們繼續用Perl維護它,它只能成為一個停滯不前的網站,而這顯然是我們不想做的事情。

很快,我們決定要重構網站並開始調研不同的技術。其實我們的第一反應是PHP,但我們不想太早把自己侷限住,所以我們也調研了基於Java的解決方案。在對我們內部實驗過的技術進行了大量研究分析之後,我們決定堅持用PHP。

以前,我們也實驗過Redis、Varnish和其他一些技術。有些我們內部的網站已經開始使用Redis,主要是用來做快取解決方案。但我們還想知道,我們是否可以把它作為一個真正的資料儲存平臺來使用。

我們做了一些早期的測試,並把效能作為主要的決策因素,因為這在當時是(現在也還是)我們的一個大問題。我們對Redis的總體效能感到非常震撼,在經過一些討論後,我們決定要使用Redis作為網站的主資料庫。

此前該網站使用傳統的LAMP架構編寫而成。它用到了Linux,Perl,MySQL和Memcached。過渡過程顯然是有一些難度的。實施過程有個折中:我們在架構中保留了MySQL,而且事後對此我真的很高興我們這樣做了。我們的網站並沒有直接去讀取MySQL資料庫,但我們可以用它來做類似於填充新的列表或雜湊之類的事情,以及我們沒有預見到的一些功能。我們更多地是用MySQL來實現現有的資料查詢,Redis則用於網站。

我們開始用它做開發之後不久,我們很快認為我們做出了正確的決定。然後在開發了一個月左右的時間後,我們準備重新審視我們的決定,但很快就覺得沒問題。這真的是一個很適合我們應用案例的技術。

 

賈斯汀:為什麼這樣說呢?在評估它是否是一個很好的決定的問題上,你們主要看哪些因素?

埃裡克:很明顯,易於開發是一個重大的因素,尤其是當你像這樣重構整個專案的時候。幸運的是,Redis的資料結構和我們在做的工作匹配得很好。

YouPorn從根本上來說,主要是視訊和物件的列表,無論是評論、喜歡、最受好評的影片,或觀看次數最多的視訊。這些都是列表和物件,顯然很容易對映到雜湊表裡。我們也使用其他的一些資料型別,但我不得不說,我們使用的90%左右都會落到有序集合或雜湊的結構裡。

 

賈斯汀:決定使用Redis後,需要多久才能真正進行實施並使之生效?

埃裡克:說實話,在當時我們還在提升團隊能力。就像我說的,這是一個全新的專案,所以在起始階段主要只有我和另外一個人。

我得說,在大約四個星期之內,我們就做出了網站原型的相當一部分。我們做好了首頁,所有的主要頁面,以及大部分的視訊頁面。你還可以檢視評論 – 儘管那時候你還不可以增加評論 – 很多事只是兩個人在短短的四個星期完成。這個時間表還包括了學習新的框架(那時候用了Symphony),所以說我們啟動和運轉都是很快的。

 

賈斯汀:您正在使用的Redis例項有多少個?

埃裡克:我沒有具體的數字,但應該不到10個。

 

賈斯汀:這真是令人印象深刻。你們怎麼做到只用這麼少的?

埃裡克:隨著時間的推移,我們不斷新增功能,Redis例項數也是不斷增加的,但一般來說,我們用Redis做了很多的快取工作。我們第一次推出網站的時候,我們沒有做快取。我們只是依靠Redis本身。

隨著時間的推移,我們發現以我們的標準來看伺服器執行負擔過重,所以我們開始新增某些級別的快取。我們在網站上佈署了第二個Redis節點,它用很短的快取時間來處理最流行的頁面檢視。

你還必須明白,我們也使用了Varnish,它位於Web伺服器的前端,所以網頁本身也有相當數量的快取,所以我們不會通過Redis來快取每個頁面。

 

賈斯汀:你去做架構上的決策的時候,你能否談談你是如何決定在哪裡使用Redis的,在實施過程中有沒有修正你的決策呢?

埃裡克:我想說Redis是我們知道自己會使用的熱門技術之一。它和Varnish都是我們早期就決定要用的。我們對它們的測試結果相當不錯,就像我說的,我們公司之前就用過它們,所以它們對我們來說並不是未知的東西。

要說我們有什麼修正的話,最大的變化是增加了Redis二級快取層。這降低了伺服器上每秒的查詢數,並讓我們的網路更安全了。

 

賈斯汀:你覺得實施後最大的好處是什麼?

埃裡克:我首先要說的是Redis帶來了強大的快速建立新功能的能力。其實我的意思是,不只是Redis,而是完整的開發框架帶來的,但我們已經寫了一個基於Redis的基本庫之上的很不錯的庫,這使我們能夠迅速的把新功能融合到一起。這絕對是我們所見過的最大的好處。

(編譯補充:2012年2月份,YouPorn 的技術人員 Eric Pickup 在 Google 群組宣告他們網站改用 Redis DB 後。扛住了每天1億PV瀏覽量,每秒30萬請求,已經堅持 2 周。)

 

賈斯汀:進行這種遷移的一些障礙或困難是什麼?有沒有什麼定製化的東西,你必須弄清楚然後自己來做的嗎?

埃裡克:這我得想想。實現快取層花了一些時間。就像我說的,當時伺服器負擔很重,而我們並不想為了這個問題投入越來越多的伺服器,所以構建一個解決方案花了一些時間。

其他花時間的就是需要自己去琢磨一些問題。現在,大多數使用Linux系統搭建的網站都使用MySQL作為資料儲存。 MySQL的確擁有巨大的優勢,它有大量的文件。如果你碰到一個問題,沒準兒有人在此之前已經解決過了,你會找到一堆網站上都提供了相應的資訊和建議。 Redis根本就還沒有這樣的社群。如果你想看看其他已經設定好的人寫的東西,比如他們學到了什麼,他們使用哪些設定,他們的經驗是什麼,會發現這樣的資訊很少。因為只有很少的提示和技巧,所以學習曲線上需要克服的困難就更多了。

相比MySQL,Redis的文件少得多,所以尋找尋求問題的解決辦法或其他簡單的事情,比如設定到磁碟的複製,需要多一點的時間。不過,由於Redis越來越受歡迎,文件和社群正在開始形成。

 

賈斯汀:你有任何提示或技巧想和我們的觀眾分享嗎?

埃裡克:我最想說的是最有價值的經驗中最重要的一些,可是我懂的也不多。我不是系統管理員,而最重要的很多基本都是系統管理一類的東西。我想說很容易錯過的一招是,當你設定到磁碟的複製時,如果你的磁碟是主從的叢集,你要確保每個例項之間有足夠的時間差,這樣你就不會碰上所有例項都正好同時決定寫磁碟的局面。

這很容易被忽視。我們起始時的伺服器都執行正常,但後來,當我們新增更多的伺服器的時候,我們保持了預設設定,而後來不得不去修復。這是人們可以從中受益很多的經驗之一。我是軟體開發人員,我會說最真實的經驗教訓是在系統管理層面。可我沒有足夠的資訊來真正深入探討這些問題。

 

賈斯汀:太好了。感謝您給我們這麼棒的訪談,希望Manwin集團一切順利!

埃裡克:感謝您對我的採訪。

 

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

成人網站YouPorn使用Redis之經驗談 成人網站YouPorn使用Redis之經驗談

相關文章