① 如何搭建大型網站系統
程序員們都希望能通過自己的努力學習,技術提升,拿到更好的收入,技術提升和高收入雖然不是輕易就能實現的,但總是有章可循。
一個成熟的大型網站(如淘寶、京東等)的系統架構並不是開始設計就具備完整的高性能、高可用、安全等特性,它總是隨著用戶量的增加,業務功能的擴展逐漸演變完善的,在這個過程中,開發模式、技術架構、設計思想也發生了很大的變化,就連技術人員也從幾個人發展到一個部門甚至一條產品線。所以成熟的系統架構是隨業務擴展而完善出來的,並不是一蹴而就;不同業務特徵的系統,會有各自的側重點,例如淘寶,要解決海量的商品信息的搜索、下單、支付,例如騰訊,要解決數億的用戶實時消息傳輸,網路它要處理海量的搜索請求,他們都有各自的業務特性,系統架構也有所不同。盡管如此我們也可以從這些不同的網站背景下,找出其中共用的技術,這些技術和手段可以廣泛運行在大型網站系統的架構中,下面就通過介紹大型網站系統的演化過程,來認識這些技術和手段。
一、最開始的網站架構
最初的架構,應散基用程序、資料庫、文件都部署在一台伺服器上,如圖:
二、應用、數據、文件分離
隨著業務的擴展,一台伺服器已經不能滿足性能需求,故將應用程序、資料庫、文件各自部署在獨立的伺服器上,並且根據伺服器的用途配置不同的硬體,達到最佳的性能效果。
三、利用緩存改善網站性能
在硬體優化性能的同時,同時也通過軟體進行性能優化,在大部分的網站系統中,都會利用緩存技術改善系統的性能,使用緩存主要源於熱點數據的存在,大部分網站訪問都遵循28原則(即80%的訪問請求,最終落在20%的數據上),所以我們可以對熱點數據進行緩存,減少這些數據的訪問路徑,提高用戶體驗。
緩存實現常見的方式是本地緩存、分布式緩存。當然還有CDN、反向代理等,這個後面再講。本地緩存,顧名思義是將數據緩存在應用伺服器本地,可以存在內存中,也可以存在文件,OSCache就是常用的本地緩存組件。本地緩存的特點是速度快,但沖薯謹因為本地空間有限所以緩存數據量也有限。分布式緩存的特點是,可以緩存海量的數據,並且擴展非常容易,在門戶類網站中常常被使用,速度按理沒有本地緩存快,常用的分布式緩存是Memcached、Redis。
四、使用集群改善應用伺服器性能
應用伺服器作為網站的入口,會承擔大量的請求,我們往往通過應用伺服器集群來分擔請求數。應用伺服器前面部署負載均衡伺服器調度用戶請求,根據分發策略將請求分發到多個應用伺服器節點。
常用的負載均衡技術硬體的有F5,價格比較貴,軟體的有LVS、Nginx、HAProxy。LVS是四層負載均衡,根據目標地址和埠選擇內部伺服器,Nginx是七層負載均衡和HAProxy支持四層、七層負載均衡,可以根據報文內容選擇內部伺服器,因此LVS分發路徑優於Nginx和HAProxy,性能要高些,而Nginx和HAProxy則更具配置性,如可以用來做動靜分離(根據請求報文特徵,選擇靜態資源伺服器還是應用伺服器)。
五、資料庫讀寫分離和分庫分表
隨著用戶量的增加,資料庫成為最大的瓶頸,改善資料庫性能常用的手段是進行讀寫分離以及分表,讀寫分離顧名思義就是將資料庫分為讀庫和寫庫,通過主備功能實現數據同步。分庫分表則分為水平切分和垂直切分,水平切換則是對一個資料庫特大的表進行拆分,例如用戶表。垂直切分則是根據業務不同來切換,如用戶業務、商品業務相關的表放在不同的資料庫中。
六、使用CDN和反向代理提高網站性能
假如我們的伺服器都部署在成都的機房,對於四川的用戶來說訪問是較快的,而對於北京的用戶訪問是較慢的,這是由於四川和北京分別屬於電信和聯通的不同發達地區,北京用戶訪問需要通過互聯路由器經過較長的路徑才能訪問到成都的伺服器,返迴路徑也一樣,所以數據傳輸時間比較長。對於這種情況,常常使用CDN解決,CDN將數據內容緩存到運營商的機房,用戶訪問時先從最近的運營商獲取數據,這樣大大減少了網路訪問的路徑。比較專業的CDN運營商有藍汛、網宿。
而反向代理,則是部署在網站的機房,當用戶請求達到時首先訪問反向代理伺服器,反向代理伺服器將緩存的數據返回給用戶,如果沒有沒有緩手冊存數據才會繼續走應用伺服器獲取,也減少了獲取數據的成本。反向代理有Squid,Nginx。
七、使用分布式文件系統
用戶一天天增加,業務量越來越大,產生的文件越來越多,單台的文件伺服器已經不能滿足需求。需要分布式的文件系統支撐。常用的分布式文件系統有NFS。
八、使用NoSql和搜索引擎
對於海量數據的查詢,我們使用nosql資料庫加上搜索引擎可以達到更好的性能。並不是所有的數據都要放在關系型數據中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。
九、將應用伺服器進行業務拆分
隨著業務進一步擴展,應用程序變得非常臃腫,這時我們需要將應用程序進行業務拆分,如網路分為新聞、網頁、圖片等業務。每個業務應用負責相對獨立的業務運作。業務之間通過消息進行通信或者同享資料庫來實現。
十、搭建分布式服務
這時我們發現各個業務應用都會使用到一些基本的業務服務,例如用戶服務、訂單服務、支付服務、安全服務,這些服務是支撐各業務應用的基本要素。我們將這些服務抽取出來利用分部式服務框架搭建分布式服務。淘寶的Dubbo是一個不錯的選擇。
大型網站的架構是根據業務需求不斷完善的,根據不同的業務特徵會做特定的設計和考慮,本文只是講述一個常規大型網站會涉及的一些技術和手段。
如果你還有這些疑問,成熟的網站架構師需要學什麼核心技能?Java程序員如何晉升為互聯網架構師?Java語言在架構搭建中扮演什麼角色?怎樣成為年收入幾十萬的架構師?歡迎來電來訪昌平北大青鳥java培訓。
② 大型網站技術架構 核心原理與案例分析 有用么
編輯推薦
編輯
本書作者是阿里巴巴網站構建的親歷者,擁有核心技術部門的一線工作經驗,直接體驗了大型網站構建與發展過程中的種種生與死,蛻與變,見證了一個網站架構從幼稚走向成熟穩定的歷程。
沒有晦澀難懂的術語,沒有詰屈聱牙的文句,沒有故弄玄虛的觀點……
明明白白的語句,清清楚楚的文法,干凈利落的建議——讓讀者直接體會網站架構的緊要處,不容馬虎的關鍵點——這恰好是一個優秀的網站架構所必備的要素。
如果說「水不在深,有龍則靈」,那麼對於想了解網站架構的讀者而言,這本書恰好是「書不在多,有它則行!」
還猶豫什麼呢?
內容簡介
編輯
本書通過梳理大型網站技術發展歷程,剖析大型網站技術架構模式,深入講述大型互聯網架構設計的核心原理,並通過一組典型網站技術架構設計案例,為讀者呈現一幅包括技術選型、架構設計、性能優化、Web 安全、系統發布、運維監控等在內的大型網站開發全景視圖。
本書不僅適用於指導網站工程師、架構師進行網站技術架構設計,也可用於指導產品經理、項目經理、測試運維人員等了解網站技術架構的基礎概念;還可供包括企業系統開發人員在內的各類軟體開發從業人員借鑒,了解大型網站的解決方案和開發理念。
③ 大型網站架構模式有哪些
1.分布式
對於大型網站,分層和分割的一個主要目的是為了切分後的模塊便於分布式部署,即將不同模塊部署在不同的伺服器上,通過遠程調用協同工作。分布式意味著可以使用更多的計算機完成同樣的功能,計算機越多,CPU、內存、存儲資源也就越多,能夠處理的並發訪問和數據量就越大,進而能夠為更多的用戶提供服務。
2.分層
分層是企業應用系統中最常見的一種架構模式,將系統在橫向維度上切分成幾個部分,每個部分負責一部分相對比較單一的職責,然後通過上層對下層的依賴和調用組成一個完整的系統。
分層結構在計算機世界中無處不在,網路的7層通信協議是一種分層結構;計算機硬體、操作系統、應用軟體也可以看作是一種分層結構。在大型網站架構中也採用分層結構,將網站軟體系統分為應用層、服務層、數據層。
3.分割
如果說分層是將軟體在橫向方面進行切分,那麼分割就是在縱向方面對軟體進行切分。
網站越大,功能越復雜,服務和數據處理的種類也越多,將這些不同的功能和服務分割開來,包裝成高內聚低耦合的模塊單元,一方面有助於軟體的開發和維護;另一方面,便於不同模塊的分布式部署,提高網站的並發處理能力和功能擴展能力。
4.集群
使用分布式雖然已經將分層和分割後的模塊獨立部署,但是對於用戶訪問集中的模塊(比如網站的首頁),還需要將獨立部署的伺服器集群化,即多台伺服器部署相同應用構成一個集群,通過負載均衡設備共同對外提供服務。
5.緩存
緩存就是將數據存放在距離計算最近的位置以加快處理速度。緩存是改善軟體性能的第一手段,現代CPU越來越快的一個重要因素就是使用了更多的緩存,在復雜的軟體設計中,緩存幾乎無處不在。大型網站架構設計在很多方面都使用了緩存設計。
6.非同步
計算機軟體發展的一個重要目標和驅動力是降低軟體耦合性。事物之間直接關系越少,就越少被彼此影響,越可以獨立發展。大型網站架構中,系統解耦合的手段除了前面提到的分層、分割、分布等,還有一個重要手段是非同步,業務之間的消息傳遞不是同步調用,而是將一個業務操作分成多個階段,每個階段之間通過共享數據的方式非同步執行進行協作。