网易云信IM云保障IM即时性和消息稳定性

3456℃

对于移动APP来说,除了简单的工具类APP外,IM功能正变得越来越重要,它能够创建起人与人之间的连接。社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性。电商类产品,用户与商家的连接能极大的提高沟通效率,降低沟通成本。教育类产品,学生与老师的连接让在线教育跟面对面授课拥有接近的体验。医疗类APP,通过医生与患者之间多维度的沟通,医生能更加准确的把脉。

一、IM即时性和消息稳定性成为IM构建难题

IM,顾名思义由Instant(即时),Messaging(消息)组成。即时性要求有新消息时能够立即收到,如果程序在后台,则要能立即收到推送通知。而通信消息则要求稳定可靠,系统不宕机,程序不崩溃且安全;传递消息时不会被拦截监听,消息不丢,顺序不乱,不重复;如果包含音视频聊天,则要求延迟低,流畅不卡顿。这两点说起来容易,但要真正做出一套稳定可靠的商用级IM系统,挑战还是很多。以下是影响IM即时性和消息稳定性的几个核心问题:

  • 移动网络不稳定,网速很慢,容易掉线;
  • 流量昂贵,制约IM常见的多媒体交互需求;
  • 操作系统资源(内存,电量)受限;
  • 复杂Android生态环境导致繁杂的保活及推送适配。

二、网易云信的技术框架

《中国公有云平台白皮书》数据显示,中国云服务市场增速连续几年在65%左右,越来越多的企业和厂商正在进行转型,将会进一步拉动云服务市场的快速发展。正是看到了这一趋势的势不可挡,网易凭借在即时通讯领域长达16年的经验与技术积累,推出了网易云信-即时通讯云服务。首先介绍下网易云信的技术框架,有助于大家系统的理解云信产品的设计思路:

一点爆破:针对“稳定长连接”重点优化;

  • 私有精简二进制网络协议;
  • 精简协议头;
  • 心跳间隔动态调整;
  • 重连间隔指数随机倍增退避;
  • 多点优化:更加节省系统资源,传输更顺畅。

分层构架

  • 独创的“独立长连接+多元化推送通道”;
  • 断点续传、Pipeline技术、边录边传三大特色。

三、网易云信助力移动开发

1、如何一点突破弱网络环境的束缚?

针对移动场景的弱网环境,为了确保真正的稳定。网易云信在多个维度上采取了优化措施,首先采用了特殊设计的高性能二进制网络协议,并使用了非常精简的协议头,尽量减少数据包大小。心跳间隔根据网络情况动态调整。掉线后,会有自动重连和快速重登,为了节省流量电量,以及防止造成对服务器的信令风暴,重连间隔会指数随机倍增退避。

其次,快速的上传下载,更少的等待时间可以带来更好的用户体验。网易云信拥有断点续传、Pipeline技术、边录边传三大特色。断点续传可以减少因网络原因导致的重复传输,减少传输时间,节省流量。Pipeline技术则可以重叠利用http请求的响应等待时间,加快传输速度。发送语音消息时,录一段就发送一段,等到录制完毕时,只需要发送最后一段数据,可以做到录完就传完发送的效果。

2、解决Android的Low Memory Killer机制(LMK)

手机的内存有限,当后台运行的进程越来越多,内存剩余量也就随之减少。当有一个新的APP想要启动,如果此时内存不够了,LMK机制就会启动,从正在运行的进程中挑选一个清理掉,释放出空间,然后新的APP就可以运行。因为LMK机制的存在,虽然APP允许在后台运行,但同样也面临随时被清理的风险。因此,需要在被清理后及时的重新启动。有4种方式能够做到:

sticky service,在Service的onStartCommand中返回sticky flag,这样当service被kill掉后,系统会将它加入重启的pending列表,在后面合适的时机再把service重启。

alarm,闹钟,有循环闹钟和一次性闹钟两种,在闹钟触发后启动对应的组件。

在Manifest文件中静态注册的Receiver,通过监听各种系统事件,比如开机,网络变化,mount/unmounts等,在这些事件发生时启动组件,因为这种方式会造成在这些事件发生时系统容易卡顿,在7.0里面,Android增加了限制。

JobScheduler,这是在5.0里面新增的,允许APP在特定事件发生时做一些动作,比如充电,切换到wifi等。

3、保障弱网环境下实时音视频的质量

