[关闭]
@ironzhang 2018-03-16T03:21:47.000000Z 字数 1621 阅读 388

提高GPRS网络可靠性调研

工作


目标

提高GPRS网络的可靠性,包括:

连接的可靠性

  1. 提高连接的成功率
  2. 降低连接的断开率
  3. 尽早发现不可用的连接
  4. 提高连接建立的速度

消息的可靠性

  1. 提高消息的到达率
  2. 保证消息的响应速度

挑战

image_1c8jokb8038vbqedc7dd61m749.png-85.3kB

误码率对可靠性的影响

网络 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

传输层技术选型

TCP

业界标杆:微信

优点:技术成熟,内置重传、拥塞控制等算法,通过内核调参有一定定制能力。

缺点:建立连接需三次握手,若再加入tls建立安全通信通道,还需要四次握手,新特性接纳慢。

UDP

业界标杆:QUIC

优点:可高度定制化,如QUIC在UDP的基础上实现了0RTT建立连接,更高效的拥塞控制,前向冗余纠错,及连接迁移等特性。

缺点:需要雄厚的研发能力,及很长的研发周期。

短信

业界标杆:摩拜

优点:省电、无需心跳保活,到达率有保障。

缺点:延迟高,无法频繁上报数据,一旦短信接口出现故障,就容易造成大规模瘫痪。摩拜二代已放弃。

提高可靠性的技术手段

复合连接

image_1c8kg5lcg1csf7lrud116p6dpm.png-210kB

快速建立连接

image_1c8kgutr41do7or5120ot9a1n6713.png-146.3kB

动态的心跳保活

各个GPRS运营商的端口老化时间可能不同,所以采用动态的心跳保活策略可以很好的在连接保活和降低功耗之间取得平衡。

多路复用

支持在一条连接上同时处理多条请求。

定制合适的超时时间

对总读写超时(从请求到响应的超时)、首包超时、包包超时(两个数据段之间的超时)时间制定不同的计算方案,加快对超时的判断,减少等待时间,尽早重试。这里的超时时间还可以根据网络状态动态设定。

调优TCP参数,优化TCP算法

对服务端的TCP协议参数进行调优,以及开启各种优化算法,使得适合业务特性和移动端网络环境,包括RTO初始值,混合慢启动,TLP,F-RTO等。

支持IPv6

连接迁移

一条 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。

image_1c8khehmikqbab31bp41tu27q81g.png-295.2kB

弱网模拟测试

为验证方案的效果,需要完善的测试用例,及建立弱网测试环境,这方面可参考

https://zhuanlan.zhihu.com/p/21457535

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注