《大型網站技術架構》讀書筆記 - 架構的模式
大CC上周寫的讀書筆記記錄的是網絡的升級路線,其中用到的各種技術手段只是點到即止(《大型網站技術架構》讀書筆記 - 網站的技術升級路線);今天寫的第二篇筆記,討論架構的模式;這篇文章,其中主干是書中的重點筆記,分支和內容則是我展開的思考;
需要說明,模式不是萬能的,任何模式都是一定應用場景的經驗總結;離開具體的場景生搬硬套就偏離的模式總結的初衷;
分層
隨着應用框架的普及,分層的概念已經深入人心;從我們學習寫web代碼開始,框架就要求我們通過分層開發來適應框架的結構;只是到后來,才逐漸體會到分層帶來的好處;
最基本的分層一般分為以下三層:
應用層:面向終端用戶的應用;
服務層:為應用層提供服務的通用服務;
數據層:數據存儲層;
分層架構是邏輯上的,但物理上也可部署在不同的機器上。
分割
網站大了,通過分割網站的功能和業務,大而化小,將不同的模塊分布式部署,從而提高並發處理能力和功能擴展能力;
分布式集群
當單機負載無法滿足我們的需求時,就會考慮分布式:
分布式靜態資源 (動靜分離)
這是最為簡單的分布式,將網站中的靜態資源分離出去,部署到別的機器上, 減輕應用服務器壓力;這種分離最為簡單,而且性能提升明顯;同時,采用獨立域名,加大瀏覽器的並發加載量,讓網站更快的呈現在用戶面前;web優化中有這么一個優化順序,先前端后后台,前端優化是需要時間最少而見效最快的方式,關於具體的優化步驟和效果,可以參考大CC之前寫的這篇文章:WEB站點性能優化實踐(加載速度提升2s)
分布式應用和服務
分層和分割后的應用分布式部署,提升性能、增加網站的伸縮性和擴展性;
分布式數據和存儲
包括關系數據庫的分布式和NoSQL的分布式;關系數據庫的分布式,可以細分為分表和數據分片;數據庫的分布式不是那么簡單,阿里的OceanBase項目貌似是做到了關系數據庫的分布式;
Nosql的分布式相對簡單許多,例如新浪的redis使用場景,就是分布式存儲微博內容;關於新浪redis的分布式應用,請移步這篇文章:Redis 在新浪微博中的應用
分布式計算
以Hadoop和MapReduce為代表的分布式計算,主要應用場景為日志分析、索引建立,數據挖掘等,實時處理的分布式計算還是見得少;
分布式要注意的問題
任何事務都有其兩面性,分布式並不一定就是好的,在網絡訪問量小的時候,沒必要分布式,單機處理能大大節省運維成本;
分布式需要注意以下問題:
- 分布式服務器見通信的網絡開銷
- 服務器多了,服務器宕機概率增大
- 如何保持分布式存儲的數據的一致性,一台機器宕機后故障恢復,如何保證一致性;
- 分布式事務難以保證
- 分布式部署后,結構會復雜很多,這帶來了維護的困難
緩存
最簡單的緩存是本地緩存:有頁面緩存、前端頁面靜態化、前端頁面的片段化緩存、以及數據緩存;大CC之前介紹過一篇關於Yii的緩存配置,有興趣可以參考:Yii 的緩存(頁面緩存配置實例)
需要緩存的內容多了,單機裝不下,就得考慮分布式緩存;
反向代理也是緩存的一種,反向代理將緩存放到了應用層的前面,用戶請求還未接入到應用層,反向代理就將之前被訪問過的內容返回給用戶;
CDN也是緩存,一般由第三方服務商提供;相比反向代理,CDN這個緩存與用戶又近了一步;
下圖展示了用戶的WEB請求中會遇到的緩存;
CDN提供最基礎的緩存(靜態化的頁面和靜態資源(css、js等);
反向代理提供與CDN類似的數據;
WEB服務器的緩存提供片段化的緩存和警惕資源緩存;頁面中變化的部分則需要通過web服務器生成,其中涉及到調用應用服務器;
應用服務器中的緩存為計算結果的緩存;主要是內容緩存;基礎數據緩存;
異步
使用SEDA(分段消息驅動)設計,異步非阻塞技術,可提高系統可用性,加快網站響應速度;
異步還有個好處,就是消除並發訪問高峰;發到后台的請求通過消息隊列存起來,起到緩沖作用,后台按照其處理能力依次處理;
在實現上,單一服務器上使用多線程共享內存隊列來實現異步,在集群中,通常使用分布式消息隊列來實現,比如我們用到的MQ、ZeroQ等;
冗余
考慮到數據安全,備份必不可少;冷備份沒有什么好說的,主要是熱備,架構的設計中需要考慮數據的熱備;
自動化
自動化應該是程序員最應該掌握的基礎技能;一般而言,自動化要求的技術含量不是很高,但卻是長期實踐的經驗結晶;自動化能有效的降低公司運營成本,提升程序員的生活質量,想想就歡樂,重復的工作都交給機器來做,創造性的工作才需要人來參與嘛;自動化主題廣泛,大致包含以下方面:
發布過程自動化
自動化代碼管理
自動化測試
自動化部署
自動化監控
自動化失效轉移和恢復
自動化降級
自動化分配資源
附:思維導圖
卓越亞馬遜地址: 《大型網站技術架構》
點擊查看原圖
如果您認為閱讀這篇博客有些收獲,請點擊右下角的【推薦】按鈕。
Posted by: 大CC | 09APR,2014
博客:blog.me115.com [訂閱]
微博:新浪微博