为了保障弱网环境下实时音视频的质量,云信采取了以下措施:

  • 首先,网络数据传输采用前向纠错技术(FEC),增加固定数量的冗余包,用于产生丢包后做数据恢复。
  • 在不同的网络环境下,设置不同的初始发包频率,网络越差,初始发包频率越低。降低发包频率,可以减少网络交互次数,降低失败概率。
  • 实时监听网络变化, 依据当前网络延时,丢包率等统计数据动态调整发包频率和数据码率。
  • 如果丢包的情况已经发生,且使用FEC无法恢复,再采用丢包补偿(PLC)进行恢复。
  • 增加数据缓冲Buffer,通过动态调整buffer大小,降低网络抖动的影响。
  • 在视频方面:采用 Temporal Scalability(时间分级) 编码方式, 增强视频帧的抗丢包能力, 即使在丢包的情况下也能部分正常解码。
  • 数据传输对视频关键帧或者时间分级下的T0帧加强传输保障。当发生关键帧丢失时, 通过一些规则及时请求新的关键帧。

4、针对“稳定长连接”重点优化

云信推出了安全长连接加推送连接模式,即在每个APP在使用和真正传递数据时,仍然独立使用自己的安全长连接。而当APP退到后台一段时间之后,则断开长连接,然后每个APP开启一个推送代理,并选择其中一个和云信的推送服务器建立连接,之后当APP有新消息时,就通过这个推送连接传递。APP可以自己控制发出的推送消息的安全级别,可以是包含说话人和消息内容,可以只包含说话人,或者只是一条简单的有新消息到达的提醒文案。推送到达后,如果是代理APP自己的消息,直接传递给代理APP即可。如果是其他APP消息,并不直接将提醒传递给目标APP,而是由带来发出一条通知栏提醒。等用户去点击通知栏提醒后,才会把目标APP唤醒。

四、客户收益

稳定可靠

在稳定方面,网易云信不仅仅包含团队16年的技术沉淀与基础设施的搭建,更是经过了网易过亿用户产品的线上运维经验保障。同时,网易云信团队也有足够丰富的经验和实践来保障有效的应对各类突发问题,让平台更加稳定可靠。

快速即时

即时性要求有新消息时能够立即收到,如果程序在后台,则要能立即收到推送通知。而通信则要求稳定可靠,系统不宕机,程序不崩溃,传递消息时不会被拦截监听,消息不丢,顺序不乱,不重复。如果包含音视频聊天。则要求延迟低,流畅不卡顿。网易云信在以上各个方面都能做到快速即时。

T服务

网易云信提供专业的“T服务”,一站式快速响应和解决开发者和用户的问题。该服务体系包含网易云信技术顾问服务体系、客户顾问服务体系、用户信任服务体系三大块。网易云信技术顾问团队是业内唯一一家提供1对N,7X24小时即时响应技术支持服务的团队,团队成员均来自一线互联网公司。同时,该团队还为客户提供专业的技术培训服务。而在用户信任这块,网易云信还提供了故障赔偿,邮件短信双重预警,1月信用额度等保障服务。其中,客户信任服务体系含金量极高。网易云信特别成立了网易云信用户信任中心,把产品升级、专利技术、第三方机构云认证等方面的信息同步公示给用户。其中包括CSA STAR Certification、ISO27001信息安全管理体系国际认证在内的多项云安全类认证服务及奖项,并确保用户升级享受云信56项专利技术。包括真正做到无上限人数聊天室架构、自研性能优化方案和结合网易云19年技术成果的智能反垃圾服务。

专业的团队

网易云信研发团队的前身是网易杭州研究院通讯基础设施技术组,有16年的即时通讯基础。在2014年底,公司重新组建了网易云信这支团队作为即时通讯云服务(PaaS),是网易云第一个开放给市场的云服务产品。开发者通过集成客户端SDK和云端OPEN API,即可快速实现强大的IM功能,组建一流的产品团队,并增加了商务与技术支持,以便全方位的为客户提供更加便捷和贴身的服务。

五、应用案例

宝宝树

宝宝树是目前国内最大的母婴垂直网站,其旗下的“宝宝树孕育”、“小时光”、“美囤妈妈”三款APP均使用了网易云信的聊天室+直播技术。在与竞争对手的PK中,网易云信凭借包更小,不占空间,技术支持响应快,聊天室性能好,稳定无异常等优势,成功被宝宝树选中。

学吧课堂
学吧课堂是一个主打 K12 领域的游戏化自适应学习的在线平台,其IM使用场景主要在排行榜,可选择排行高的学生,添加好友后进行私聊。同时,其教学白板、实时音频、实时视频也是用了网易云信的技术。客户非常认可网易云信所提供的稳定服务和后期服务保障。

更多云信案例参见:http://netease.im/solution