HTTP的性能優化

通過以上圖,可以從三個方面來優化HTTP的性能。

1.服務器

衡量服務器性能的指標,主要有以下幾個:

a.吞吐量(或TPS、RPS、QPS)

b.併發數

c.響應時間

d.資源利用率(CPU、內存、硬盤、網絡)

-->提高吞吐量,吞吐量越高,服務器的性能越好!

-->提高併發數,支持的併發數越大,服務器的性能越好!

-->降低響應時間,響應時間越短,服務器的性能越好!

-->合理利用服務器資源,過高肯定是不行,過低也有可能是存在問題的!

-->Linux服務器的監控工具主要有top、sar、glances等

2.客戶端

因爲數據都要通過網絡從服務器獲取,所以它最基本的性能指標就是:延遲。

所謂的“延遲”其實就是“等待”,等待數據到達客戶端時所花費的時間。

延遲的原因,有幾點:

a.距離:由於地理距離導致的延遲,是無法客服的,比如訪問數千公里外的網站。

b.帶寬

c.DNS查詢(如果域名在本地沒有緩存的話)

d.TCP握手(必須要經過 SYN、SYN/ACK、ACK 三個包之後才能建立連接)

-->對於 HTTP 性能優化,有一個專門的測試網站:WebPageTest,或使用瀏覽器的開發者工具

-->一次 HTTP“請求 - 響應”的過程中延遲的時間是非常大的,有可能會佔到90%以上

-->所以,客戶端優化的關鍵,降低延遲

3.傳輸鏈路(客戶端和服務器之間的傳輸鏈路)

使用CDN等技術,總之,要增加帶寬,降低延遲,優化傳輸速度。

 

-----------------------------------------------具體的優化手段----------------------------------------------------------

主要是優化服務端的性能。

1.前端:可以利用PageSpeed等工具進行檢測並根據提示進行優化。

2.後端:主要有以下幾方面

a.硬件、軟件或服務

比如更換強勁的CPU、內存、磁盤、帶寬等,比如使用CDN

b.服務器選擇、參數調優

選用高性能的服務器,比如Nginx,它強大的反向代理能力實現“動靜分離”,動態頁面交給Tomcat等,靜態資源交給Nginx

另外,Nginx自身也有可以調優的參數,比如說禁用負載均衡鎖、增大連接池,綁定 CPU 等

對於 HTTP 協議一定要啓用長連接,因爲TCP 和 SSL 建立新連接的成本非常高,可能會佔到客戶端總延遲的一半以上

TCP 的新特性“TCP Fast Open“,類似 TLS 的“False Start”,可以在初次握手的時候就傳輸數據,儘可能在操作系統和 Nginx 裏開啓這個特性,減少外網和內網裏的握手延遲。

下面這個Nginx 配置,啓用了長連接等優化參數,實現了動靜分離

server {
  listen 80 deferred reuseport backlog=4096 fastopen=1024; 


  keepalive_timeout  60;
  keepalive_requests 10000;
  
  location ~* \.(png)$ {
    root /var/images/png/;
  }
  
  location ~* \.(php)$ {
    proxy_pass http://php_back_end;
  }
}
 

使用HTTP協議內置的“數據壓縮”編碼,可以選擇標準的 gzip,也可以嘗試新的壓縮算法 br

不過在數據壓縮的時候應當注意選擇適當的壓縮率,不是壓縮的越厲害越好

c.緩存

網站系統內部,可以使用 Memcache、Redis等專門的緩存服務,把計算的中間結果和資源存儲在內存或者硬盤裏

Web 服務器首先檢查緩存系統,如果有數據就立即返回給客戶端

另外,CDN 的網絡加速功能就是建立在緩存的基礎之上的,可以這麼說,如果沒有緩存,那就沒有 CDN。

利用好緩存功能的關鍵是理解它的工作原理,爲每個資源都添加 ETag 和 Last-modified字段,再用 Cache-Control、Expires 設置好緩存控制屬性。

其中最基本的是 max-age 有效期,標記資源可緩存的時間。對於圖片、CSS 等靜態資源可以設置較長的時間,比如一天或者

一個月,對於動態資源,除非是實時性非常高,也可以設置一個較短的時間,比如 1 秒或者 5 秒。這樣一旦資源到達客戶端,就

會被緩存起來,在有效期內都不會再向服務器發送請求。

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