https://cloud.tencent.com/developer/article/1150998
RTT(Round Trip Time):数据报文一次往返时间
MSS(TCP Maximum Segment Size): 单次传输最大数据报文长度
快链路
TCP/IP协议栈
-
控制传输包大小
避免数据报文大小超过物理网络层的限制触发IP分片,因为一旦触发会增加与服务器的交互次数 -
放大TCP拥塞窗口
TCP拥塞窗口(cwnd)初始值设为10,流量控制防止弱网依然疯狂发包,拥塞控制可检测网络情况 -
调大SOCKET读写缓冲区
SOCKET的读写缓冲区大小设置为64KB -
调大RTO(Retransmission TimeOut)初始值
将RTO(Retransmission TimeOut)初始值设为3s。RTO既重传间隔,放大可以避免不必要的重传 -
禁用TCP快速回收
启用会使原来需要等待2MSL的变成1MSL,禁用可降低重传概率 -
HTTP协议:打开SOCKET的TCP_NODELAY选项
避免大量小的数据报文在网络中流窜造成拥塞
接入调度
-
就快接入
CDN+客户端选路(测速和报告)。并非物理距离近,就一定快。 -
去DNS的IP直连
可减少一个RTT时间消耗,并避免因DNS单节点压力过大、设备LOCAL DNS错误、运营商劫持、DNS污染等问题 - 网络可达性探测
链路管理
-
链路复用
避免多次客户端与服务器三次握手,连接一旦建立就保持。可通过HTTP Keep-Alive 属性实现 -
区分网络类型的超时管理
超时时间因网而异,重试策略 -
优质网络下的并发链路
积压的任务网好之后并发发送 -
轻重链路分离
小数据和大数据隔离,避免大数据延迟影响小数据 -
长链接
节省了三次握手的时间等待 -
小心重试
设置合适的重试测试,避免后台雪崩。比如无网不重试、动态重试时间、限制重试次数、服务器异常不重试 -
及时反馈
告知用户当前网络状态,不要一直loading -
异步IO
设计异步总线,总线可能会涉及包括队列管理(优先级、超时、CRUD等)、事件驱动、任务调度等,客户端注意做缓存。 -
并发控制
避免滥用异步队列,任务有轻重缓急 -
推拉结合
apple apns -
断点续传
网络恢复后,继续上次完成一半的任务,不要重头再来
轻往复
- 协议二进制化
-
高效协议
Google SPDY -
协议精简
减少不必要的数据传输 -
协议合并
例如两个接口合并成一个接口,原本请求两次变一次 -
增量技术
例如日志上传,每天一次全量上传,多次增量上传 -
包压缩
gzip、先压缩再加密(加密后的二进制数据流压缩率较低),webp
强监控
- 接入质量监控:客户端汇总接入调度FSM执行过程元信息以及业务请求响应结果的元信息,并由此根据网络类型不同、运营商不同、网络接入国家和省市不同分析接入成功率、业务请求成功率(还可细化按业务类型分类统计)、前述二者失败的原因归类、接入302重定向次数分布暨原因、接入和业务请求测速等;
- 建设云端可控的日志染色机制:便于快速有针对性的定点排查问题;
- 终端硬件、网络状态的相关参数采集汇总;
- 建设云端可控的接入调度(比如接入IP列表等)和网络参数(比如连接超时、IO超时、任务超时、并发链接数、重试间隔、重试次数等)配置下发能力;
- 服务器根据汇总数据。
多异步
- 请求任务划分优先级
- 网络内容预加载
- 适配网络调整请求数据大小,例如分页
- 减少网络往复,要快
- 减少网络流量,要轻









网友评论