【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

网易云信周梁伟专访:亿级架构 IM 平台的技术难点解析

  • 2018-09-19
  • 本文字数:3853 字

    阅读完需:约 13 分钟

自从 8 月 20 号子弹短信在锤子发布会露面之后,关于它的讨论不绝于耳,7 天融资 1.5 亿的传闻更是将它推到了风口浪尖。同时很多技术人开始分析它的代码,挖出了它的 IM 系统其实不是自研,而是使用网易云信提供的第三方服务。有人质疑说,第三方的 SDK 做一个 demo 跑跑还可以,能拿来开发正式产品吗?本文就想来谈谈 IM 开发的难点以及目前第三方 IM 服务的现状。

其实,在 RTC 实时通信领域,近年来的研发重点并不是 IM,而是由直播带火的实时音视频,随着 5G 的到来,WebRTC、SD-RTN、AV1 等新兴技术正在快速的发展当中。相对来说,IM 的技术已经比较成熟了,据了解,从子弹短信上线以来,到现在近 800 万激活用户,其服务一直保持稳定运行中。其背后的网易云信即可作为一个研究的案例,InfoQ 对网易云信首席架构师周梁伟进行了采访,本文根据采访内容整理成文。

IM 开发当中的技术难点

周梁伟介绍,子弹短信目前主要使用网易云信即时通信的核心功能,比如 IM 的移动通信,包括图片、文件等等;同时也使用了视频通话的功能,包括点对点,以及群聊形式的视频和语音通话。在发布会的介绍中重点演示的语言转文字功能并非网易云信提供,据猜测应该使用的是锤子手机之前使用过的语音处理服务提供商科大讯飞提供的功能。

对于 IM,更关注的是社交产品用户体验层面的东西。具体来说就是怎么构建一个更好的沟通逻辑,更快速的帮助用户达到更好的沟通效果?这其实也是子弹短信瞬间能够火起来的重要原因。

所以,IM 开发中的技术难点就在于对用户体验的追求。

首先,IM 核心关注点一是消息传输的速度要快,涉及延时方面的问题;第二个是要保证消息的送达率。同时,现在用户的设备多样化,IM 通常需要支持多设备,又涉及到一个多终端消息同步的问题。

其次,IM 产品的用户量和活跃度通常都很大,在一些特殊的时间点经常容易造成流量的波峰,因此技术上需要能够应对突发的量级。所以在前期需要设计好弹性扩容,对系统的伸缩能力提前做好设计。

最后,IM 包含用户的大量隐私,一旦被黑客攻破不堪设想,同时在公共安全方面的影响也越来越受重视,因此很多 IM 产品都投入精力做内容安全、平台可控方面的工作。

IM 通信协议设计的考量

其实在上面没有提到一点,也是在 IM 中最为核心的一点,就是通信协议的开发。在这方面,目前行业里有一些开源的方案如 XMPP、MQTT 等,但是,这些开源的方案对后期产品的增长,用户量级的突发式爆增是非常不利的。原因有几方面,一个是这些开源项目出现的较早,其实并没有考虑到移动互联网 2/3/4G 等复杂的网络情况,包括应对电信运营商在信令等方面的复杂设置,另外,目前鲜有对这些开源技术软件和服务把控度比较强的技术团队,难以进行源码级的扩展和修改,出现问题也难以及时解决,以及商业化 IM 里消息的传递在过程中是否安全可控是非常核心的要求,如果使用一些标准的协议,就代表了这个东西是开放的,也就是说是有能够被破解的潜在风险,在企业服务场景里有些企业也因此而拒绝通信协议的开源。因此,包括 QQ、微信等在内的很多 IM 产品的通信协议都是自研的。

一个成熟的通信协议都是多年经验沉淀下来的,网易云信的 IM 服务并不是凭空产生,而是继承了之前网易泡泡、易信的技术。对于通信协议需要关注的地方,周梁伟介绍,云信的私有协议首先关注几个层面,一是安全性,也就是通信过程中所有数据序列化的算法、加密的机制,以及加密的级别,全都是自己定义的。同时也考虑到,在整个传输的过程中可能长期存在的安全风险,比方第三方的攻击,以及数据在网络流转过程中被拷贝和重放的潜在安全风险,这些在设计过程中都需要被规避掉。

第二个,因为现在即时通信更多的往移动互联网方向发展,用户的网络环境具有非常强的多变性,经常属于跨网和弱网的环境下,所以传输协议非常关注对消息的压缩,以及网络带宽的占用,网易云信在这方面也做了很多的工作。这也和标准协议有差别,标准协议的消息结构都是 JSON 或 XML 格式,承载同样的有效内容,最终呈现出来的消息体会变得非常庞大,但在这一块私有协议可以做得非常好。

