1. 程式人生 > >《大型網站技術架構之核心原理與案例分析》讀書筆記

《大型網站技術架構之核心原理與案例分析》讀書筆記

      架構!對於工作經驗尚淺的我是理應遠遠不用考慮的倆字。不過就像這本書所說到的一個好的網站架構體系,不僅僅是架構師個人的架構,而是和參與共同建設的人共同貢獻,讓參與的人覺得自己是架構體系的建設者之一,就越是自動承擔開發過程的責任和共同維護架構和改善軟體。

     所以對於這本書,千萬不要被名字嚇到,這本書讀完後,發現這就像平常遊戲中的引導操作動畫,雖然不能給你帶來太過高深的技術,但是能讓我們對於網站的組成和構造以及以後的發展會有一個清晰的思路,讓我們在解決問題的時候提供多種多樣解決方法的思路 。而不是單純的程式碼+伺服器,

敲完程式碼就快樂完事。這本書有講網站架構的演化、模式、核心要素和各種優化以及其伸縮、可擴充套件、安全的架構方案和例子。其中讓我印象最深刻的是:

網站架構的模式

 

1.分層

分層:將網站軟體系統橫向分為三層:應用層、服務層、資料層。

應用層 網站業務和檢視展示、 如網站的購物功能、搜尋顯示的結果等
服務層 為應用層提供服務支援,如使用者管理服務、購物車服務等
資料層 提供資料儲存訪問服務,如資料庫、快取、檔案、搜尋引擎等

     並且,更具實際的應用條件,其中

       應用層還可以細分為:

    (1)檢視層(美工負責)

    (2)業務邏輯層(開發負責)

       服務層也可以細分為:

     (1)資料介面層(適配各種輸入和輸出資料格式)

     (2)邏輯層(程式碼實現)

     上面的分層是邏輯上的分層,在實際上,我們可以是物理的分層把三層結構分別部署到三臺伺服器或者三類伺服器叢集上,使網站有更多的資源應對使用者訪問。在網站規模很小的時候就採取分層的架構,在網站升級的時候就擁有一個紮實的基礎可以更友好面對網站往高併發和分散式發展。

 

2.分割

分割:將軟體縱向切分,例如將大型網站分割成很小的粒度

例如: 應用層的分割:按照不同業務進行分割,由獨立團隊負責,部署在不同的伺服器上,

     應用層

分割成下面業務

購物業務
論壇業務
搜尋業務等等

如果一個業務龐大複雜的話,會繼續把該業務進行分割。

例如購物業務會繼續分割成:機票酒店業務、3c業務、小商品業務等更小的粒度。而在這個更微小的粒度上,可以繼續分割成首頁、搜尋列表、商品詳情等模組。

  

3.分散式

  分散式:使用更多的計算機將上面分層分割的業務或者模組部署在不同的伺服器上,通過遠端協同工作。

  優點:解決網站高併發問題

  缺點:

         (1) 分散式伺服器越多,宕機概率越大。而宕機導致業務流程不能走通,使網站可用性降低。

         (2) 分散式環境中,資料的同步、一致性很困難

         (3) 開發管理維護困難

總結: 分散式要根據實際情況量力而行,不能為分散式而分散式。

應用:

          (1)分散式應用和服務。便於開發和維護,提高不同應用複用共同的服務

          (2)分散式靜態資源。減輕服務負載壓力

          (3)分散式資料和儲存。Mysql等傳統資料庫結合NoSql資料庫分散式儲存巨量資料。

          (4)分散式計算。

 

4.叢集

  在上面分層分割的基礎上使用分散式把業務模組獨立部署,但是對於網站某個模組的併發量高(使用者訪問集中),例如:網站的秒殺活動頁面,還需要將其獨立部署在伺服器叢集化(例如:負載均衡)目的是為了提高系統的高可用性

 

5.快取

快取: 把資料存放在計算最近的位置加快處理速度。

應用: 

        (1)CND

        (2)反向代理

        (3)本地快取

        (4)分散式快取

優點: 減輕後端應用資料儲存和負載壓力,加快資料訪問速度。

 

6.非同步

  非同步:業務之間的消失傳遞不是同步呼叫,而是將一個業務操作分成多個階段,每個階段通過共享資料的方式非同步執行進行協助。

  而實現非同步的方式有兩種:

         (1) 單一伺服器通過多執行緒共享記憶體佇列實現非同步。

         (2) 多個伺服器通過分散式訊息佇列實現非同步。(Redis或者RabbitMQ等等訊息佇列

  而非同步架構的模式是: 生產者消費者模式

  優點: 

         (1) 提高系統可用性

         (2) 加快網站響應速度

         (3) 消除併發高峰

 

7.冗餘

冗餘: 預防某些突發情況,而部署的伺服器冗餘執行資料冗餘備份。

         (1) 伺服器冗餘執行:當某臺伺服器罷工的時候,可以把其上面的服務和資料訪問轉移到其他機器上。所以訪問、負載很少的服務也必須部署兩臺伺服器構成一個叢集

         (2) 資料冗餘備份 : 資料庫定期存檔備份實現冷備份,還要對資料庫進行主從分離,實現同步實現熱備份

 

8.自動化

自動化:在無人值守的情況下網站可以正常執行。

自動化有哪些?

         (1) 釋出網站過程自動化。

         (2) 自動化程式碼管理

         (3) 自動化測試

         (4) 自動化安全檢測

         (5) 工程程式碼自動化部署

         (6) 自動化監控+自動化報警

         (7) 自動化失效管理

         (8) 自動化失效恢復

         (9) 自動化降級

         (10)  自動化分配資源

9.安全 : 資料加密,防止xss攻擊、Sql注入,對垃圾資訊過濾,對於交易等交易模式進行風險控制。

 

         書中的技術大部分都是圍繞上面九點來開展深入分析的,不過除了這些引導性質的內容,還有書的一句話讓我深有同感:

一群優秀的人做一件他們熱愛的事情,一定能取得成功。