大型網站技術架構-核心原理與案例分析

 
阿里系的書,也是講大型網站系統架構的,日常咱們老是掛在嘴邊的高性能、高可用、易擴展、安全性,這些所謂的系統非功能性指標到底如何實現,書裏面講了這些乾貨,做爲網站架構師或者哪怕是應用系統的架構師,都值得了解,也許不必定都能用上,可是等須要用的那天,你確定不會迷茫。
 
1.大型網站架構發展常見歷程: 應用/數據庫分離--->使用緩存--->應用服務器集羣--->數據庫讀寫分離--->CDN及反向代理--->使用分佈式文件系統和分佈式數據庫--->NoSQL及搜索引擎--->業務拆分,分庫--->分佈式服務
2.主要涉及的升級方案概要:橫向業務分層(應用層,服務層,數據層),縱向業務分割(購物,論壇,搜索,廣告),分佈式服務(分佈式應用和服務,分佈式靜態資源,分佈式數據和存儲,分佈式計算,分佈式文件系統),集羣服務,引入緩存(CDN,反向代理,本地緩存,分佈式緩存),異步調用(共享內存隊列),冗餘設計(主從分離熱備份,冷備份),運維自動化(自動代碼管理,自動測試,自動部署,自動安全檢測,自動監控,自動報警,自動失效轉移,自動失效回覆,自動分配資源),保證安全(防XSS,防SQL注入)
3.大型網站核心目標及實現手段:
    (一)高性能
        經過性能測試(性能測試,負載測試,壓力測試,穩定性測試)找到系統的最佳性能點,最大負載點,系統崩潰點,經過多層次對系統進行優化,主要包括:
               1:Web前端優化
                    a:瀏覽器優化(合併http請求,使用瀏覽器緩存,啓動靜態文件壓縮GZip,CSS放頁面最上面,js文件放頁面最下面,靜態資源使用獨立域名訪問減小Cookie)
                    b:CDN(Content Distriburte Network)緩存加速
                    c:反向代理實現緩存及負載均衡
               2:應用服務器性能優化
                    a:針對熱點不常常改變的數據用分佈式緩存
                    b:引入消息隊列實現異步化操做
                    c:服務器集羣
                    d:代碼優化(多線程,單例及池化,合理數據結構設計,JVM參數調優)
               3:數據庫端存儲優化
                    a:使用固態硬盤替代機械硬盤
                    b:B+和LSM樹的使用
                    c:RAID廉價磁盤冗餘陣列 和分佈式文件系統
    (二)高可用
            高可用架構主要經過數據和服務的冗餘備份及失效轉移來實現,針對應用層和服務層,採用集羣來實現,數據層採用數據複製,冗餘。主要包括:
                1:負載均衡無狀態服務進行失效轉移(失效確認,訪問轉移,數據恢復)
                2:Session一致性的管理(Session複製,Session綁定,利用Cookie記錄Session,專門的Session服務器實現狀態分離)
                3:經常使用策略:分級管理,超時設置,異步調用,服務降級,冪等性設計
                4:數據冷備份和熱備份
                5:強調藉助系統監控來保證高可用,經過手機服務日誌信息,客戶端瀏覽器日誌,服務器性能參數(system load,內存佔用,磁盤IO,網絡IO)進行系統報警,並作失效轉移及自動優雅降級等處理。
    (三)易伸縮
            指不須要改變網站的軟硬件設計,僅僅經過改變部署的服務器數量就能夠擴大或縮小服務處理能力。伸縮性包括應用服務器集羣伸縮,緩存數據服務器集羣伸縮,存儲數據服務器集羣伸縮
            1:應用服務器集羣須要經過負載均衡來實現分發,目前有多種軟硬件負載均衡設備,包括商業產品及開源產品的,其主要經過如下幾種技術實現負載:
                    a:HTTP重定向負載,經過重定向服務器獲取真實服務IP而後訪問,須要客戶端瀏覽器兩次請求存在瓶頸,且容易被所搜引擎判斷爲SEO做弊,通常使用較少。
                    b:DNS負載,利用DNS基於地理位置進行域名解析的特色來實現分發,缺點是多級解析容易出現更新不一致的狀況。通常大型網站部分使用DNS分發到後端進行二次負載均衡分發。
                    c:反向代理負載均衡,在HTTP協議層由反向代理服務器根據負載算法向真實應用服務請求,並經過反向代理服務器再響應給用戶。缺點是反向代理服務器是全部請求的中轉站,容易發生瓶頸。
                    d:IP負載均衡,在網絡層負載均衡服務器經過修改請求的目的ip的方式將服務轉向真實服務器,而後再經過或修改源IP或將此負載服務器同時做爲網關服務器的方式將響應接收回來,最後由負載均    衡服務器返回給客戶端.缺點仍是容易存在自身瓶頸。
                    e:鏈路層負載,配置集羣下全部真實應用服務器虛擬IP和負載均衡服務器IP一致,負載均衡服務器只將請求的目的MAC地址修改爲提供服務的服務器MAX,實現三角傳輸模式,避免負載均衡服務器自身瓶頸,LVS是Linux平臺下最好的鏈路層負載均衡開源產品。
            2:緩存數據服務器集羣注意新增緩存服務器時對其餘節點的影響已經數據雪崩現象,通常來講利用一致性Hash算法(並加上虛擬層)分攤多服務器的壓力。
            3:存儲數據服務通常經過主從複製,讀寫分離,分庫,分片以及NoSQL數據庫實現
                    a:主服務器將數據同步到從服務器,讀操做及數據分析等離線操做在從服務器上執行。
                    b:不一樣業務數據表部署在不一樣的數據庫集羣上實現分庫,最大的制約是不一樣庫的表不能作join
                    c:大表數據分庫存儲實現分片。Cobar能夠實現分佈式關係數據庫訪問的代理,可是跨庫的join和事務還是難點,必要時須要經過業務來約束
                    d:NoSQL數據庫如HBase實現大數據的集羣存儲 HMaster--->HRegionServer--->HRegion--->HFile(HDFS)
            
   (四)易擴展
            對現有系統影響最小的狀況下,系統功能可持續擴展或提高的能力,各應用間較少依賴和耦合。
            1:分佈式消息隊列
            2:分佈式服務,將複雜關係和結構的系統進行拆分,按模塊獨立部署,下降系統耦合性。
                    縱向拆分:將一個大應用拆分爲多個小應用,若是新增業務較獨立,則單獨部署
                    橫向拆分:將複用的業務拆分,獨立部署,提供 分佈式服務 並保持接口的一致性供新增的業務調用.
                分佈式服務框架的設計通常包括服務提供者,服務註冊中心,服務消費者(接口訪問代理,負載均衡,遠程通訊模塊等)
 
    (五)安全性
            1:經過特殊字符轉義(消毒)和Cookie設置HttpOnly的方式實現跨站點腳本攻擊XSS的防護
            2:經過特殊字符轉義(消毒)和參數綁定執行sql的方式實現SQL注入攻擊
            3:經過表單Token,驗證碼,Referer check等手段能夠實現跨站點請求僞造CSRF的防護
            4:其餘可能的攻擊和漏洞:Error Code(Exception)太詳細,HTML註釋,文件上傳未限制,web服務路徑可遍歷
            5:加解密技術的應用
 
4.CAP原理:
一個提供數據服務的存儲系統沒法同時知足數據一致性(Consistency),數據可用性(Availibility),分區耐受性(Patition Tolerance)這三個條件
5.對於代碼版本控制,前期能夠採用分支開發,主幹發佈的形式,便於多個團隊同步協做開發,後期產品成熟穩定,在持續性升級過程當中能夠採用主幹開發,分支發佈的形式,便於管理和控制產品版本。
6.負載均衡的算法:輪詢,加權輪詢,隨機,最少鏈接,源地址散列。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 



相關文章
相關標籤/搜索