《2019年HTTP性能極限優化.pdf》由會員分享,可在線閱讀,更多相關《2019年HTTP性能極限優化.pdf(44頁珍藏版)》請在三個皮匠報告上搜索。
1、GOP S 全 球 運 維 大 會 2019上 海 站GOP S 全 球 運 維 大 會 2019上 海 站HTTP性能極限優化GOP S 全 球 運 維 大 會 2019上 海 站目錄編碼效率優化1信道利用率優化2傳輸路徑優化3信息安全優化4GOP S 全 球 運 維 大 會 2019上 海 站 HTTP/1 whitespace-delimited HTTP/2 二進制FrameHTTP消息格式的演進方向:性能!HTTP1991 HTTP/0.91992 HTTP/1.01996 HTTP/1.12009 SPDY Websocket2015 HTTP/220 xx HTTP/3GOP S
2、 全 球 運 維 大 會 2019上 海 站 為何要做壓縮?數據=信息+數據冗余 無損壓縮:Nginx實時壓縮:ngx_http_gzip_module過濾模塊:gzip on;ngx_http_brotli_filter_module過濾模塊:brotlion;Nginx預壓縮:ngx_http_gzip_static_module處理模塊:gzip_staticon;ngx_http_brotli_filter_module處理模塊:brotli_staticon;有損壓縮:圖片或者視頻 Nginx縮略圖:ngx_http_image_filter_module模塊 image_filte
3、r選擇壓縮方式:無損壓縮與有損壓縮GOP S 全 球 運 維 大 會 2019上 海 站GOP S 全 球 運 維 大 會 2019上 海 站GOP S 全 球 運 維 大 會 2019上 海 站Huffman靜態表動態表HTTP頭部壓縮的集大成者:HPACKGOP S 全 球 運 維 大 會 2019上 海 站常用HTTP頭部的簡化編碼:HPACK靜態表IndexHeaderNameHeaderValue1:authority2:methodGET3:methodPOST4:path/5:path/index.html6:schemehttp7:schemehttps8:status2009
4、:status20410:status20611:status30412:status40013:status40414:status50015accept-charset16accept-encodinggzip,deflate17accept-language18accept-ranges19accept20access-control-allow-originIndexHeaderNameHeaderValue21age22allow23authorization24cache-control25content-disposition26content-encoding27content
5、-language28content-length29content-location30content-range31content-type32cookie33date34etag35expect36expires37from38host39if-match40if-modified-sinceIndexHeaderNameHeaderValue41if-none-match42if-range43if-unmodified-since44last-modified45link46location47max-forwards48proxy-authenticate49proxy-autho
6、rization50range51referer52refresh53retry-after54server55set-cookie56strict-transport-security57transfer-encoding58user-agent59vary60via61www-authenticatedGOP S 全 球 運 維 大 會 2019上 海 站適合HTTP頭部的靜態Huffman編碼GOP S 全 球 運 維 大 會 2019上 海 站 RFC2397:Data URI scheme BASE64編碼的小文件嵌入CSS或者HTMLHTTP資源的編碼也需要優化!=WebPack打
7、包 multipart/form-datamultipart-body=preamble1*encapsulation close-delimiter epilogueGOP S 全 球 運 維 大 會 2019上 海 站目錄編碼效率優化1信道利用率優化2傳輸路徑優化3信息安全優化4GOP S 全 球 運 維 大 會 2019上 海 站多路復用高速信道!多信道復用單一信道傳輸錯誤要及時恢復丟包、亂序有限資源的合理分配多信道的平衡、提升信息量占比提升信道利用率GOP S 全 球 運 維 大 會 2019上 海 站 數據鏈路層/網絡層 傳輸層/應用層 多線程 協程:nginx+lua(openre
8、sty)http2 stream多維度的多路復用GOP S 全 球 運 維 大 會 2019上 海 站 HTTP2 HTTP1HTTP2的多路復用:連接視角GOP S 全 球 運 維 大 會 2019上 海 站HTTP2的多路復用:waterfall視角GOP S 全 球 運 維 大 會 2019上 海 站 超時與重試應用層Nginx接收HTTP請求:client_header_timeout發送HTTP響應:send_timeout關閉連接:lingering_time與lingering_timeout連接、收發上游消息等傳輸層TCP測準RTT才有合適的RTO:net.ipv4.tcp_t
9、imestamps=1錯誤恢復(1)GOP S 全 球 運 維 大 會 2019上 海 站timestamps:PAWS防止TCP序列號回繞GOP S 全 球 運 維 大 會 2019上 海 站 亂序報文的精準重發 net.ipv4.tcp_sack=1 斷點續傳 Range協議:支持多線程下載 緩存+Range:Nginx的slice模塊錯誤恢復(2)GOP S 全 球 運 維 大 會 2019上 海 站擁塞控制:總有個瓶頸路由器GOP S 全 球 運 維 大 會 2019上 海 站 最佳控制點:路由器的隊列出現積壓擁塞控制:丟包驅動還是測量驅動?GOP S 全 球 運 維 大 會 2019
10、上 海 站 CUBIC:Linux 2.6.19 BBR:Linux 4.9BBR擁塞控制算法GOP S 全 球 運 維 大 會 2019上 海 站 限速Nginx限制下游發送速率:limit_rateNginx限制上游發送速率proxy_limit_rateLeacky Bucket算法Nginx preaccess階段limit_req模塊limit_req_zone key zone=name:sizerate=rate資源平衡分配GOP S 全 球 運 維 大 會 2019上 海 站 父子依賴 權重資源分配:HTTP2的Stream優先級GOP S 全 球 運 維 大 會 2019上
11、海 站 不同瀏覽器GOP S 全 球 運 維 大 會 2019上 海 站 Nagle setsockopt:TCP_NODELAY Cork sendfile 延遲確認 setsockopt:TCP_QUICKACKTCP報文效率GOP S 全 球 運 維 大 會 2019上 海 站目錄編碼效率優化1信道利用率優化2傳輸路徑優化3信息安全優化4GOP S 全 球 運 維 大 會 2019上 海 站 緩存的位置 控制協議ExpiresCache-Control 請求中:max-age、max-stale、min-fresh、no-cache、no-store、no-transform、only-
12、if-cached 響應中:max-age、s-maxage、must-revalidate、proxy-revalidate、no-cache、no-store、no-transform、public、private緩存與協議GOP S 全 球 運 維 大 會 2019上 海 站 驗證請求 若緩存響應中含有 Last-Modified 頭部 If-Unmodified-Since If-Modified-Since If-Range 若緩存響應中含有 Etag 頭部 If-None-Match If-Match If-Range過期緩存的驗證緩存服務器上合并回源請求減輕峰值流量下的壓力客戶端
13、nginx上游服務客戶端客戶端客戶端12453678910等待等待等待資源更新時,使用代理服務器上的緩存,防止峰值流量打爆上游服務器Nginx的http代理為例proxy_cache_lock on;proxy_cache_lock_timeout time;proxy_cache_lock_age time;過期緩存的用法減少回源請求、提升可用性客戶端nginx上游服務客戶端客戶端客戶端12483795610返回舊緩存返回舊緩存返回新緩存資源更新時,使用代理服務器上的緩存,防止峰值流量打爆上游服務器Nginx的http代理為例proxy_cache_use_stale proxy_cache
14、_background_update GOP S 全 球 運 維 大 會 2019上 海 站初始擁塞窗口如何影響性能?GOP S 全 球 運 維 大 會 2019上 海 站調整初始擁塞窗口Linux2.6.323*MSS(usually5,840)Linux3.0.010*MSS(usually14,600)WindowsNT5.1(XP)65,5352WindowsNT6.1(Windows7orServer2008R2)8,1922MacOSX10.5.8(Leopard)65,5352MacOSX10.6.8(SnowLeopard)65,5352AppleIOS4.165,5352Ap
15、pleIOS5.165,5352GOP S 全 球 運 維 大 會 2019上 海 站主流CDN廠商的初始擁塞窗口GOP S 全 球 運 維 大 會 2019上 海 站拉與推:哪個更高效?GOP S 全 球 運 維 大 會 2019上 海 站HTTP2的資源推送瀏覽器服務器GET/index.htmlPUSH_PROMISE幀:GET/some.cssStream1Stream2h2,h3border-bottom:1pxdashed#B9B9B9;GOP S 全 球 運 維 大 會 2019上 海 站TCP連接多路復用后的隊頭阻塞問題GOP S 全 球 運 維 大 會 2019上 海 站QU
16、IC:基于UDP實現應用層多路復用GOP S 全 球 運 維 大 會 2019上 海 站目錄編碼效率優化1信道利用率優化2傳輸路徑優化3信息安全優化4保障互聯網世界安全的協議:TLS/SSL19951999200620082018SSL3.0TLS1.0TLS1.1TLS1.2TLS1.3應用層SSL/TLS 通用模型會話層傳輸層網絡層數據鏈路層物理層傳輸層網絡層鏈路層記錄表示層握手交換密鑰告警對稱加密的應用數據應用層ISO/OSI 模型TCP/IP 模型SSL(SecureSocketsLayer)TLS(TransportLayerSecurity)FREAK中間人攻擊-支持安全套件列表-
17、選擇安全套件-ClientDH公鑰Client HelloServerHello123787658Server HelloDoneServer HelloDoneServer CertificatesCipherSpecExchangeFinishedClientKeyExchangeFinishedCipherSpecExchangeCheckCertificatevalidity生成密鑰Factor affectingperformanceEncrypted dataSERVERUR HARDWAREASYMMETRIC ALGORITHMASYMMETRIC KEY SIZEASYMME
18、TRIC ALGORITHMAES128AES256RC4生成密鑰-發送證書4Serv-ServerDH公鑰ServerKeyExchangeGOP S 全 球 運 維 大 會 2019上 海 站支持TLS1.3:openssl 1.1.1版本 Ciphersuites 安全套件:少即是多!TLS13-AES-256-GCM-SHA384TLS13-CHACHA20-POLY1305-SHA256TLS13-AES-128-GCM-SHA256TLS13-AES-128-CCM-8-SHA256TLS13-AES-128-CCM-SHA256GOP S 全 球 運 維 大 會 2019上 海 站面臨重放攻擊的TLS1.2握手優化GOP S 全 球 運 維 大 會 2019上 海 站更優的握手優化:TLS13