【大型網站技術架構 核心原理與案例分析】讀書筆記

 

章節                css

筆記                html

1.概述        web

  1. 網站架構模式:分層、分割、分佈式、集羣、緩存、異步、冗餘、自動化、安全。算法

  2. 核心架構要素:性能、可用性、伸縮性、擴展性、安全。sql

4.高性能
  1. 通常重複請求一萬次計算總響應時間而後除以一萬獲得單詞響應時間。數據庫

  2. 測試程序並非啓動多線程而後不停發送請求,而是在兩次請求之間加入一個隨機等待時間。編程

  3. 吞吐量:天天經過收費站的車輛數目;併發數:正在行駛的車輛數目;響應時間:車速。TPS:每秒事務數;HPS:每秒請求數;QPS:每秒查詢數。瀏覽器

  4. 性能計數器:System Load(系統負載,最理想爲CPU數目)、對象與線程數、內存使用、CPU使用、磁盤與網絡I/O等指標。緩存

  5. 併發數逐漸增長階段:性能測試-->負載測試-->壓力測試、穩定性測試。安全

  6. 隨着請求增長系統處理能力增長變緩達到最大值,這是系統最大負載點。繼續加壓系統處理能力反而降低,最後崩潰可看做系統崩潰點。

  7. 瀏覽器訪問優化:1.減小HTTP請求(合併請求,CSS偏移響應);2.使用瀏覽器緩存(HTTP中Cache-Control和Expires屬性,更改文件名逐步更新);3.啓用壓縮html、css、js啓用GZip;4.Css放上面(下載後才渲染頁面),js放最下面(下載後立馬執行,因此可能阻塞);5.減小Cookie傳輸(靜態資源可啓用獨立域名,不須要cookie)。

  8. CND加速:對靜態資源放入CDN極大改善網頁打開速度。

  9. 反向代理:位於網站機房一側,代理網站WEB服務器接收HTTP請求,可保護網站安全;可存放緩存;可實現自動負載均衡。

  10. 應用服務器性能優化:緩存、集羣、異步。

  11. 網站性能優化第必定律:優先考慮使用緩存(訪問速度高的存儲介質,提升訪問速度,無需重複計算)。計算KV對中Key的HashCode對應的Hash表索引,實現快速訪問。

  12. 合理應用緩存的地方:頻繁修改的數據(讀寫比例大於2:1)、沒有熱點的訪問、數據不一致與髒讀(接受超時後從新加載的時間間隔)、緩存可用性(緩存宕機不能對數據庫產生很大影響)、緩存預熱(提早加載數據放入緩存、LRU:最近最久未用算法)、緩存穿透(緩存無數據,直接訪問數據庫,最好將不存在的值緩存爲null)。

  13. 分佈式緩存:更新同步分佈式(JBoss Cache,全部機器保存緩存內容相同)、互不通訊的分佈式(Memcached,內存:根據大小塊分組,查找大於數據的最小chunk,採用LRU算法釋放最近最久未被訪問的空間,經過一致性哈希算法可無限制伸縮)。

  14. 異步操做:把用戶請求直接訪問數據庫環節增長消息隊列,請求發送到消息隊列後直接返回,有消息隊列操做數據庫,從而達到削峯做用。

  15. 使用集羣:使用負載均衡技術爲一個應用構建一個由墮胎服務器組成的服務器集羣,分散請求到多臺服務器處理。

  16. 代碼優化:多線程(啓動線程數=[任務執行時間/(任務執行時間-IO等待時間)]*CPU內核數)、資源複用(數據庫鏈接、網絡通信鏈接、線程、複雜對象等)、數據結構(字符-->MD5指紋-->hash計算-->hashcode)、垃圾回收。

  17. 存儲性能優化:1.機械(快速順序讀寫、慢速隨機)vs固態 2.B+樹vs LSM樹 3.RAID vs HDFS

  18. RAID:RAID0(同時讀寫多塊,100%)、RAID1(同時寫入2塊,50%)、RAID10(同時結合1和0,50%)、RAID5((n-1)/n)、RAID6(可靠性比5高,(n-2)/N)。

  19. HDFS:以塊爲單位,一個文件被分割成若干Block,當寫完一個Block是自動複製到另外2臺,保證有3個副本。經過MapReduce併發計算任務框架,同時讀取多個Block併發處理,至關於RAID0併發。

