qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          書筆記:網站架構之性能篇

          錄:
            一、網站性能測試
            二、Web前端性能優化
            三、應用服務器性能優化(重點)
            四、存儲性能優化
            PS:本文為《大型網站技術架構 & 核心原理與案例分析(李智慧 著)》一書的讀書筆記
            // =======================================================================================
            網站性能測試
            一、不同視角下的網站性能
            1、用戶視角:直觀視覺感受
            2、開發人員視角:響應延遲、吞吐量、并發處理能力等
            3、運維人員視角:基礎設置資源利用率
            二、性能測試指標
            1、響應時間:請求從發出到處理完接收的時間
            2、并發數:同時處理請求的數量,即同時提交請求的用戶數
            3、吞吐量:單位時間內處理請求的數量
            *:隨著并發數增大:系統吞吐量先逐漸增加到極限,之后反而下降;系統響應時間先是小幅上升,當吞吐量達到極限后快速上升
            4、性能計數器:服務器監控指標,如CPU、內存、磁盤IO、網絡IO
            三、性能測試(壓測)方法
            *:不斷增加系統訪問壓力(并發請求數),以獲取系統性能指標數據
            四、性能測試(壓測)報告
            *:要能夠反應壓測的系統性能曲線規律,閱讀者能評估系統性能是否能滿足需求
            // ===========================================================
            Web前端性能優化
            一、瀏覽器訪問優化
            1、減少http請求:每次獨立的http請求的通信和服務開銷都很昂貴,可通過合并CSS、JS、圖片等方式減少http請求數
            2、使用瀏覽器緩存:通過設置http頭的Cache-Control和Expires屬性設定瀏覽器緩存,將CSS、JS、圖片等較少變更的資源緩存下來
            3、啟用壓縮:文件壓縮可減少通訊傳輸的數據量,文本壓縮率可達80%以上,但壓縮解壓會增加計算壓力(權衡)
            4、CSS渲染放最上面,JS功能腳本放最下面:使用戶視覺感受先已經看到頁面
            二、CND加速
            *:部署在網絡運營商機房,用戶請求路由的第一條就到達CND服務器,有效降低請求時間
            三、反向代理
            *:部署在網站機房內,用戶請求先到達反向代理服務器,有3個主要功能
            1、加速Web請求:通過配置緩存功能來實現
            2、安全:在用戶請求和應用服務器間建立一個屏障
            3、負載均衡:均勻分發請求到應用服務器
            // ===========================================================



          應用服務器性能優化
            一、分布式緩存(memcache)
            *:網站性能優化第一定律:優先考慮緩存
            1、緩存的基本原理:本質為內存Hash表
            *:數據以Key、Value對形式存儲在內存Hash表中。通過Hash(Key)得到HashCode,即Value對應內存的位置
            2、合理使用緩存
            *:不適合緩存的數據:頻繁修改(寫導致緩存中的數據失效)、沒有熱點、一致性要求高(緩存設有失效時間,這段時間內可能有臟數據)
            *:緩存預熱:緩存剛起來時為空數據,最好在使用前預加載數據庫數據
            *:緩存雪崩:當緩存服務器崩潰時,所有請求會落到數據庫導致數據庫宕機。好的方法是使用分布式緩存服務器提高緩存可用性
            *:緩存穿透:不正確或者惡意的請求可能落在某個不存在的Key導致頻繁讀數據庫,一個簡單對策將不存在的Key也緩存起來
            3、分布式緩存架構
            *:一種是以JBossCache為代表的,每個緩存服務器數據相同,需同步更新的分布式緩存(很少用)
            *:一種是以Memcache為代表的,每個緩存服務器數據部相同,之間不需要通信的分布式緩存。應用程序通過一致性Hash等路由算法選擇具體的緩存服務器
            4、Memcache的特點
            *:簡單的通行協議:TCP的,一套基于簡單文本的自定義協議(一個命令關鍵字+一組命令操作數,如get <key>)
            *:豐富的客戶端程序:幾乎支持所有主流語言(因為通信協議簡單)
            *:高性能的網絡通信:基于Libevent,提供穩定的長連接
            *:高效的內存管理::簡單固定的內存空間分配,slab_class=>slab=>chunk
            *:互不通信的集群架構:客戶端路由算法一致性Hash更成為數據存儲伸縮性架構的范例
            二、異步操作
            *:使用消息隊列將調用異步化,可改善網站的擴展性
            *:消息隊列:用戶請求發送給消息隊列后立即返回,再由消費隊列的消費者進程將消息異步寫入數據庫,具有很好的削峰作用
            三、使用集群
            *:利用集群解決高并發問題,前端用負載均衡技術將請求均勻分發到多臺服務器上(不單單局限在應用服務器)
            四、代碼優化
            1、多線程
            *:線程的優點:比進程更輕量,占用更少系統資源,切換代價更小
            *:使用多線程的2個主要原因:IO阻塞(阻塞時可以調用其他線程處理)和多CPU(最大限度使用CPU)
            *:線程數估算公式:啟動線程數 = [ 任務執行時間 / ( 任務執行時間 - IO等待時間 ) ] * CPU核數
            *:線程安全問題實質:多線程并發對某塊內存進行修改操作(對象、內存、文件、數據庫等)
            *:線程安全問題解決思路:對象設計為無狀態,使用局部變量,并發訪問加鎖等
            2、資源復用
            *:開銷較大的系統資源:數據庫連接,網絡Socket連接,線程,復雜對象等
            *:資源復用的2個方法:單例模式和對象池,都可以防止不必要的創建和銷毀操作
            3、數據結構和算法
            *:靈活組合數據結構和算法優化程序執行復雜度,如Hash等
            // ===========================================================
            存儲性能優化
            一、機械硬盤和固態硬盤
            1、機械硬盤:每次訪問數據都需要移動磁頭臂(物理運動),故數據連續訪問和隨機訪問性能表現差別大
            2、固態硬盤:沒有機械裝置,數據存儲于硅晶體中,有更好的性能。可靠性,性價比還有待提升,但逐步取代機械硬盤是遲早的事
            二、B+樹和LSM樹
            1、由于機械硬盤具有快速順序讀寫,慢速隨機讀寫的特性,故應用程序選擇存儲結構和算法極為重要
            2、B+樹是一種專門針對磁盤存儲而優化的N叉排序樹,目前數據庫多采用兩級索引,樹的層次最多三層
            3、LSM樹可以看為一個N階合并樹,數據寫操作都在內存中進行,目前許多NoSQL都采用LSM樹作為主要數據結構
            三、RAID和HDFS
            1、RAID,即廉價磁盤冗余陣列,主要是為了改善磁盤訪問延遲,增加磁盤可用性和容錯能力(數據在多塊磁盤并發讀寫和數據備份)
            2、HDFS,即分布式文件系統,Hadoop的文件系統,系統在整個存儲集群的多臺服務器上進行數據并發讀寫和備份

          posted on 2013-12-10 10:44 順其自然EVO 閱讀(297) 評論(0)  編輯  收藏 所屬分類: 性能測試

          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 罗城| 泰来县| 麻栗坡县| 漳州市| 丹阳市| 鹤峰县| 游戏| 汨罗市| 库伦旗| 张家港市| 绥宁县| 武功县| 石景山区| 定南县| 莱州市| 南华县| 咸丰县| 红安县| 中牟县| 藁城市| 延川县| 都昌县| 繁峙县| 延安市| 华安县| 澜沧| 凤冈县| 临猗县| 武汉市| 萝北县| 京山县| 华亭县| 吉林市| 毕节市| 曲周县| 新河县| 瑞金市| 长乐市| 梁山县| 安乡县| 宁远县|