減少服務器流量
1)客戶端發出請求層面,常見的手段有:
盡量利用瀏覽器的緩存功能,減少訪問服務端,比如:js、css、圖片等
可以考慮使用壓縮傳輸的功能,減少網絡流量,也會提高傳輸速度
考慮使用異步請求,分批獲取數據
2)前端接收客戶端請求層面,常見的手段有:
動靜分離,部分靜態資源可以直接從Nginx返回
按請求的不同,分發到不同的后端進行處理,比如:負載均衡、業務拆分訪問等
前面再加上一層來做多個Nginx的負載均衡,比如:LVS、F5等
還可以在更前面使用CDN服務
還可以對動態內容進行緩存,盡量減少訪問后端服務
3)Web服務器層面,常見的手段有:
使用最新的JVM,並進行配置優化
對Web服務器進行配置優化,比如:調整內存數量、線程數量等
提供多個能提供相同服務的Web服務器,以實現負載均衡
仔細規划Web服務器上部署的應用規模
對Web服務器進行集群
4)Web應用層面,常見的手段有:
動態內容靜態化
Java開發優化
優化處理業務邏輯的算法
合理高效的利用緩存
優化訪問數據庫的Sql,可以考慮利用存儲過程等數據庫的能力
合理使用多線程,加快業務處理
部分業務可以考慮內存數據庫,或者是進行純內存處理
盡量避免遠程調用、大量I/O等耗時的操作
合理規划事務等較為耗資源的操作
合理使用異步處理
對部分業務考慮采用預處理或者預計算的方式,減少實時計算量
內部系統間的業務盡量直接調用、直接處理,減少WebService、工作流等
5)數據庫層面,常見的手段有:
合理選擇數據庫的引擎,比如Mysql的InnoDB與MyISAM引擎
進行配置優化
可以考慮使用存儲過程來處理復雜的數據邏輯
數據庫集群,進行讀寫分離
合理設計數據庫的表結構、索引等
分庫、分表,降低單庫、單表的數據量
瀏覽器緩存+壓縮傳輸+CDN
1. 瀏覽器緩存css,js,圖片,錄音等
2. 使用webpack(壓縮,靜態)
3. CDN分布存儲,負載均衡,網絡請求重定向,內容管理(共享緩存緩存)
一. CDN概念
CDN是構建在網絡之上的內容分發網絡,依靠部署在各地的邊緣服務器,通過中心平台的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。CDN的關鍵技術主要有內容存儲和分發技術。
CDN的基本原理是廣泛采用各種緩存服務器,將這些緩存服務器分布到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求。
二.CDN原理
CDN服務商在全國各地部署一些節點服務器,如果你的網站要使用他們CDN的話,他們就會把你網站里能夠緩存的內容都緩存到各地的節點服務器上。這樣不同地區、不同運營商的訪問者訪問你網站的時候,就可以就近在一個節點上訪問,不需要去你源站。從而起到加速的效果
動態頁面的大部分內容都是由腳本代碼產生,那么這個頁面使用CDN加速是沒有多大效果的,畢竟這個頁面的主要內容沒辦法被存入鏡像;但是對於圖片較多的動態頁面,例如圖片論壇,我想這種加速還是有意義的
高速VPN通道、高效壓縮傳輸、優質BGP線路(技術涵蓋)
CDN那邊配置的遵循源站的策略,默認的話,我們沒有設置PHP文件不緩存,就幫我們緩存了24小時 (貌似是根據供應商而定)
三.webpack概念(模塊化)
webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時,它會遞歸地構建一個依賴關系圖(dependency graph),其中包含應用程序需要的每個模塊,然后將所有這些模塊打包成一個或多個 bundle
Webpack的工作方式是:
把你的項目當做一個整體,通過一個給定的主文件(如:index.js),Webpack將從這個文件開始找到你的項目的所有依賴文件,使用loaders處理它們,最后打包為一個瀏覽器可識別的JavaScript文件
四. 瀏覽器緩存
緩存頭:
1. 關於http緩存頭,新版最常見的就是 ETag 和 Cache-Control 這兩個標簽
Cache-Control
- private:表示它只應該存在本地緩存
- public:表示它既可以存在共享緩存,也可以被存在本地緩存
- no-cache:表示不論是本地緩存還是共享緩存,在使用它以前必須用緩存里的值來重新驗證
- no-store:表示不允許被緩存。
- max-age=:設置緩存時間,設置單位為秒。本地緩存和共享緩存都可以
- s-maxage=:覆蓋 max-age 屬性。只在共享緩存中起作用。
- immutable:表示文檔是不能更改的。
- must-revalidate:表示客戶端(瀏覽器)必須檢查代理服務器上是否存在,即使它已經本地緩存了也要檢查。
- proxy-revalidata:表示共享緩存(CDN)必須要檢查源是否存在,即使已經有緩存。
Last-Modified
服務器告知客戶端,資源最后一次被修改的時間,例如
Last-Modified: Thu, 10 Nov 2015 08:45:11 GMT
Etag存儲的是文件的特殊標識(一般都是hash生成的),服務器存儲着文件的Etag字段,可以在與每次客戶端傳送If-no-match的字段進行比較,如果相等,則表示未修改,響應304;反之,則表示已修改,響應200狀態碼,返回數據。
瀏覽器的行為會產生怎樣的請求:
1. 刷新網頁 => 如果緩存沒有失效,瀏覽器會直接使用緩存;反之,則向服務器請求數據
2. 手動刷新(F5) => 瀏覽器會認為緩存失效,在請求服務器時加上Cache-Control: max-age=0字段,然后詢問服務器數據是否更新。
3. 強制刷新(Ctrl + F5) => 瀏覽器會直接忽略緩存,在請求服務器時加上Cache-Control: no-cache字段,然后重新向服務器拉取文件。
歸類:
一.強制緩存
1. Expires字段
2. Cache-Control字段
二.對比緩存
1. Last-Modefied字段
2. Etag標識
1. 瀏覽器行為引起的緩存變化
2. 移動端的緩存策略
五. 阿里雲,騰訊 CDN 計費
阿里 1500+ 節點
騰訊 1300+節點
六. 開通阿里CDN步驟:
步驟一:開通CDN服務
1.在阿里雲官網 CDN產品詳情頁快速了解產品,之后單擊 立即開通。
2.在購買頁面選擇適合計費方式,確認訂單,CDN服務即開通。接下來就能開始接入您要加速的域名了。
步驟二:添加加速域名
A. 添加域名。
登錄CDN控制台,選擇域名管理。查看您添加的所有加速域名和狀態。點擊 添加域名。
B.填寫基本信息。
輸入加速域名(一般使用 子域名或泛域名,例如 cdntest.example.com)、選擇合適的業務類型、源站。點擊 下一步,等待審核。
步驟三:配置CNAME
A.在控制台域名管理的域名列表中復制加速域名對應的CNAME地址。
B.前往你的域名解析(DNS)服務商(如萬網、阿里雲解析、DNSPod、新網、騰訊雲解析、route 53、godaddy等),添加該CNAME記錄
步驟四:驗證CDN服務是否生效
配置CNAME后,不同的服務商CNAME生效的時間也不同,一般新增的CNAME記錄會立即生效,修改的CNAME記錄會需要較長時間生效。
您可以 ping 或 dig 您所添加的加速域名,如果被解析至 *.*kunlun*.com的域名,即表示CNAME配置已經生效,CDN功能也已生效: