Mars github地址:

https://github.com/Tencent/mars/wiki

一、微信心跳机制

链接:http://mp.weixin.qq.com/s/ghnmC8709DvnhieQhkLJpA

目标:

1)保证通道可用和实时性

2)减少因心跳引起的空中信道资源消耗,减少心跳Server负载,以及减少部分因心跳引起的耗电

方案特点:

1)根据应用状态,使用不同的心跳策略

区分活跃态、次活跃态、自适应计算态、后台稳定态;

  • 在活跃态(应用在前台) - 使用固定和频率较高的心跳

  • 次活跃态(刚进入后台或者锁屏) - 使用几次最小心跳维持长连接

  • 自适应计算态 - 通过算法来寻找最大可用的心跳

  • 后台稳定态 - 使用最大可用心跳来维持长连接

2)自适应心跳算法来探测最大可用心跳点

img

  • 服务端下发区间、步长、初始值等算法参数,客户端开始探测

  • 需要短心跳连续成功三次来判断稳定的网络环境,避免误判,剔除不稳定的环境

  • 连续5次延迟心跳测试失败,则重新开始自适应;每周三自动开始自适应;

3)后台可按地区网络监控,动态下发心跳区间

二、Mars - 高性能日志模块xlog

链接:http://mp.weixin.qq.com/s/cnhuEodJGIbdodh0IxNeXQ

目标:

1)Release版本,应用依然可以打日志

2)流畅性 - 不会导致CPU飙高,不能因为IO导致应用卡顿

3)完整性和容错性 - 不能因为程序被退出、crash等意外原因,导致日志丢失或日志文件损坏

4)安全性 - 本地日志存储不怕被破解,加密存储

方案特点:

1)基于mmap的内存映射操作 - 性能几乎与写内存一样,内存不足或程序crash会自动写入文件,不怕丢失

2)异步流式压缩 - 设置一定大小滑动窗口(一般32kb),按单元压缩,分散CPU压缩时间在整个生命周期内,使得CPU曲线更平滑

img

3)压缩后加密存储

三、Mars - 信令传输超时设计

链接:http://mp.weixin.qq.com/s/PnICVDyVuMSyvpvTrdEpSQ

目标:

1)在用户体验的接受范围内,尽可能地提高成功率

2)保障弱网络下的可用性

3)具有网络敏感性,快速发现新的链路

方案特点:

1)首包超时 - 服务端回的第一个包的时间超时即重试

2)包包超时 - 服务端回的两个数据分段之间超时即重试

3)超时时间根据不同网络类型有不同固定设置

4)网络状况判定 - 能够短时间完成信令收发,则判断为优良,此时设置较短的超时时间,当遇到网络波动时预期它能快速回复;信令失败或者网络类型切换则切换到评估状态,此时使用较长的超时时间设置。

img

四、Mars - 连接超时与IP&Port排序

链接:http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=2649286458&idx=1&sn=320f690faa4f97f7a49a291d4de174a9&chksm=8334c3b8b4434aae904b6d590027b100283ef175938610805dd33ca53f004bd3c56040b11fa6#rd

目标:

1)快速发现可用的服务资源并使用(最快可用)

2)无服务器负载问题

方案特点:

1)复合连接,寻找可用的ip:port,使用如下图的方式搜索,提高可用性,又能实现低负载高性能。

img

2)IP来源分级:(优先级自上而下)

  • WXDNS IP - 微信自建DNS服务获得IP列表

  • DNS IP - 常规DNS服务获得IP列表

  • Auth IP - 服务动态下发的保底IP列表

  • Hardcode IP - 代码写死的保底IP列表

3)资源淘汰机制 - 通过对获取到的IP列表进行打乱,通过一定策略(如连续3次失败等)进行评分,低于一定分数则淘汰。

4)资源列表缓存到文件,24小时强制刷新



评论需要翻墙 for disqus