网易云信CTO:网易IM研发仍在不断升级
“网易出品,必属精品”,开发界流传的这句话对于大多数开发者并不陌生。网易云信,一个凝聚了网易公司15年技术积累的即时通讯云服务平台,凭借出色的稳定性以及对开发者的增益价值在上线8个月的时间内揽下7万+APP用户。近日,网易云信CTO阙杭宁向开发者分享了网易IM云的演变,云信的架构特点以及开发者生态等内容。
(网易云信CTO 阙杭宁)
网易IM云演变
云计算的架构,其核心是基于面对服务(SOA)的自动化服务管理架构,其特征是资源池化、通过互联网交付的按需弹性、简单易用、可计量的服务。
网易在即时通讯方面的自主研发已有近10年。网易泡泡是一款和QQ同一时期,也偏于PC时代的即时通讯产品,其架构也一直在持续迭代优化。在移动互联网发展的浪潮中,网易各种移动互联网产品也陆续上线发布,大多数产品都有很强的即时通讯需求,例如云音乐的私信功能、网易花田的社交通信、网易BoBo的连麦等等。云信即在网易泡泡架构的基础上,针对移动互联网的网络特性以及产品特性,做了全面的改造和升级,以基础设施的形态去承载了诸多网易亿级体量的产品稳定运行。
(网易IM云的演变历程)
2015年,为响应政府和总理“互联网+”计划,网易启动了云信对外服务的计划,并立项重构整个云信团队,聚集了网易公司内各团队的专家,并以产品团队牵头,对云信平台对外服务体系进行了设计与落地。也正是因为云信本身基础夯实,有足够重量级的产品开发对接经验以及线上稳定运维服务经验。所以项目启动不到一年,网易云信就通过了严密的测试和内部邀请试用各环节验证,在2015年10月正式对外发布了云信平台。接入网易云信的开发者需要和云信的技术团队、商务团队协作,双方共同努力适应新的部署模式和业务模式,确保IM顺利接入。在这个过程中,需要大量的技术细节沟通和产品代码的调整和对接,双方也要根据具体需要调整自己身产品和平台的功能和实现方式,大量实践之下对于接入IM功能的APP和云信的完善和成熟度也有很好的促进作用。
网易云信架构特点
阙杭宁认为可以用“稳定、务实”两个词来形容云信的架构特征。所谓稳定在上文已经提过产品验证方面的依据,而在架构本身,要做到真正稳定的效果,就需要各环节各子系统都做到抗抖动、抗单点风险和全面的实时监控和自动化应对,这些并不是靠理论基础就实现,需要通过业务实战一步步走过来。网易云信自泡泡开始至今,经过了无数次的技术升级,才有现在的稳定性体现。
“务实”这个词似乎不会用来描述架构,阙杭宁表示他口中的“务实”是指网易云信在面对众多互联网产品上,做了数量庞大的细节优化去提高接入的产品体验,比如移动互联网弱网状态下的实时音视频数据包udp重传算法、舒适噪音、方便移动办公的多端消息漫游同步、可供开发自主定义的多端在线策略等等。同时面对开发者接入难度和便利性上,云信也做了非常多有助于各层次开发者快速自由接入的工作,例如提供了开发文档、入门教学视频、拥有精致交互和视觉的Demo开源项目、开源的UI组件及使用说明、提供了论坛放置了常见问题的处理(如安卓Demo导入的手把手教程)。网易云信实际地解决接入者的问题,并且帮助接入产品拥有和网易产品同样的优质体验。在消息稳定性、实时音视频质量、聊天室并发以及消息到达率和速度上,都有很好的效果。
具体谈到IM云的架构特点,网易云信具有高可用,易扩展等大型分布式服务器架构共有的特征。网易多年以来积累了丰富的设计经验和产品服务经验,比如用于多媒体等文件的对象存储系统、分布式关系型数据库服务、分布式缓存服务、反垃圾集群系统等等,并都在网易系产品中广泛使用;而外部开发者并不能直接获得这些系统为开发工作所带来的便利,而云信作为PaaS平台,也作为媒介为开发者提供了一个良好的访问入口来使用这些服务;也正是有网易内部的平台,云信才能拥有良好的高可用,易扩展等特性,从而为开发者提供稳定的服务。
网易云信的架构选择理念
谈到近年来,新的编程语言(旧编程语言新用)的层出不穷,阙杭宁也分享了他的一些看法以及云信的架构选择理念。开发语言本身,各有优劣,网易云信的考量主要是两个维度,第一是语言本身的普及程度以及语言特性是否可以满足系统需要;第二是团队本身的积累。他表示对于新语言或者新技术,网易云信会积极吸收和探索,但涉及到生产级的服务,云信还是倾向于先选用主流稳定的技术。因为新技术在缺乏大量实际产品验证的情况下,可能会存在一些难填的坑以及待添加完善的服务组件,这种不确定性会对产品和服务的稳定性带来危害进而损害用户的利益,所以云信的生产系统更多是使用成熟的语言来开发。成熟的编程语言代表拥有广泛的开发人员,更加适合大团队的开发作业。
网易云信技术团队倡导的理念是先获得自身技术的突破,等待成熟以后再应用到商品化产品中。例如在保证产品性能稳定的同时,云信积极尝试新的语言和框架,例如网易云信实时音视频相关的新服务中使用了Golang。
对于网易云信技术团队的发展和技术积累来说,阙杭宁希望所有人持有包容的态度来看待和学习新技术,每个云信技术团队成员把自己定位为“程序员”而不是“Java程序员”或“前端程序员”。技术或者语言具有相通性,虽然并不要求团队内每个人都成为全栈程序员,但不断的学习积累有助于团队合作时互换角色思考,提升自身的团队协作能力。
网易云信开发者生态
在开发者方面,网易云信在接口设计上对接口的灵活度和接入便利性一直都有相对全面的考量。网易云信希望把简单易用的接口提供给不同层次的开发者和不同产品场景需求去使用,所以并没有以多版本接口的方式去设计冗繁的API体系,而是在保持向下兼容本身,对接口进行持续迭代优化。考虑到同时面对资深开发人员,网易云信预留了足够自由的参数传入和自由定义发挥空间,几乎所有的子系统上面,都有自定义、用户扩展预留设计的体现。而面对刚入行的开发者,我们在调用示例本身和功能组合上,做了足够丰富的示例和注释,来帮助这些开发者快速的实现自身业务。并在技术支持层面,7*24小时响应接入咨询,来保障对接开发工作的快速顺畅。