《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上游服务客户端客户端客户端等待等待等待资源更新时,使用代理服务器上的缓存,防止峰值流量打爆上游服务器Nginx的http代理为例proxy_cache_lock on;proxy_cache_lock_timeout time;proxy_cache_lock_age time;过期缓存的用法减少回源请求、提升可用性客户端nginx上游服务客户端客户端客户端返回旧缓存返回旧缓存返回新缓存资源更新时,使用代理服务器上的缓存,防止峰值流量打爆上游服务器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/SSL620082018SSL3.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