說說大型網站的架構模式

在建筑領域是這樣描述模式的:每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題以及該問題的解決方案核心。我們可以一次又一次地使用這個方案而不必做重復的工作。模式的關鍵是可重復性,問題和場景的可重復性帶來解決方案的可重復性。

目前的網站架構有一些共同的模式(思路與解決方案),它們已經被大型網站一再驗證,所以可以指導我們的架構設計。

1 分層

在橫向維度上把系統(tǒng)劃分為 3 層,每一層負責相對單一的職責,通過上層對下層的依賴與調用來構成一個完整的系統(tǒng)。

分層 描述
應用層 負責具體業(yè)務與視圖展示。
服務層 為應用層提供服務支持。
數據層 提供數據訪問服務。

只要維持調用的接口不變,各層就可以根據具體問題,獨立演化發(fā)展。

在設計階段,必須合理的規(guī)劃各層之間的邊界和接口。在開發(fā)階段,必須嚴格遵循分層之間的約束,禁止跨層次調用(如應用層調服務層)以及逆向調用(如數據層調應用層)。

在實踐中,這些分層還可以進一步細分。比如應用層再分為視圖層與業(yè)務邏輯層;服務層分為數據接口層與邏輯處理層。

分層架構是邏輯上的劃分,所以可以部署在同一臺物理服務器上。但隨著業(yè)務的發(fā)展,必須會對這些層進行分離部署,即把這些層分別部署在不同的物理服務器上。

分層架構對于以后支持高并發(fā)并朝著分布式方向發(fā)展很重要,所以在早期,就應該采用分層架構哦O(∩_∩)O~

2 分割

分割指的是從縱向方面進行劃分。

把不同的業(yè)務服務包裝成高內聚低耦合的模塊單元,這樣不僅可以有助于開發(fā)和維護,也便于實現分布式部署。

3 分布式

分層與分割的目的之一是為了把這些模塊進行分布式部署,即把這些模塊部署在不同的服務器上,然后通過遠程調用協同工作。這就意味著有更多的服務器來提供同樣的服務,資源越多,那么支持的并發(fā)訪問量和數據量就越大,進而可以為更多的用戶服務。

但分布式也有一些缺點:

  1. 必須通過網絡調用服務,而這可能會對性能造成嚴重影響。
  2. 服務器越多,宕機的可能性就越大,造成可用性降低。
  3. 保持數據一致性很困難。
  4. 開發(fā)、管理與維護困難。

所以要根據實際情況量力而行哦O(∩_∩)O~

目前有這些分布式方案:

  1. 分布式應用與服務 - 可以改善性能和并發(fā)性、加快開發(fā)與發(fā)布速度、減少數據庫連接和不同的應用復用共同的服務。

  2. 分布式靜態(tài)資源 - 動靜分離,即把 js/css/圖片等靜態(tài)資源部署在獨立域名下,這不僅可以加快瀏覽器的并發(fā)加載速度,而且還可以讓負責用戶體驗的團隊獨立開發(fā)與維護這些靜態(tài)資源,實現分工合作。

  3. 分布式數據和存儲 - 大型網站需要處理以 P 為單位的海量數據,單臺計算機無法提供這么大的存儲空間,所以才要分布式存儲。像各種 NoSQL 產品幾乎都是分布式的。

  4. 分布式計算 - 處理在線業(yè)務之外,還有很大的一部分是用戶直觀感受不到的后臺業(yè)務,諸如構建搜索引擎索引、數據分析統(tǒng)計等。現在普遍使用 Hadoop 和 MapReduce 分布式計算框架進行這一類的批處理計算。它們的特點是移動計算,即把計算程序分發(fā)到數據所在的位置以加速計算工作。

4 集群

要對用戶訪問集中的模塊所部署的服務器建立集群,即多臺服務器部署相同應用,然后通過負載均衡設備共同對外提供服務。

這樣可以提供更好的并發(fā)能力,如果因為業(yè)務發(fā)展有了更多的并發(fā)用戶的時候,我們只要向集群中增加新機器即可。而且可以提高系統(tǒng)的可用性,所以在早期,也要至少部署兩臺服務器以構建一個集群,保證可用性。

5 緩存

緩存指的是把數據存放在距離計算最近的位置以加快處理速度,它是改善性能的第一手段。有這些緩存方法:

  1. CDN - 內容分發(fā)網絡,用戶的請求會送達距離他最近的網絡服務商,這里緩存了網站的一些靜態(tài)資源,如果用戶的請求是這些資源,那么就可以很快地響應啦O(∩_∩)O~

  2. 反向代理 - 是前端架構的一部分,它部署在前端,當用戶的請求到達網站時,會最先訪問反向代理服務器,這些也緩存了網站的一些靜態(tài)資源,所以也會很快響應用戶的啦O(∩_∩)O~

  3. 本地緩存 - 緩存著熱點數據,應用程序可以直接從本機內存中讀取數據。

  4. 分布式緩存 - 如果網站的數據量非常龐大,那么即使只是緩存一小部分,所需要的內存也不是單機能夠承受的。為了解決這一問題,我們可以建立分布式緩存集群,應用程序通過網絡來訪問緩存數據。


