欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

打造安全可靠的实时通信服务:OpenIM的实践与方法指南

最编程 2024-07-28 14:42:29
...

即时通讯作为移动应用的常用组件,开发起来却并不简单,除了需要研究通讯协议,保证安全性,还要应对复杂的移动网络情况,以提供高可用性的服务。OpenIM是阿里巴巴推出的,集成于阿里百川项目中的移动端 IM 开放服务。阿里百川是阿里巴巴集团无线开放平台,为移动开发者(涵盖移动创业者)提供快速搭建 APP、加速 APP 商业化、提升用户体验的解决方案。

此文主要记录了 InfoQ 采访该服务研发负责人敖闰,针对如何打造一个高可用的安全可靠的即时通讯服务进行了讨论。

受访者:敖闰(符小宝)

旺旺团队技术总监。一直从事移动互联网相关产品研发工作。加入阿里前,主导开发 Qualcomm BREW 平台上 WWW Embedded Browser。2009 年加入阿里后负责云 OS Framework 及 Apps 工作,2012 年开始负责阿里旺旺团队的研发工作。

Q:请简单介绍一下OpenIM目前的团队配置情况。

OpenIM 来自于旺旺事业部,旺旺事业部历史比较悠久,从 2003 年淘宝成立初期,旺旺团队同时成立,旺旺产品和淘宝一起成长,迅速成长为全球最大的客服沟通平台(日均消息量10亿级,DAU 亿级)。目前团队上百人,包括产品运营团队,技术团队,测试团队等,其中技术团队含 IM 服务端技术团队,及全平台的客户端技术团队(Android, iOS, Windows, Mac, H5) 。已授权 IM 相关专利数近百项。

Q:请介绍一下 OpenIM,以及淘宝为何将这项能力开放出来?在业务上有什么特色?

OpenIM 是阿里巴巴面向应用开发者开放的免费即时通信服务,由阿里旺旺团队提供。作为即时通讯基础组件,已经支持了手机淘宝,阿里旺旺,旺信,天猫,聚划算,去啊等阿里系内部应用。现在,开发者基于 OpenIM,可量身定制“类微信”“类旺信”“类千牛”的应用。
阿里希望构建云(阿里提供的基础服务)+端(各类 APP)的全新移动时代商业生态,来满足消费者个性化、场景化的无线生活和无处不在的需求。移动互联网时代,为了增强人与人之间的连接,各类 App 都需要基础的沟通功能。开发者开发一套高可用性的 IM 系统,成本非常高。我们将拥有 12 年技术沉淀、历经多次双十一考验的即时通讯能力及客服平台能力开放出来,帮助开发者轻松实现沟通功能,降低 App 开发成本。
OpenIM 除了基础的 IM 功能之外,同时开放的还有全球最大的客服平台功能。基于该客服平台的旺旺/千牛,目前在电商行业已服务上千万卖家。

Q:您刚才提到开发者开发一套高可用性的 IM 系统成本非常高,那么大规模的即时通讯在技术上有什么难点?

我们梳理了一下,大概有下面四个技术难点:
如何确保系统的高可用性?因为 IM 服务一旦中断,对用户体验的伤害非常大,所以,一定要保证服务的高可用性。
如何在移动网络环境下优化电量,流量,及长连接的健壮性?现在移动网络有 2G、3G、4G 各种制式,并且随时可能切换和中断,移动网络优化可以说是面向移动服务的共同问题。
如何确保 IM 系统的整体安全?因为用户的消息是个人隐私,因此要从多个层面来保证 IM 系统的安全性。
如何降低开发者集成门槛?这个是针对第三方 IM 服务来说的,如果集成成本太高,开发者用起来不方便,在实际使用中也会出现各种问题。

Q:如何确保 IM 的高可用性?OpenIM 的服务端架构是怎样的?

经过多年双11的考验,我们IM服务的可用性持续保持99.99%以上。旺旺团队逐步形成了系统高可用性解决方案,具体策略包括:
水平伸缩的系统架构:全系统无单点设计,各个业务系统环节均可水平伸缩,同时负载均衡系统,会实时的进行流量分配,让整个系统运行在合理的水位。
异地多活去中心化部署:去中心化的异地多机房部署,多个机房同时提供服务,任何一个点的故障,其他机房能够即时承接。
自动化故障隔离容灾系统:对于服务器的故障,能够实时的检测并且自动的隔离,快速的切换流量到正常的服务器。
完备的监控和预警体系:基于阿里巴巴运维体系的完备的监控和预警,让我们对整个系统的运行状态了如指掌。
图片描述
整个系统分为:
接入层(客户端):负责客户端接入,
接入层(服务端):负责 App Server 和 OpenIM 服务器的对接。
协议路由:消息路由和业务逻辑层,负责消息路由和各种业务逻辑处理;
数据层:负责用户、业务数据的缓存,持久化等。

