大型網站核心的架構(6-1)基本要素


1.性能
        優化網站性能的手段有很多,從用戶瀏覽器到數據庫,影響用戶請求的所有環節都可以進行性能優化。
a.瀏覽器端

            瀏覽器緩存
                (對於一個網站而言,CSS,javascript等靜態文件的更改頻率較低,而這些資源又是每次請求都需要的資源,如果將這些文件緩存在瀏覽器端,將很好的提升性能。可以通過設置Cache-control和expires屬性。
                   有時javascript修改之後需要及時的應用到客戶端,此時我們一般不修改javascript 內容,而是增加新的javascript 文件,並修改html中對javascript的應用路徑。
                使用瀏覽器緩存的網站在更新靜態資源的時候,一般採用批量更新,爲了防止一次更新造成大量緩存失效,增加對服務器和網絡IO 的負載,一般每個文件的更新過程中需要有短暫的時間間隔。)

            頁面壓縮
                   (主要用來解決網絡堵塞的問題,但由於文件需要在服務氣端進行壓縮,和瀏覽器端進行解壓縮,所以將會耗費服務器和瀏覽器的資源,使用頁面壓縮可以有效的減少通信傳輸的數據量,文本類的壓縮效率更是達到80%)
            合理佈局頁面
            (css在上,javascript 在下,因爲css 需要全部下載完成,瀏覽器纔會進行渲染,而javascript則是在加載的過程中就會立即執行,有時會贊成頁面加載緩慢)

            減少cookie傳輸
            (cookie 中包含有大量的信息,所以大量的cookie 傳輸會造成網絡IO的堵塞)

            CDN 
        (將網站靜態內容分發至離用戶最近的網絡服務商機房,使用戶通過最短的路徑獲取數據)。
            
            反向代理
            (緩存熱點文件,加快請求響應速度,減輕應用服務器的壓力)

b.應用服務器端(緩存在內存中的熱點數據處理用戶請求,將數據存儲在相對較高訪問速度的存儲介質中)
            本地緩存
            (將讀寫率高的數據換存在本地的高效存儲介質中)

            分佈式緩存服務器
            (memcahe緩存服務器和Jboss cache)

            通過異步操作
               (使用消息隊列將調用異步化,可改善網站的可擴展性,並提高網站的及時響應速度)

            利用集羣來提供服務
                (將單一的服務部署多分,通過負載均衡共同完成功能的調用,減少網站的高併發性)

            代碼上可以使用多線程,單例,資源池,改善內存管理等手段優化性能

c.數據庫服務器端
            索引
            緩存
            SQL 優化
            NoSql
        衡量網站性能有一系列的指標,重要的有響應時間,TPS ,系統性能計數器等,通過監控這些指標可以分析系統的瓶頸,預測網站容量,並對異常指標進行報警,保障系統可用性。

2.高可用性
        設計的目標就是當服務器發生宕機的時候,服務或者應用依然可用,網站高可用性的主要手段是冗餘,應用部署在多臺服務器上同時提供訪問,數據存儲在多臺服務器上互相備份,任何一臺機器發生宕機都不會影響應用的整體可用,也不會導致數據的丟失。
a.應用服務器
           多臺應用服務器通過負載均衡設備組成一個集羣共同對外提供服務。(前提條件是:應用服務器上不能保存會話信息。否則服務器宕機,會話丟失,即使用戶請求轉發到其他服務器上也無法完成業務處理)。
b.存儲服務器
            對數據進行實時備份,當服務器宕機時,需要將數據訪問轉移到可用服務器上。並進行數據恢復以保證繼續有服務器宕機的時候數據依然可用。

3.可伸縮性
        大型網站需要面對大量用戶的高併發訪問和存儲海量數據。所謂的伸縮性是指通過不斷的往集羣中增加服務器的手段來緩解不斷上升的用戶併發訪問壓力和不斷增長的數據存儲需求。
        衡量標準:
               1.是否可以用多臺服務器構建集羣。
               2.是否容易想集羣中增加新的服務器。
               3.加入新的服務器是否可以提供和原來服務器無差別的服務。
               4.集羣中容乃的總素是否有限制。

a.應用服務器集羣
        只要應用服務器中不保存數據,那麼所有的應用服務器都是對等的,通過使用合適的負載均衡設備就可以向集羣中不斷的加入服務器。

b.緩存服務器集羣
        加入新的緩存服務器可能回導致緩存路由的失效,進而導致集羣中大部分緩存數據無法訪問。需要改進緩存路由算法保證緩存數據的可訪問性。
c.關係數據庫
        雖然關係型數據庫支撐數據複製和主熱備份等機制,但是很難做到大規模齊全的可伸縮性,因此關係型數據庫的集羣可伸縮性方案必須是在數據庫之外實現的,通過路由分區等將部署有多個數據庫的服務器組成一個集羣。
d.nosql
        自帶良好性伸縮性。

4.可擴展性
網站的功能可擴展性。
        衡量標準: 
                在網站增加新的業務產品時,是否可以實現對現有產品的透明無影響,不需要任何改動,或者極少改動現有業務就可以上線。
                產品的耦合度是否低。改動一個產品是否會影響其他產品。
        解決方案:
                事件驅動架構和分佈式服務。
a.事件驅動架構
        通常利用消息隊列實現,將用戶請求和其他業務事件構成消息發不到消息隊列中。消息的處理者作爲消費者,從消息隊列中獲取消息進行處理。通過這種方式將消息產生和消息處理分開,可以透明的增加新的消息生產者任務和消息消費者任務。

b.分佈式服務
         將業務和可服用服務分離開來,通過分佈式服務框架調用。新增產品可以調用可服用的服務,實現自身的業務邏輯,而對現有產品無影響。

5.安全性
          注意系統的xss ,sql 注入等網站攻擊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章