程式教學

YouTube系統架構【YouTube如此,你應該更有信心】

YouTube網站架構吐槽(上)
YouTube作為一個幾十億級別流量的視頻網站,其站點維護人員卻少之又少,這些技術人員是如何設計YouTube架構,使其具備如此強大的抗壓能力的呢,我們接著往下看。

核心技術要點

1)Apache:站點服務器
2)Python:Web應用主要是用Python搞定的
3)Linux(SuSe):操作系統(筆者:為何選用SuSe呢)
4)Mysql:數據庫
5)psyco(筆者:psyco是Python的一個C語言擴展)
6)lighttpd:視頻服務器沒有用Apache,而是選擇用了lighttpd

Web服務要點

1)使用NetScalar實現負載均衡,以及對靜態內容的緩存(筆者:NetScalar是一個Web應用優化的解決方案,常用於Web應用加速,負載均衡,Web安全功能等)
2)Apache使用mod_fast_cgi模式(筆者:fastcgi是一個進程常駐的CGI模型,主要解決傳統CGI模型令人詬病的“fork and execute”模型)
3)由一個Python服務專門負責Web請求的路由(筆者:那個時候Nginx還沒有大行其道)
4)CPU密集型的複雜計算,使用psyco用C語言搞定(筆者:Python這個技術選型真的合適麽)
5)Web層做頁面緩存
6)數據層做數據緩存
7)對於某些數據,提前計算,並形成本地緩存,但這個優化沒有大規模應用

Web服務效果

1)可以通過增加服務器來進行水平擴展
2)選擇Python,是因為它開發效率高,互聯網的時代,快速叠代和頻繁發布的能力,你懂的(筆者:為什麽不選php呢)
3)Python代碼效率不是瓶頸所在,Web服務的瓶頸在RPC請求(筆者:意思就是,Web應用的瓶頸還是在後端)
4)響應時間基本控制在100ms以內(筆者:不評論了)

視頻服務要點

1)每段視頻不止存儲在一個機器上,而是存儲在一個小集群上,集群的優勢在於A:更高的讀性能B:可用性高C:數據在線備份(筆者:那個時代,視頻的replica是比較先進的技術)
2)使用lighttpd作為視頻的Web服務器,lighttpd的優勢在於A:Apache太重B:有epoll模式C:有多進程模式,無論如何,YouTube希望同時處理更多的並發連接
3)熱門視頻放到CDN上
4)冷門視頻,這里指PV低於20的視頻,使用XXOO技術進行優化(筆者:這個地方沒有看懂,原文是“Less popular content uses YouTube servers in various colo sites”,這個“colo”沒懂是什麽意思,如果你知道,請發消息給我)
5)由於視頻的特殊性,盡量減少服務器與終端用戶之間的路由器和交換機等設備
6)采用SATA磁盤進行隨機尋道優化

視頻預覽圖要點

1)用單獨的集群存儲預覽圖(筆者:你猜的沒錯,預覽圖就是存在文件系統上的)
2)使用squid作為Apache的前端(筆者:squid是一個流行的Web服務器反向代理,常用來做靜態文件訪問加速,理解為一個緩存服務吧)
3)未來準備使用BigTable來做預覽圖的存儲

數據庫要點

1)數據庫使用Mysql,當然,用它只是來存儲元數據
2)和其他站點應用一樣,YouTube走過了單機,主從,水平切分的過程
3)主服務器用硬件條件較好的機器,使用多進程多實例模式;從服務器使用硬件條件差一點的機器,使用單實例模式
4)讀寫分離

經驗教訓

1)堅持就是勝利,解決短期問題的創新方案有風險,需要慎重。一直堅持,一定能找到長期方案
2)找到主要矛盾並集中資源解決
3)有選擇性合作,不要害怕將項目的關鍵部分外包,例如YouTube的CDN
4)keep it simple,從簡思想,不多說了
5)數據分隔,水平拆分
6)瓶頸的叠代優化,包括軟件層,操作系統層,硬件層
7)團隊是成功的基石

Leave a Reply

Your email address will not be published. Required fields are marked *