學習和掌握構建大型網站的架構

來源:互聯網
上載者:User

學習和掌握構建大型網站的架構,需要匯總散落的文章,梳理零散的內容。做好這項工作很有意義,但是也比較困難。我們的體會是,不妨抓住以下幾個主題,逐個分析大型網站的執行個體,然後橫向比較。

1. Database

資料存放區曆來是麻煩,尤其是需要儲存海量資料的時候,往往單個資料庫容量不夠,甚至一個資料庫叢集也不夠。常見的解決辦法是分割,譬如按使用者ID把海量資料分割成若干塊,每Block Storage到一個獨立的資料庫裡去。但是分割的做法降低了join操作的效率。

Google Bigtable的效率如何?好處是什麼,缺陷是什嗎?Bigtable對什麼樣的情景最適用?根據Bigtable原理實現的開源軟體,Hadoop/HBase的運行效率如何?

2. Cache

使用者訪問網站時,通常讀的操作比寫的操作更頻繁。為了提高讀的操作,不妨把相關內容緩衝到記憶體裡,減少Disk IO的消耗。

MemCached 最近大熱,Wikipedia, YouTube, Digg, Twitter等等大型網站都在用MemCached作為緩衝工具。SquidCache和Varnish等等工具,也與緩衝沾邊。Twitter的做法是把MemCached和Varnish結合起來,同時使用。什麼樣的內容,應該用什麼樣的緩衝工具?不同的工具間如何協調?各大網站的實際啟動並執行結果,有哪些經驗和教訓?

3. File System

有些內容,既沒必要存放在資料庫裡,也不適合存放在緩衝中,譬如log 和images。在這種情況下,我們需要檔案系統。當有海量內容需要存放在檔案系統中時,我們需要使用Distributed File System。Google File System對於什麼樣的情景適用,什麼樣的情景不適用?Distributed File System常常需要相應的鎖機制,保證並發的讀寫操作不相互幹擾。Chubby有什麼好處?什麼情形下不適用?

據說MogileFS更適合儲存大量的,但是單體尺寸不大的檔案,譬如images。而Google File System更適合存放大尺寸但是數量不多的檔案。有沒有可能把小尺寸的多個檔案,合并成一個大檔案,然後儲存到Google File System中去。在這種情況下,比較MogileFS與Google FS的效能,是否有高下之分?

4. Thread Management

一套工序通常由若干工作群組成。多線程的辦法是由一根線程全權負責整套工序的操作。另外一個辦法是把工序斬成幾段,每一段由一根或幾根線程負責,這種辦法稱為工作台。

常見的是多線程的辦法。但是工作台的做法有利於集中計算資源處理繁重的任務,避免瓶頸的出現。但是缺陷是需要在不同線程之間,傳遞記錄中間狀態的資料。什麼樣的情形適合用多線程,什麼時候用工作台?

5. Scheduler

同一個網站通常會提供多種服務,不同的服務需要調用不同的商務邏輯。有些商務邏輯可以在同一台伺服器上完成,但是當商務邏輯複雜的時候,需要調用多台伺服器合作完成。不同服務的受眾對象不同,流量也不同,不同時段的流量也不同,同一時段不同服務的流量也不同,所以需要動態地分配計算資源。這是 scheduler的工作。

Scheduler給不同伺服器分配工作時,最簡單的辦法是啟動預先安裝在該伺服器上的相關程式。由於不能保證每個程式都十分完美,當一個程式發生錯誤時,應當避免整個伺服器因此而崩潰,影響其它工作的正常進行。是否需要動用virtual machine,實現各個不同工作之間相互隔絕?

6. Signal Flow and Data Flow

大型網站後台系統經常由眾多伺服器組成,伺服器與伺服器之間時不時會發生資料交換,譬如Web Server解析完使用者請求後,把請求轉寄給某一台App Server,這一台App Server完成了部分工作後,把中間資料轉寄給下一台App Server。而第二台App Server完成任務後,整個工作就結束了,結果應該返回給Web Server。

問題是如何讓第一台App Server如何知道應該把中間結果給第二台App Server,而第二台App Server又如何知道它的目的地是Web Server?一個比較有效率的做法,是區別資料流和控制流程。Server與Server之間常設通道,專供控制流程使用,傳遞指令去控制資料流的發送。資料流不佔用控制流程通道,只有在需要時,才建立資料流的通道。

控制流程和資料流的組織,需要結合具體的商務邏輯,才能最佳化設計,減少頻寬消耗,縮短資料轉送的時間。

7. Instrumentation

網站後台各個部分是否運轉正常,哪裡是瓶頸,哪裡空閑。這些都需要即時監控。不僅及時避免整個後台系統的崩潰,而且可以分析各個部分啟動並執行規律,從而找到最佳化系統的途徑。

問題是,應該選用什麼樣的監控工具,才能夠盡量減少對系統程式的幹擾,同時提供有價值的資訊?

8. Anti-abuse

通常網站面對的是形形色色的使用者,絕大多數使用者的行為是友好的,但是不排除少數使用者蓄意惡作劇。如果事先沒有設計防範措施,少數惡意使用者的胡作非為,會干擾其他使用者享受正常的服務。

問題是,如何防範並且及時制止惡意行為的發生?

9. Exception Handling

不論預先設想有多周密,實際運行時,總會遇到這樣那樣的意外情況。譬如敏感詞的出現,往往事先沒有徵兆。所以,在設計系統架構時,應該給網管提供必要工具,應付突發事件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.