1. 程式人生 > >大型網站技術架構讀書筆記

大型網站技術架構讀書筆記

消息 負載均衡器 設計 內容分發網絡 不一致 加速 raid1 raid技術 服務分離

大型網站架構發展歷程

1、應用服務和數據服務分離。
2、使用緩存改善網站的性能
3、使用集群改善網站的並發處理能力。
4、數據庫讀寫分離
5、使用反向代理和CDN加速網站的訪問速度
6、使用分布式文件系統和分布式數據庫
7、使用NoSql數據庫和搜索引擎
8、業務拆分
9、分布式服務

大型網站的架構模式

1、分層。分層是業務系統中最常見的一種架構模式,將系統在橫向維度上切分成幾個部分,每個部分負責相對比較單一的職責,然後通過上層對下層的依賴和調用組成一個完整的系統
    
2、分割。分層是對軟件的橫向切分,而分割是在縱向方面對軟件進行切分

3、分布式。對大型網站而言,分層和分割的最終目的是為了方便切分後個模塊的分布式部署。
    分布式面臨的問題:
    1)分布式意味著服務調用必須通過網絡,這可能會對性能造成嚴重的影響
    2)服務器越多,服務宕機的概率越大
    3)數據一致性難以保證
    4)開發管理維護困難
    常用的分布式方案:
    1)分布式運用和服務。
    2)分布式靜態資源
    3)分布式數據存儲
    4)分布式計算
    
4、集群。集群部署,通過負載均衡實現故障轉移,提高服務的可用性

5、緩存。通過緩存加速數據的訪問和處理速度
    常用的緩存方式有:
    1)CDN。內容分發網絡,部署在距離用戶終端最近的網絡服務商,可以用來緩存一些靜態資源,快速返回給用戶
    2)反向代理。前端框架的一部分,部署在網站前端,當用戶請求到達數據中心時,最先訪問的就是反向代理服務器,
    3)本地緩存。入redis,將熱點數據緩存到本地緩存中,加速訪問響應速度
    4)分布式緩存
    
6、異步。異步是系統之間解耦的重要手段,將一個業務分成多個階段,各階段之間通過共享數據的方式異步執行
    異步執行的優點:
        1)提高系統的可用性。如果後端消費者服務宕機,消息會堆積在消息服務中,不會影響系統的可用性
        2)加速網站響應速度。生產服務器將業務請求處理完成後寫入到消息服務器,然後直接返回,不需要等待消費者服務處理完成,減少響應延遲
        3)消除並發訪問高峰。
        
7、數據冗余。

web前端優化策略

1、減少http請求。主要手段:合並css、合並javascript、合並圖片
2、使用瀏覽器緩存
3、啟用壓縮。在服務端對文件進行壓縮,在瀏覽器短進行解壓,從而較少同學傳輸的數據量
4、css放在最上層,javascript放在最下層
5、較少cookie傳輸太大的cookie會嚴重影響數據傳輸
6、cdn加速。cdn能夠緩存一般的靜態資源,如圖片、文件、css、javascript等
7、反向代理。

應用服務器優化策略

1、分布式緩存。緩存高頻訪問的熱點數據
    一下情況不適合使用緩存
    1)頻繁修改的數據。如果數據被頻繁修改,會出現數據寫入到緩存中還未來得及讀取就已經失效的情況,此時使用緩存會增加系統負擔
    2)沒有熱點的訪問。如果訪問不遵循二八定律,那麽緩存沒有意義
    3)數據不一致與臟讀。一般緩存會設置一定的有效時間,一旦超過有效時間,就要重新從數據庫中加載,因此運用要容忍一定時間的數據不一致性。如果運用要求數據的強一致性,可能不適合使用緩存
2、異步操作。使用異步可改善響應延遲,同時可以減小高峰期數據庫壓力
3、使用集群。將並發訪問的請求分發到多臺服務器上,避免一服務器因為負載壓力過大而相應緩慢。
4、代碼優化。
    1)多線程。在多線程編程時需要註意幾點:將對象設計為無狀態的;使用局部變量;並發訪問資源時使用鎖
    2)資源復用。資源復用有兩種模式:單例和對象池
        單例:spring構造對象默認使用單例模式
        對象池:數據庫連接池
    3)數據結構。
    4)垃圾回收
    

RAID(廉價磁盤冗余陣列)