Q:OpenIM 针对移动网络的特点做了哪些优化?

我们做的优化有:
极简协议:OpenIM 采用完全私有的二进制协议:确保数据加密安全的同时,流量消耗极少。同时心跳包协议对 IM 的电量和流量影响很大,OpenIM 在心跳包协议上进行了极简设计:仅 1 Byte 。
智能心跳:OpenIM 独特的保活机制,自动适应不同的网络环境,智能调整心跳频率,将参数调整到最优状态。
智能唤醒: 众所周知,Android 手机电量消耗一直为大家所诟病。 后台各种应用不断唤醒手机,致使手机待机时间大为缩短。OpenIM 能以最低限度唤醒手机进行必要的保活,保证连接的健康及消息的及时到达: OpenIM 与系统以及其他应用进行交互,如果有其他应用唤醒了手机,OpenIM 将避免冗余唤醒,节约设备的电量消耗。
多路复用,共享连接:OpenIM 的 SDK 广泛使用在阿里的各移动应用中,如手机淘宝、天猫、旺信、千牛、去啊等。通常来说,多个 IM App 会有多条物理 TCP 长连接,OpenIM 支持多应用共享复用一条 TCP 长连接,保活的流量将从 N 倍变为 1 倍; 唤醒手机次数也由 N 个应用唤醒变为1个应用唤醒。由于这些阿里应用覆盖用户群较大,OpenIM 会自动共享阿里应用已经存在的物理连接,极大减少电量和流量开销。
多路复用, 共同保活:同时,Android 系统资源紧张时会在后台清理进程,当某个 OpenIM 所在应用被清理后,通常 OpenIM 消息也就无法实时触达。但由于“多路复用”机制,只要当前任一应用(包括阿里应用)还存活,OpenIM 均能顺利工作,有效提升了长连接的健壮性。

Q:OpenIM在安全上做了哪些事情?

基于旺旺海量消息(每日十亿级)数据样本及旺旺安全的多年技术沉淀,OpenIM 为开发者提供了与支付宝,淘宝,天猫同等级别的安全服务,从账号安全,传输安全,存储安全,内容安全等各个维度提供了完整的安全方案。
帐号安全。 OpenIM 各自域的用户帐号经过 MD5 加密后进行传输和存储,保证开发者用户数据的私密性及安全。OpenIM 客服帐号,享受阿里系账号的所有安全功能:数字证书,一键校验,手机验证等。
数据传输安全。 包括:完全私有的二进制通讯协议;动态秘钥,全链路加密传输。
本地存储安全。 就是将本地数据库加密。
内容安全。
- 恶意内容检测:支持可配置的关键字系统,支持风险提醒和过滤;支持恶意链接(钓鱼链接等)和二维码图片的风险识别:基于阿里系内最大的恶意链接库(WenKing)。
- 反垃圾安全。基于每天海量消息(十亿级)和用户(亿级)综合行为的基础数据,构建的大型反垃圾系统,实现恶意行为的实时监控。基于文本及图片模型的垃圾识别算法,支持恶意内容的实时监控。恶意内容样本的系统自学习,提升系统的召回率。

Q:OpenIM如何降低开发者的集成门槛?

针对客户端集成,OpenIM 对外提供两种集成方式 (OpenIMKit , OpenIMCore), 其中OpenIMKit 提供了高度集成的 IM 组件,用户只需调用三个接口(初始化,登录,创建聊天) 即可完成简单地集成。同时针对用户的定制化需求,OpenIMKit 提供了丰富的定制化接口,用户可以按需定制整体界面及风格。

Q:请介绍一下 OpenIM 未来的计划。

未来我们一方面会丰富即时通讯的能力,不仅是文字、语音、图片、自定义消息,还包括类似VoIP、阅后即焚、收发红包等能力。另一方面,我们会更深入了解垂直类行业 App 的沟通诉求,结合客服能力特色,为不同行业的 App 提供基础定制即时通讯的解决方案,比如社交互动、企业协同、生活服务等。

推荐阅读