- 移动端面临的问题
- 设计原则
- WZP 体系说明
- 应用的app, SDK 等
快速介绍
2014年6月份,随着邮箱大师等app的快速发展,通过对用户反馈及现有网络协议的分析,我们认为现有的邮件通讯协议在移动环境下,存在很多的缺陷。因此我们开始考虑设计一种全新的网络层协议来应对移动端存在的各种问题,当时遇到的主要问题包括:
- 建立安全连接的延迟(latency)过高,移动网络本来就有高延迟等特征,tcp连接建立成本已经很高,再加上SSL通道,消耗在连接建立上的时间可能会影响到体验;
- 邮件收发协议缺乏压缩支持,传输数据压缩是免费午餐,浪费了很可耻;
- 服务的目标地址不能灵活的变更,缺乏一个简单有效的手段来解决运营商网络自动选取,海外代理自动选取,机房故障切换等问题;
- 需要有一种通用方案来统一处理各种性质的请求,一次性解决问题。
基于这些问题,我们制定了新协议的基本设计原则:
- 多路复用,有效降低连接建立等开销;
- ZERO ROUND 加密机制,基本0开销建立安全的传输通道;
- 应用透明的压缩支持;
- 采用Locate服务实时定位目标服务器地址;
- 避免运营商请求劫持,DNS劫持;
- 应用透明,应用可以在该协议上运行http/binary/json等自定义协议*。
最终完成的协议,有个很霸气的名字,叫WirelessZProtocol. 我们跟Google的QUIC协议做了一个简单的功能上的对比,具体如下:
设计协议是整个工作中最为简单的一部分,真正困难的是构建相关基础服务,SDK,并持续的维护,发展,使之成为一套完整,可用的系统。
为此,WZP系统提供了一组基础服务与SDK。
- link, c + python实现的一个同时支持大量长连接和大量短链接的高性能服务,类似nginx作为http请求的接入服务,link作为wzp请求的接入服务,性能并不低于nginx。负责多路复用的协议支持,加解密数据,压缩/解压缩数据;支持python开发link模块;
- locate, locate根据客户端的运营商,请求类型,账号,设备等信息,返回恰当的link服务器地址;
- proxy, 基于WZP协议,应用透明的代理服务(主要用于海外代理);
- push, 基于WZP协议的推送服务;
- auth, 基于WZP协议的认证服务;
- stat, 基于WZP协议的业务统计支持,程序异常收集,远程日志打印支持,UI卡顿堆栈收集等;
- SDK for Java/Android/WindowsPC/MacOS/iOS/Linux;
- Java/C++/Python Develop Framework for Server。
目前在邮件事业部,已经有30多个服务支持WZP接口,供app与服务端程序调用。
性能与支持
- link 作为接入层服务,目前在实际的环境中,单台机器支撑700,000连接,进程占用的内存小于3G,load低于1。
- link 低开销,高并发支持的特性非常适合作为海外节点以及小运营商的代理服务。这些代理服务为邮箱大师等app提供了优秀的海外访问支持。需要支持海外访问的app不需要单独考虑海外布点方案。WZP系统提供了原生支持。
- 为邮箱大师,网易邮箱,邮箱大师Windows版,一元夺宝,严选,有钱等app提供支持,并提供定制化的push服务。
- 欢迎同学们前来交流。
本文来自网易实践者社区,经作者陈炬授权发布。