大型網站技術架構(二)--大型網站架構演化

做者:13
GitHub:https://github.com/ZHENFENG13
版權聲明:本文爲原創文章,未經容許不得轉載。
此篇已收錄至《大型網站技術架構:核心原理與案例分析》讀書筆記系列,點擊訪問該目錄獲取完整內容。html

何謂大型網站

大型網站系統特色:git

ps:符合這些要求的所謂大型網站真的不多,可遇而不可求也。github

說到大型網站,就要先理一下大型網站的特色:高併發,大流量,高可用,海量數據等,本文根據《大型網站技術架構》一書整理以下:redis

初始階段的網站架構

初始階段都比較簡單,一般一臺服務器就能夠搞定一個網站了,ssm-demo系列既是如此,一臺服務器搞定全部演示站點,後期逐漸優化,向更優的方向進化!
1sql

應用服務和數據服務分離

隨着網站業務的發展,一臺服務器逐漸不能知足需求,這時候就須要將應用和數據分離:
2mongodb

使用緩存改善網站性能

如今的80%的業務訪問都會集中在20%的數據上,網站基本上都會使用緩存,前文中也有關於緩存的相關教程,咱們的perfect-ssm項目目前處於這個階段中,經過緩存層的接入,減小部分對數據庫的直接壓力,提高網站的響應性能。
3數據庫

使用應用服務器集羣改善網站的併發處理能力

由於單一應用服務器可以處理的請求鏈接有限,在網站訪問高峯時期,應用服務器會成爲整個網站的瓶頸,所以使用負載均衡處理器勢在必然,經過負載均衡調度服務器,可未來自瀏覽器的訪問請求分發到應用的集羣中的任何一臺服務器上,進一步將壓力分擔掉。
4瀏覽器

數據庫讀寫分離

當用戶達到必定規模後,數據庫由於負載壓力太高而成爲網站的瓶頸,而目前主流的數據庫都提供主從熱備功能,經過配置兩臺數據庫主從關係,能夠將一臺數據庫的數據更新同步到另外一臺服務器上,網站利用數據庫這一功能實現數據庫讀寫分離,從而改善數據庫負載壓力。
5
目前不少雲服務商都有相似的產品提供,固然,也能夠本身搭建數據庫集羣並在業務代碼中進行讀寫分離的實現(有時間會整理相關教程)。緩存

使用反向代理和CDN加上網站相應

提升網站的訪問速度,主要手段有使用CDN和反向代理。
6
CDN和反向代理的基本原理都是緩存,區別在於CDN部署在網絡提供商的機房,而反向代理是部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的反向代理,若是反向代理緩存着用戶請求的資源,則直接返回給用戶。服務器

使用分佈式文件系統和分佈式數據庫系統

任何強大的單一服務器都知足不了大型網站持續增加的業務需求。
分佈式數據庫時網站數據庫拆分的最後手段,只用在單表數據規模很是大的時候才使用。不到不得已時,網站更經常使用的數據庫拆分手段是業務拆分,將不一樣業務的數據部署在不一樣的物理服務器上。
7

使用NoSQL和搜索引擎

8
搜素引擎也基本已經造成如今大型網站必須提供的功能了,網站須要採用一些非關係數據庫技術如NoSQL和非數據庫查詢技術如搜索引擎。各類開源產品不斷涌現,遍地開花:redis、mongodb、solr、elastic stack、hadoop、spark......

關於搜索引擎的接入,目前考慮在My-Blog項目中接入elastic search,優化文章搜索模塊。

nosql

業務拆分

大型網站爲了應對日益複雜的業務場景,經過使用分而治之的手段將真個網站業務拆分紅不一樣的產品線。

具體到技術上,也會根據產品線話費,將一個網站拆分紅許多不一樣的應用,每一個應用獨立部署維護。應用之間能夠經過超連接創建管理,也能夠經過消息隊列進行數據分發,固然最多的仍是經過訪問同一個數據存儲系統來構成一個關聯的完整系統。
9

分佈式服務

因爲每個應用系統都須要執行許多相同的業務操做,好比用戶管理,session管理,那麼能夠將這些公用的業務提取出來,獨立部署。
10

本章節思惟導圖

偷懶一下,直接用了前一篇文章的圖:
11

整理圖片整理的要吐血了。

首發於個人我的博客.

相關文章
相關標籤/搜索