@ironzhang
2018-03-16T03:21:47.000000Z
字数 1621
阅读 388
工作
提高GPRS网络的可靠性,包括:
误码率对可靠性的影响
网络 | BER |
---|---|
移动互联网 | 到 |
有线以太网 | |
光纤 |
/ | BER = | BER = |
---|---|---|
Throughput (pkts/sec) | 39.439 | 87.455 |
Success Probability | 0.9892 | 0.999 |
Transfer time of 5000 pkts. in secs. | 123.847 | 58.032 |
业界标杆:微信
优点:技术成熟,内置重传、拥塞控制等算法,通过内核调参有一定定制能力。
缺点:建立连接需三次握手,若再加入tls建立安全通信通道,还需要四次握手,新特性接纳慢。
业界标杆:QUIC
优点:可高度定制化,如QUIC在UDP的基础上实现了0RTT建立连接,更高效的拥塞控制,前向冗余纠错,及连接迁移等特性。
缺点:需要雄厚的研发能力,及很长的研发周期。
业界标杆:摩拜
优点:省电、无需心跳保活,到达率有保障。
缺点:延迟高,无法频繁上报数据,一旦短信接口出现故障,就容易造成大规模瘫痪。摩拜二代已放弃。
各个GPRS运营商的端口老化时间可能不同,所以采用动态的心跳保活策略可以很好的在连接保活和降低功耗之间取得平衡。
支持在一条连接上同时处理多条请求。
对总读写超时(从请求到响应的超时)、首包超时、包包超时(两个数据段之间的超时)时间制定不同的计算方案,加快对超时的判断,减少等待时间,尽早重试。这里的超时时间还可以根据网络状态动态设定。
对服务端的TCP协议参数进行调优,以及开启各种优化算法,使得适合业务特性和移动端网络环境,包括RTO初始值,混合慢启动,TLP,F-RTO等。
一条 TCP 连接 [17] 是由四元组标识的(源 IP,源端口,目的 IP,目的端口)。什么叫连接迁移呢?就是当其中任何一个元素发生变化时,这条连接依然维持着,能够保持业务逻辑不中断。当然这里面主要关注的是客户端的变化,因为客户端不可控并且网络环境经常发生变化,而服务端的 IP 和端口一般都是固定的。
比如大家使用手机在 WIFI 和 4G 移动网络切换时,客户端的 IP 肯定会发生变化,需要重新建立和服务端的 TCP 连接。
又比如大家使用公共 NAT 出口时,有些连接竞争时需要重新绑定端口,导致客户端的端口发生变化,同样需要重新建立 TCP 连接。
针对 TCP 的连接变化,MPTCP[5] 其实已经有了解决方案,但是由于 MPTCP 需要操作系统及网络协议栈支持,部署阻力非常大,目前并不适用。
所以从 TCP 连接的角度来讲,这个问题是无解的。
那 QUIC 是如何做到连接迁移呢?很简单,任何一条 QUIC 连接不再以 IP 及端口四元组标识,而是以一个 64 位的随机数作为 ID 来标识,这样就算 IP 或者端口发生变化时,只要 ID 不变,这条连接依然维持着,上层业务逻辑感知不到变化,不会中断,也就不需要重连。
由于这个 ID 是客户端随机产生的,并且长度有 64 位,所以冲突概率非常低。
如AWS的Shadow。
为验证方案的效果,需要完善的测试用例,及建立弱网测试环境,这方面可参考