还有一个很重要的方面是私有协议对扩展性的支持,传统的协议不能做到很好的扩展,或者做完扩展后整个消息会变得非常大。对私有协议来说,可以随时的做各种场景的定义、各种新协议的增加和各种版本的兼容。

如何做到高到达率和低延迟

对一个 IM 平台来说,到达率和即时性是两个核心功能点。对于消息传输机制的设计来说,首先设计的时候把 100% 的送达率作为一个核心要求,关键性的指标,要抱着必须要达到的态度来设计。

主要的技术手段是通过不同消息类型的相互组合来补充。

消息类型分为以下几种,一种是在线消息,在线消息是指双方用户都处于实时在线的情况,在网络中实时送达。如果用户当时不在线,可能处于暂时离线的状态,我们把消息在缓存中存下来,缓存的消息可以保证更高的读取效率,用户下次上线的时候可以很快的取回来。

但仅仅靠在线和缓存是不够的,因为缓存可能会丢,网络可能出现会丢包,所以我们在数据库里储存关键消息。这类的消息是强一致性的要求,用户发送完成之后,服务端必须要确认数据被存入关键数据库里,否则客户端上的表现是消息未发送成功,是可以触发到上层去从事这种机制的。

存在数据库里的消息,用户可以在更长时间的离线以后实时同步,即使缓存里没有也可以拿到。另外还要考虑更长时间范畴的消息存储,应用的场景是什么呢?用户可能一个月以前开始使用这个 IM 产品,或者 1 年前使用了这个 IM 产品,现在更换手机了,更换手机以后消息如何在新手机上拿到?这种称为云端的历史消息。在所有消息的流转的过程中,这个消息到最后被存储在数据仓库里,数据仓库存储消息的时间维度可能是 1 年或者几年。在用户跨平台或者更换新设备之后,可以随时从云端再获取到这部分的消息。通过不同消息的相互组合之后,我们是可以达到消息 100% 送达的效果。

另外,从即时性的角度来说,现在的 IM 基本都采用长连接的方案作为消息实时送达的渠道。因为现在的移动设备对于 App 在后台的服务有限制,以前 Android 上还流行过后台保活、互相唤醒等等方式,在 Android 系统更新和手机厂商打压下逐渐消失,现在基本都是接入各大推送平台,IM 消息即时性在 App 开发者这里能做的不多,主要看推送服务的实力了。

IM 实时消息监控和分析

有一个以前人们不怎么提,但实际存在的问题,就是 IM 的合规。IM 是谣言等不良信息的高发地,在印度,WhatsApp 上谣言流传致使私刑案频发,到目前印度官方仍束手无策。

周梁伟介绍,IM 通信平台目前承载很多很重要的功能是传统运营商做的部分业务。以前我们用短信、电话,现在大家转移到即时通信的工具上,对监管层来说是有要求的。从平台角度来说,本身做的是一个消息通道的功能,消息就代表了会有舆论的传播,特别在群组或者聊天室这样参与者众多的状态下,所以舆论监管对平台来说是必须承担的责任,这是监管层面对平台运营方的要求。平台必须具备内容审核的能力,云信会按照开发者的配置把平台上产生的内容在云端保存起来,以备监管层随时做内容的审核。

同时在开发者 APP 运营的层面,内容运营或者内容审核、内容安全运营都是非常重要的范畴,目前网易云信和子弹短信在一起合作解决这样的问题。网易云信有一个专门的团队会负责内容审核的工作,包括会对所有的数据提取特征,会去做同步的、实时的内容审核,以及异步的内容审核,甚至涉及到机器学习的功能和人工介入审核的工作。

从技术层面来说,关于内容审核,目前用到产品上有两种场景,一种是同步审核,在消息发送过程中,这个消息就可以直接进入到内容审核系统里进行识别,如果识别出来有敏感词或者安全风险,会直接拦截掉。在第一时间避免消息的传播。还有一种内容,用户发的视频文件和非常大的图片,像这样的内容做实时审核会带来比较高的时间成本,这种情况下云信目前的做法是采用异步审核,消息投递出去了会进入审核系统,里面有机器算法的部分和人工审核的部分去进行鉴别,一旦审核出此消息违规,会触发 IM 消息撤回和删除的能力,避免风险的二次传播。

如何保证消息安全性

对 IM 来说,除了用户数据需要做安全防范外,还需要关注消息内容的安全。包括两个层面,一个是消息传输层面的安全,在传输过程中,通过协议和加密,以保证传输过程中的消息是不可逆的。恶意用户即使抓到网络传输的包也没有办法破译出来。同时,加密级别做到会话级别,是指一个用户的一次长链接行为,即使同一个用户多次登录,或者在不同时间点登录,加密的密钥都是不一样的。所以能够保证传输过程中是安全的。