5.高可用
  1. 網站可用性達到4個9,99.99%;故障分=故障時間*故障權重;使用負載均衡進行無狀態服務的失效轉移。

  2. 應用服務器集羣的session管理:1.複製;2.經過hash算法實現IP和服務器綁定;3.利用cookie記錄session;4.利用分佈式緩存、數據庫獨立部署session服務器(推薦)。

  3. 高可用服務:分級管理、超時設置、異步調用、服務降級、冪等性設計。

  4. CAP原理:一個數據服務沒法同時知足數據一致性(Consistency,強一致、用戶一致、最終一致)、數據可用性(Availibility)、分區耐受性(Partition Tolerance,伸縮性);優先可用、伸縮。

  5. 數據備份:冷備(按期複製,沒法保證數據一致性和可用性)、熱備(異步熱備(由代理寫入slave)、同步熱備(客戶端同時讀寫master-slave))。

  6. 更新時暫停負載均衡中一部分服務器來更新,而後使用相似Selenium實現自動測試,而後使用預發佈(和線上惟一不一樣的是未放入負載均衡列表中)。

  7. 實現以火車發佈模型的自動化發佈,而後採用灰度發佈(AB測試)進行發佈,可方便回滾。

  8. 監控數據採集:1.用戶行爲日誌收集(服務端日誌、客戶端瀏覽日誌(基於Storm實時計算框架日誌統計分析));2.服務器性能監控Ganglia;3.運行數據報告(緩存命中率、平均響應、待處理任務)

  9. 監控管理:系統報警、失效轉移、自動優雅降級。

6.伸縮性
  1. 伸縮性:不須要改變網站的軟硬件設計,僅經過改變部署的服務器數量就能夠擴大或縮小網站處理能力。

  2. 伸縮設計:一類經過功能進行物理分離實現伸縮(任何階段、橫向業務、縱向基礎服務),一類是單一功能經過集羣實現伸縮。

  3. 實現負載均衡:1.HTTP重定向(要請求2次、定向服務器瓶頸、SEO做弊);2.DNS域名輪詢(配置A記錄多個IP,缺點生效慢,權限少,一般做爲第一步解析到負載均衡服務器);3.反向代理(接收公網,轉發內網服務器,應用層負載均衡);4.IP負載均衡(網絡修改IP,比反向代理性能好,但一樣可能成爲瓶頸);5.數據鏈路層負載均衡(數據鏈路層修改mac進行分發,而後直接響應數據給客戶端,又稱做直接路由方式DR,最好產品LVS)。

  4. 負載均衡算法:1.輪詢;2.加權輪詢;3.隨機;4.最少鏈接(發給當前鏈接數最少的服務器);5.源地址散列(IP進行Hash,使同IP固定訪問一臺服務器)。

  5. 路由算法:1.取餘(在固定服務器數量下可知足全部,沒法擴容);2.一致性Hash(將緩存服務器,分發成多個虛擬節點(150)分佈在圓形上,按一個方向查找最近的節點)。

  6. 讀寫分離-->分庫-->MySQL可使用Amoeba和Cobar兩個產品實現分片(將一張表拆開存儲在多個數據庫中)

  7. NoSQL:not only sql做爲關係數據庫的補充,放棄結構化查詢語言和事務一致性保證,強化可用性和伸縮性。採用HBase實現伸縮。

  8. NoSQL伸縮:應用程序-->向Zookeeper請求HMaster地址-->而後向HMaster輸入key請求HRegionServer地址-->而後向HRegionServer輸入key查詢數據-->HRegionServer訪問HRegion獲得數據

7.可擴展
  1. 擴展性:指對現有系統影響最小的狀況下,系統功能可持續擴展或提高的能力。除模塊分佈式還有分佈式消息隊列和分佈式服務兩種方式。

  2. 消息隊列:1.事件驅動架構(EDA,生產者消費者模式,藉助事件消息完成模塊間合做);2.分佈式消息隊列(先進先出、ESB、SOA)

  3. 分佈式服務需求與特色:負載均衡、失效轉移、高效遠程通訊、整合異構、對應用最小侵入、版本管理、實時監控。Thrift、Dubbo。

  4. 利用NOSQL實現可擴展的數據結構。

8.安全性
  1. XSS攻擊:跨站腳本攻擊(反射型,持久型);防護:1.過濾符號;2.HTTPONLY(禁止js訪問此屬性cookie);

  2. 注入攻擊、CSRF(跨站請求僞造)防護:1.表單token;2.驗證碼;Referer Check;

  3. 其餘攻擊:錯誤回顯、HTML註釋、文件上傳、路徑遍歷。

  4. web應用防火牆:ModSecurity、SiteShell。

  5. 信息加密:1.單向散列加密(MD五、sha+鹽salt);2.對稱加密(密鑰相同DES、RC);3非對稱加密(分公、私鑰,RSA,證書即爲公鑰);

  6. 信息過濾:使用正則及Trie樹算法或hash表過濾文本、分類算法([無關聯即樸素]貝葉斯分類算法)、黑名單(hash表、提取8位指紋布隆過濾器)。

  7. 風險:帳戶風險、買家風險、賣家風險、交易風險;風控:規則引擎、統計模型。

9.其餘
  1. 秒殺:系統獨立部署、頁面靜態化、租借秒殺活動帶寬、動態生成隨機URL。單獨放置定時js文件到不一樣服務器,限制每臺應用服務器接受請求的總數,超過則丟棄。

  2. 故障案例:寫日誌故障、高併發訪問數據庫故障、高併發鎖故障、緩存引起故障、應用啓動不一樣步故障、大文件讀寫獨佔磁盤故障、濫用生產環境故障、不規範流程引起故障(穿透緩存)、編程習慣

相關文章
相關標籤/搜索