网络服务流程
- DNS Lookup
- TCP Hankshake
- TLS Hankshake
- TCP/HTTP Request/Response
常见网络性能问题
- DNS
- DNS劫持或者失效
- DNS解析慢或者失效
- TCP Connection
- 端口被封,常见于一些小的电信运营商
- 如何设置连接超时时长
- Write/Read
- 如何设置读写超时时长
- Proxy端口拦截:写Request成功,读Response失败。某些路由器检测非Http请求走了Http端口会拦截Response
- 传输Payload过大
- 如何优化减少
- 复杂的国内外网络状况
- 国内运营商互联
- 海外带宽低、传输慢
最终目标
- 连得上
- 连得快
- 传输时间短
优化实践
- 优化DNS解析和缓存
- 内置server ip列表。分别放联通、移动、电信的出口,但是不应该根据当前的网络选取对应的ip,因为如果某个出口ip不可用,那么对应的网络将都不可用,使用动态平衡的权重
- 并行DNS解析
- Server IP列表权重机制
- 网络质量检测(根据网络质量来改变策略)
- TCP连接超时时长,根据不同的网络类型设置不同的网络超时参数。Facebook的做法是在http的response里面带上rtt,根据rtt动态调整策略
- TCP读操作超时时长
- 网络服务并发数量
- 提供网络优先级和依赖机制
- 高优先级服务优先使用长连接
- 根据依赖关系自动发起或取消网络服务
- 提供网络服务重发机制
- 连接失败端口轮询重试
- 写失败、读失败时重发服务。connection migration连接迁移,在移动端出现的可能性会比较大,因为网络发生变化,IP也会变化。socket四元组:客户端IP,客户端端口,服务器IP,服务器端口。
- 长连接失败事短连接补偿
- 重发服务开关
- 减少数据传输量
- 优化数据算法(自定义格式->Protocol Buffer)
- 优化数据序列化和反序列化
- 优化图片格式
- 优化海外网络性能
- CDN加速
- 提高带宽
- 动静分离
网络服务新技术方向
- SPDY&HTTP/2.0协议
- 多路复用
- 请求优先级
- 支持服务端推送
- 压缩Http header
- 对服务端程序透明
- Twitter测试结果:网络延迟降低30%
- QUIC协议
- TCP+TSL+SPDY on UDP
- 大幅减少连接时间
- 避免TCP Head-of-Line Blocking
- 优化拥塞控制
- 优化连接迁移Connection Migration