第二个维度是,消息存储过程中是安全的。这里分为几个角度,一是对数据做自定义的序列化的方式,包括数据存储后,序列化或反序列化过程中的效率更高。二是如果泄露,是不可见、不可读的。另外,对于关键数据需要做加密,避免出现脱库之类的行为。

另外,周梁伟表示,用户怎么使用云平台才能在过程中保证业务数据的安全,一般他们会建议,在使用平台的时候对业务数据做脱敏。比如说开发者自己的平台是用用户的手机号作为用户账号的,在云信里面注册用户的账号的时候,可以在业务层做一个关联。使用随机数或者随机的、无意义的字符串作为云平台数据库里的 ID,手机号的映射关系仅仅在业务方。通过这种脱敏保证数据的安全。

结语

看完上面的内容,想必你对 IM 系统研发会遇到哪些问题,以及相应的解决方案有了大致的概念。当然这里只提到了其中的一些,还有其它方面,比如不同用户量级的系统需要不同的架构,QQ 在它的发展过程中就经历多次重构,感兴趣的同学可以在 InfoQ 网站搜索相关的文章。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2018-09-19 04:033482
用户头像

发布了 164 篇内容, 共 103.4 次阅读, 收获喜欢 391 次。

关注

评论 1 条评论

发布
用户头像
能转载吗
2019-04-02 10:39
回复
没有更多了
发现更多内容

PHP调用API接口的方法及实现

Noah

那位拿了多个Offer的大佬分享了最新Go面经

王中阳Go

Go 后端 Go 面试题 面经 后端 大厂

Set A Light 3D Studio for Mac(3D摄影棚布光工具)v2.58d永久试用版

影影绰绰一往直前

AutoMQ 社区双周精选第九期(2024.03.11~2024.03.22)

AutoMQ

大数据 kafka 云原生 AutoMQ

macOS Sonoma 14.4.1 (23E224) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos Sonoma macOS Sonoma

基于 NVIDIA Megatron-Core 的 MoE LLM 实现和训练优化

阿里云大数据AI技术

人工智能 模型训练 大模型 LLM

深度|庖丁解InnoDB之Buffer Pool

阿里云瑶池数据库

数据库 云计算 阿里云 polarDB

Rectangle Pro for Mac(光标快速移动和管理窗口的工具)v3.0.21激活版

影影绰绰一往直前

MindNode for mac(思维导图软件)v2023.3.1中文激活版

影影绰绰一往直前

Go代码优化实用指南

俞凡

golang

云手机:实现便携与安全的双赢

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 电商云手机

野心、梦想与科幻——浅谈外星殖民与软件工程

博文视点Broadview

保姆级教程:教你UniMRCP对接华为云ASR(Linux版)

华为云开发者联盟

开源 开发 华为云 华为云开发者联盟

一文带你完整了解Go语言IO基础库

百度Geek说

go语言

QCA9882, QCA9880, and MT7915 WiFi cards for OpenWrt:What are the difference?

wallyslilly

QCA9880

云手机为什么能避免海外社媒账号被封?

Ogcloud

TikTok 云手机 海外云手机 tiktok云手机 云手机海外版

无人不识又无人不迷糊的this

华为云开发者联盟

Java JavaScript 开发 华为云 华为云开发者联盟

与鲸同行,智领未来!和鲸科技高校市场渠道招募启动会顺利召开

ModelWhale

人工智能 软件 数据科学 渠道招募 高校市场

有了这 4 款脚本工具, 再也不怕写烂SQL了!!!

Java技术精选

网心科技入选“2023年中国云生态创新应用技术产品”

网心科技

云计算 边缘计算 网心科技

如何培养高质量应用型医学人才, “课-训-赛”育人才系列第二场直播活动圆满结束

ModelWhale

人才培养 数据科学 复合型人才 医学 应用型人才

NFTScan 正式上线 Polygon zkEVM NFTScan 浏览器和 NFT API 数据服务

NFT Research

NFT\ NFTScan

网心科技入选“2023年广东省名优高新技术产品”名单

网心科技

云计算 边缘计算 网心科技

使用云手机提升WhatsApp使用体验

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 电商云手机

HashData的湖仓一体思考:非结构化数据支持(Directory Table等)讲解及演示

酷克数据HashData

postgresql AI 湖仓一体

数字化与敏捷的关系(第2部分)

ShineScrum捷行

我们所面临的云原生安全问题

德迅云安全杨德俊

软件测试学习笔记丨Allure2报告中添加用例支持tags标签

测试人

软件测试

数字人交互机:提升社区参与度的智能助手!

青否数字人

AI时代来临我们要如何面对?

小魏写代码

How Big Data Works

Jackchang234987

网易云信周梁伟专访:亿级架构IM平台的技术难点解析_DevOps & 平台工程_徐川_InfoQ精选文章