使用緩存的前提條件是:

  1. 數據訪問的熱點并不均衡,即某些數據會被頻繁地訪問到,這些數據必須放入內存。
  2. 數據在某一個時間段內是有效的。如果很快過期,然后緩存數據就會因為失效而出現臟讀問題。

6 異步

異步指的是把一個業(yè)務分為多個階段,每個階段通過共享數據進行協作工作。

單個服務器內可以通過多線程共享內存隊列的方式實現異步;而在分布式系統(tǒng)中,多個服務器集群是通過分布式消息隊列實現異步的。

異步架構就是典型的生產者/消費者模式。它們不直接調用,只是共享數據結構。

異步消息隊列有這些特性:

  1. 提高系統(tǒng)可用性 - 消費者服務器發(fā)送故障,數據會在消息隊列服務器存儲堆積,但生產者服務器可以繼續(xù)處理業(yè)務,系統(tǒng)整體表現為正常。待消費者服務器恢復后,就可以繼續(xù)處理消息處理隊列中的數據。

  2. 加快響應速度 - 生產者服務器處理完業(yè)務請求后,就把數據寫入消息隊列,無須等待消費者服務器響應即可返回。

  3. 消除并發(fā)訪問高峰 - 消息隊列服務器可以吸納高峰期突然增加的訪問請求數據,然后由消費者服務器依次處理,這樣不會對整個負載造成太大的壓力。

注意:異步方式會對用戶體驗和業(yè)務流程造成影響,所以需要得到產品設計方面的支持。

7 冗余

服務器隨時可能出現故障,特別是服務器的規(guī)模比較大時,某臺服務器出現宕機幾乎是必然事件。所以為了保證服務與數據,就必須有一定數量的服務器冗余運行,數據冗余備份,這樣當某臺服務器宕機時,可以把其上的服務與數據轉移到其他機器上。

即使是訪問與負載很小的服務,也必須至少部署兩臺服務器構造一個小的集群,這樣才能實現服務的高可用。數據庫除了冷備份(定期備份、存檔保存)外,還要對數據庫進行主從分離,做熱備份。

為了防范地震等不可抗力導致服務癱瘓的情況,一些大型網站會對整個數據中心進行備份,在全球范圍內部署災備數據中心。程序與數據會實時同步到多個災備數據中心。

8 自動化

目前的自動化主要集中在發(fā)布與運行維護上。

很多故障都出現在發(fā)布環(huán)節(jié),所以實現發(fā)布自動化可以有效地減少故障。包括這些環(huán)節(jié):

  1. 自動化代碼管理 - 開發(fā)者只要提交自己代碼,系統(tǒng)就會自動為其創(chuàng)建開發(fā)分支,自動進行代碼合并。
  2. 自動化測試 - 系統(tǒng)自動把代碼部署到測試環(huán)境,啟動自動化測試用例進行測試,向相關人員發(fā)送測試報告,向系統(tǒng)反饋測試結果。
  3. 自動化安全檢測 - 對代碼進行靜態(tài)安全掃描并部署到安全測試環(huán)境,進行安全攻擊測試,評估系統(tǒng)的安全性。
  4. 自動化部署 - 把代碼自動部署到線上生產環(huán)境。
  5. 自動化監(jiān)控 - 對服務器進行心跳檢測,監(jiān)控它的各項性能指標和應用程序的關鍵數據指標。如果發(fā)現異常,就進行報警。然后進行失效轉移,把失效的服務器從集群中隔離。故障消除后,在進行失效恢復。遇到訪問高峰,進行降級,即拒絕部分請求以及關閉一部分不重要的服務。必要時,還需要主動分配資源,把空閑的資源分配給重要的服務。

正確地使用模式,可以用更少的時間開發(fā)出更好的系統(tǒng),而且也使設計者的水平達到一個更高的水平。但要注意:模式受到應用場景的限制,對系統(tǒng)的約束也很多,所以要具體問題具體分析。

只有對問題有著深刻理解的基礎上進行創(chuàng)新,才能有好的設計哦O(∩_∩)O~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容

  • 可伸縮性架構指的是:不改變網站的軟硬件設計,只通過改變部署的服務器數量就可以擴大或縮小網站的服務處理能力。 大型網...
    deniro閱讀 2,741評論 4 52
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 134,826評論 18 139
  • 網站的可用性強調的是對最終用戶的使用價值。它牽動著人們的神經,直接影響著公司的形象和利益,許多互聯網公司都將網站的...
    deniro閱讀 3,671評論 0 18
  • 性能既是客觀指標,諸如響應時間、吞吐量等技術指標;又是實際參與者的主觀感受。 1 性能測試 性能測試是性能優(yōu)化的前...
    deniro閱讀 1,378評論 2 15
  • 大型網站架構 網站架構包括:前端架構+應用層架構+服務層架構+存儲層架構+后臺架構+數據中心機房架構+安全架構+數...
    運維開發(fā)筆記閱讀 1,126評論 0 7