qileilove

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

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

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



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

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

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

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 赤水市| 朝阳区| 孟津县| 利辛县| 浮梁县| 乐至县| 安平县| 江永县| 灵台县| 象州县| 阿克陶县| 邯郸市| 兴化市| 贞丰县| 榆社县| 南开区| 庆云县| 安顺市| 吉首市| 通江县| 合肥市| 宝丰县| 太和县| 赤峰市| 育儿| 泽普县| 聂拉木县| 甘肃省| 上饶市| 凌源市| 恭城| 错那县| 江源县| 台北市| 博爱县| 甘孜县| 二连浩特市| 长岭县| 婺源县| 毕节市| 西宁市|