[笔记]web 性能权威指南

依然范特西╮ 提交于 2020-03-23 08:23:19
chaper1.

速度包括延迟和带宽

延迟:传播延迟,传输延迟,处理延迟,排队延迟

排队延迟:当今本地路由器缓冲区很大,导致tcp拥塞预防机制失效,CODEL主动队列管理算法,linux 内核3.5,解决该问题。

传播延迟:当前光纤传播的信息的速度约为20万公里每秒,主要是由一个介质折射率。

"最后一公里问题":用户接入点到运营商的主干路由器,FCC报告光纤入户的平均达到18ms

本地接入速度测试:http://www.speedtest.net/

chaper2

tcp三次握手加速方式:

长连接

tcp快速打开,tcp fast open;google的研究表明:TFO平均降低http事务网络延迟15%,页面加载时间10%以上,linux 内核3.7支持TFO.

流量控制:

1.接收窗口,rwnd,每个ack分组携带相应的最新的rwnd大小。

窗口缩放,开始tcp规范的窗口大小字段16位,最大值为65535字节。TCP Window scaling,在三次握手阶段商量,可以将接受窗口提高至1G。

sysctl net.ipv4.tcp_window_scaling

sysctl -w net.ipv4.tcp_window_scaling=1

 

2.慢启动

拥塞窗口大小,cwnd, 最开始为1,RFC 2581调整为4,RFC 6928 拥塞窗口调整为10个TCP段。

新tcp连接传输的最大数据量为rwnd和cwnd的最小值

初始阶段连接的带宽受限于cwnd, cwnd达到N个tcp段(1460BYTE)所需时间为:t=rtt*log(N/cwnd);对于短连接,优化CWND对速度提升影响非常明显

慢启动重启:SSR(slow start restart),空闲连接一定时间后重置cwnd大小,验证影响keepalive连接,建议禁用SSR。

sysctl net.ipv4.tcp_slow_start_after_idle

sysctl -w net.ipv4.tcp_slow_start_after_idle=0

 

3.拥塞预防

tcp依赖丢包来实现拥塞预防

最初的算法,倍减加增,AIMD,该算法比较保守,当前有新的算法,RFC6937,比例降速,PRR,目标是改进丢包后的恢复速度,谷歌的测试,该算法可以将丢包造成的平均连接延迟减少3%~10%

PRR算法是linux 3.2+内核默认的拥塞预防算法

 

BDP带宽延迟积

发送方和接收方之间的链路上传输的未确认最大数据量,为cwnd和rwnd最小值。

吞吐量受限于窗口和rtt

最优wnd大小=带宽*rtt

 

服务器调优建议:

1.增到tcp 的初始cwnd

2.禁用慢启动重启

3.开启窗口缩放

4.tcp 快速打开

ss 来查看套接字的各种信息

ss --options --extended --memory --processes --info

 

chaper3. udp

分组和数据报区别:

分组:任何格式化数据块

数据报:通过不可靠服务传输的分组

私有地址:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

udp与nat设备冲突:

1.连接状态超时删除,tcp和udp都面临类似问题

解决办法:双向keepalive分组,周期性重置nat设备的计时器

2.对于p2p,voip,游戏和文件共享,需要端到端的双向通信,upd方式无法穿透nat设备

解决方案:STUN,TURN,ICE

谷歌实现的基础库:libjingle, 用于gtalk

 

chaper4

TLS

1.功能:加密,完整性,身份验证

2.TLS握手:6次传输,3倍RTT,包括tcp握手,hello密钥套件协商,密钥生成和验证

对称加密和非对称加密的性能对比:

openssl speed rsa

openssl speed aes

3. SNI 机制,解决server 单ip支持多host https

4.TLS会话恢复机制,复用协商的对称密钥,减少一次rtt,实现机制包括:会话标示符(ID和协商的参数),保存在server端,存储管理瓶颈;会话记录单(服务器密钥加密过的数据),保存在客户端

优化建议:

1.tcp的全部优化办法

2.openssl最新库,性能明显优化

3.尽早完成握手,cdn与客户端建立tls

4.会话缓存和无状态恢复

5.tls记录大小,ipv4 20byte(ipv6 40字节),tcp 20byte(tcp option 40字节),tls记录1420字节比较合适

6.tls压缩,禁用tls协商的压缩选项

7.证书链长度,减少链长度,避免慢启动阶段超过默认拥塞窗口大小,删除不必要证书

8.OCSP封套,证书链包括OCSP响应,让浏览器跳过在线查询

9.HTTP严格传输首部

 

在线测试:https://www.ssllabs.com/ssltest/

openssl s_client -state -CAfile startssl.ca.crt -connect igvita.com:443

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!