RAID技術主要是為了磁盤的訪問延遲,增強磁盤的可用性和容錯能力
1、raid0,數據寫入緩沖區時,更具磁盤數量將數據分成N份,這些數據同時並發寫入磁盤,使得整體寫入速度是一塊磁盤的N倍。讀取時也一樣,因此RAID0具有極快的讀取和寫入速度,但是由於 不做數據備份,一塊磁盤損壞,數據完整性即遭到破壞
2、RAID1。數據寫入時,將數據寫入兩塊磁盤,這樣任意一塊磁盤損壞都不會破壞數據的完整性
3、RAID10。結合RAID0和RAID1,將所有磁盤平均分成兩份,數據同時寫入兩份磁盤。磁盤利用率低
4、RAID3。在數據寫入時,將數據分成n-1份,並發的寫入n-1份磁盤,並在第n塊磁盤記錄校驗數據,任何一塊磁盤損壞都可以利用其他n-1塊磁盤的數據修復。缺點是第n塊磁盤更容易損壞
5、RAID5。和RAID3類似,但是校驗數據不在固定寫入第n塊磁盤,而是螺旋的寫入到每塊磁盤中
6、RAID6。和RAID5類似,但是數據寫入n-2塊磁盤,並螺旋式的在兩塊磁盤寫入校驗信息

數據的一致性

強一致性:各個副本的數據在物理儲存中總是一致的
用戶一致性:數據在各物理副本上可能不一致,但是在用戶訪問的時候通過糾錯和校驗機制,保證用戶得到的是一個一致且正群的數據
最終一致性:即物理機上的數據可能是不一致的,終端用戶訪問的數據也可能是不一致的,但系統經過一段時間的自我恢復和修正,數據最終會達到一致性

應用服務器集群的伸縮性設計

1、http重定向負載均衡。利用http重定向協議實現負載均衡。即客戶端統一訪問一臺重定向負載均衡器,由負載均衡器計算得到後端服務器具體的ip地址返回給客戶端,客戶端自動重新通過ip請求具體的服務器
    優點是簡單,缺點是客戶端需要請求2次才能完成一次訪問,重定向服務器自身的處理能力可能成為性能瓶頸
    
2、DNS域名解析負載均衡。客戶端通過域名訪問DNS服務器,DNS服務解析域名獲取具體後端ip返回給客戶端,客戶端自動根據ip重新請求具體的後端服務

3、反向代理負載均衡。客戶端請求到反向代理服務器,反向代理服務器路由到具體的後端服務然後轉發請求,後端服務處理完請求之後將結果返回給反向代理服務器,然後反向代理服務器再將結果返回給客戶端

4、ip負載均衡。用戶請求落在負載均衡服務器,負載均衡服務器根據負載均衡算法得到後端服務ip,然後服務均衡服務器將請求轉發到後端,類似於反響代理負載均衡

5、數據鏈路層負載均衡。客戶端請求到負載均衡服務器,負載均衡服務器路由到後端服務,後端服務處理完請求後直接將結果返回到客戶端,也稱作直接路由

常用的負載均衡算法:

輪詢:所有請求一次被分發到各個服務器上
加權輪詢:在輪詢的基礎上根據權重將請求路由到各個服務器上,使得高性能的服務器有機會處理更多請求
隨機:請求隨機分配到不同的服務器上
最少連接:請求分發到最少處理連接的服務器上
源地址散列:通過散列算法,將相同地址的請求落到同一個服務器上

網站的安全

1、XSS攻擊
    XSS即跨站點腳本攻擊,指黑客通過篡改網頁,註入惡意的html腳本,在用戶瀏覽網頁時,控制用戶瀏覽器進行惡意操作的一種攻擊方式
    防禦方式:對用戶輸入的危險字符進行轉意、對用戶請求添加httpOnly屬性,避免被攻擊腳本竊取cookie
    
2、sql註入
    攻擊者在http請求中構造惡意sql命令,從而使數據庫sql執行時,惡意sql被一起執行
    防禦:參數綁定或者字符轉意

3、CSRF攻擊
    CSRF跨站請求偽造:攻擊者銅鼓跨站請求,以合法用戶的身份進行非法操作
    防禦:表單token、驗證碼、來源檢查
    

常用的加密手段:

1、單向散列:如MD5、SHA加密
2、對稱加密:指加密和解密使用的是同一個秘鑰。如DES算法、RC算法等
3、非對稱加密:指加密和解密用的不是同一個秘鑰,其中對外界公開的稱為公鑰,另一個只有用戶自己知道,被稱為私鑰。如RSA算法

大型網站技術架構讀書筆記