Jack Jiang

我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
posts - 467, comments - 13, trackbacks - 0, articles - 0

     摘要: 本文由QQ音视频团队贺坤分享原题“Linux QQ能打语音视频了!一文详解背后技术实现!”,下文进行了排版和内容优化等。1、引言2024年6月6日,QQ For Linux 3.2.9 正式支持了音视频通话功能,这是 QQ Linux 版本的又一个里程碑事件。 2024 年,QQ 音视频正式推出 NTRTC,全平台(iOS/Android/MacOS/Windows/Lin...  阅读全文

posted @ 2024-07-04 11:31 Jack Jiang 阅读(89) | 评论 (0)编辑 收藏

本文由爱奇艺技术团队分享,作者isno,原题“爱奇艺海外App的网络优化实践”,下文进行了排版和内容优化等。

1、引言

做海外市场,特别目标是面向全球的用户,网络的重要性不言而喻。试想一个移动端应用,比如即时通讯IM,聊天消息的本质就是人跟人在说话,一条消息从发送到接受需要10秒的时间,这恐怕会让用户崩溃,随之就是被无情地卸载,开拓海外市场那就是做梦了。

本次分享的文章内容,基于爱奇艺面向全球用户推出的国际版,在海外跨国网络环境复杂的前提下,针对性地做了一系列弱网优化实践,取得了不错的效果,在此总结分享我们的一些做法和优化思路,希望对你有所帮助。

总结下来,跨国弱网优化实践的几个核心就是:

  • 1)能不请求网络就不请求;
  • 2)请求的链接目标 0-RTT;
  • 3)请求的内容越小越好。

正文内容我们将逐个技术点展开了分享。

 
 

2、系列文章

本文是系列文章中的第 3 篇,本系列文章的大纲如下:

  1. 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
  2. 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
  3. 移动端IM开发者必读(三):爱奇艺移动端跨国弱网通信的优化实践》(* 本文)

如果您是IM开发初学者,强烈建议首先阅读《新手入门一篇就够:从零开发移动端IM》。

3、 跨国弱网样本摸底

在 App 初期版本内增加请求链路的采样。样本数足够的情况下,可以清楚你要推广的市场是怎样的环境。样本数据让我们清楚发现了各个国家、地区网络的问题,在大规模宣传和投入前,做好 App 的基础工作非常重要。

海外用户至海外数据中心的网络延迟(这是监测节点数据,用户端延迟更高):

海外主要国家、地区移动网络情况:

在调研阶段,我们发现了以下问题比较明显,切实影响我们的运营及 App 体验。

这些问题主要是:

  • 1)运营商劫持严重,DNS 劫持、HTTP 劫持;
  • 2)移动端网络复杂 ,东南亚的网络基础建设还待改善;
  • 3)低端 Android 机有一定的占比,数量级别影响决策;
  • 4)国际网络用户端到服务器的延迟高。

在初期阶段,技术工作的核心是解决以上问题,为后续的运营做好基础建设。因为业务接口大部分为 HTTP 形式,就开始围绕 HTTPS 进行针对性改进。

一个HTTPS请求阶段分析:

一个 HTTPS 在第一请求会有 5 个 RTT:

1RTT(DNS)+ 1RTT(TCP 握手)+ 2RTT(TLS1.2)+ 1RTT(HTTP 链接)

如果以端到服务 50ms 延迟为例:

一个 HTTPS 的接口延迟 =  350ms =  50*5+ 100ms(服务端)

如果目标是一个非国内用户,打开首页需要 1.1s, 这个时间显然有点长。

下面开始进行技术改进的正文,以下是概括技术性优化的关键点:

4、基础链路的改进优化

4.1DNS 优化调整

DNS 的解析改为 HTTPDNS,DNS 的改进上线后观察初始连接请求提升 17% 的效率。

目的主要是:

  • 1)解决域名劫持问题 (东南亚地区回传的数据显示有不少劫持);
  • 2)解决 LocalDNS 非就近分配问题;
  • 3)结合业务可以做解析预热。

4.2传输层的优化调整

MTU 的问题 :

  • 1)Client 端和 Server 端不同的 MTU 值会导致丢包率过高。AWS 某些场景实例默认巨型帧:MTU 是 9001,但接收端默认 1500,这时候就会出现一些丢包的现象;
  • 2)如果你用了多个云商服务,用 VPN 组网,IP隧道封装的数据临界 1500,又会造成丢包、包重传问题;
  • 3)最严重的情况:部分网络封杀 ICMP 协议,导致 MTU 无法自动协商。

TCP 拥塞控制优化:

拥塞窗口 CongWin 是未接收到接收端确认情况下连续发送的字节数; 。CongWin 是动态调整,取决于带宽和延迟的积,比如 100MB 的带宽 100ms 的延迟环境。

时延带宽积 = 100Mbps*100ms = (100/8)*(100/1000) = 1.25MB

理论上 CongWin 窗口可以最大化到 1.25MB。CentOS 默认CongWin = 20*MSS,在 29KB 左右,离上限 1.26MB 差太多了,默认值上调TCP的启动会更快。

TCP 快速打开 (TCP Fast Open:TFO):

TCP 的 keepalive 下依然会有链接断掉重建的情况,TFO 是针对这种情况的优化。

TFO 的原理机制:

在我们观察中开启 TFO 机制,海外业务一个 RTT 通常时间在 100ms 以上,HTTP 请求效率提升了 12% 左右。

5、应用层的改进优化

5.1HTTP 的优化

HTTP1.1 有个 keep-alive 作用是复用 TCP 链接,减少新建的消耗,对于浏览器的业务比较适用,但对于移动端这种时间分散的请求,大部分请求还是新建连接。

HTTP1.1 的串行机制有头部阻塞的问题。

5.2SSL 层优化

尽量升级到 TLS1.3(微信的TLS1.3实践:《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》),利用 Pre-shared Key 机制,开启 ssl_early_data 可以进一步优化 “0-RTT ”,如果无法升级 TLS 版本,优化密钥算法为 ECDHE,运算速度快,握手的消息往返由 2-RTT 减少到 1-RTT,能达到与 TLS1.3 类似的效果。

TLS 版本的区别:

TLS1.3 经过优化后,一个 HTTP 请求由之前的 4 个 RTT 减少为 3 个 RTT。

5.3升级 HTTP2.0

几个重要的改进点:

  • 1)分帧传输;
  • 2)多路复用;
  • 3)头部压缩。

多路复用:

在 HTTP/2 中,两个非常重要的概念:帧(frame)和流(stream)。帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。多路复用,就是在一个 TCP 连接中可以存在多条流。这些改进可以避免 HTTP 队头阻塞问题,提高传输性能。

头部压缩:

开发人员如果不注意对 header 内容的控制,会造成 header 内容失控的现象,客户端极容易存储一个非常大的 Cookie。

HTTP2 的分帧传输机制:

5.4边缘节点动态加速

这个是非常有效的方式。

尽可能离用户最近,利用边缘节点对路由、链路进行优化,提高动态服务的效率。相较于直连模式,使用动态加速后,P90 的接口延迟效率提升了 60%。

爱奇艺海外动态加速的效果提升(请求时间为秒):

5.5启用兜底机制

对于失败的请求,启用兜底的协议 QUIC 或者 kcp。

客户端的失败率在 3% 左右,对这部分请求使用 UDP 协议兜底尝试,在我们的观察成功率提升了 45%。

6、传输内容的优化

6.1应用 Brotli

因为预置了字典,在同等级别的压缩率下,对比 gzip 至少提升了 17% 的压缩比,接口平均的 Content-Size 由 30KB,降至 18KB。

6.2接口由 JSON 改为 Google Protobuf

应用 Protobuf 的重要原因是解析效率比 JSON 至少高四五倍,在节点深度和数据量大的情况下更明显。

但注意 Protobuf 内部的 varint 压缩,只对小于 128 的数字进行可变长压缩。实际效果不大,生产环境如果数据量大,外层的压缩如 gzip 不可少。

PS:关于Protobuf的资料,可以进一步阅读《IM通讯协议专题学习》。

6.3图片格式升级为 WebP

在应用 WebP 的同时,降低海报图片的质量,实践看海报的 quality 设置为 85% 肉眼难以分辨,相对同质量的 JPEG 或者 PNG ,可以最大减小 45% 的体积。

应用效果明显。App 打开首页图片的加载提升肉眼可见。

7、业务层面的优化改进

7.1减少不必要请求:

一些通用内容,如导航、频道,通常由运营人员主动更新。

如下图:增加一个启动阶段请求的接口,里面放入内容更新的时间戳,与本地 cache 的时间戳有差异,则异步请求更新。

 

7.2区别用户网络,适应不同的策略

具体作法是:

  • 1)对于视频,非 WiFi 默认启播码率为 360P;
  • 2)对于海报,后端接口提供两种质量的 Url,WiFi 高质,4G 低质。

7.3更多的业务优化

增加请求重试、调整 HTTP 的超时时间,请求缓存等等  这些可以根据业务的需求进行调整。

8、本文小结

爱奇艺海外版APP经过一系列细节优化,用户体验持续上升。用户接口延迟、客户端失败率、视频播放成功率一系列的关键指标得到很大的改善。这也助力爱奇艺在东南亚多个国家的应用市场排名升至 TOP 1。

另外 App 优化、Server 延迟优化、产品体验的改进,这一系列只有相辅相成才可以最大化提升用户体验。

9、参考资料

[1] TCP/IP详解 - 第17章·TCP:传输控制协议

[2] 网络编程懒人入门(三):快速理解TCP协议一篇就够

[3] 新手入门一篇就够:从零开发移动端IM

[4] 现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障

[5] 全面了解移动端DNS域名劫持等杂症:技术原理、问题根源、解决方案等

[6] 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半

[7] 百度APP移动端网络深度优化实践分享(一):DNS优化篇

[8] 百度APP移动端网络深度优化实践分享(二):网络连接优化篇

[9] 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

[10] 爱奇艺移动端网络优化实践分享:网络请求成功率优化篇

[11] 美团点评的移动端网络优化实践:大幅提升连接成功率、速度等

[12] 淘宝移动端统一网络库的架构演进和弱网优化技术实践

[13] 谈谈移动端 IM 开发中登录请求的优化

[14] 移动端IM开发需要面对的技术问题(含通信协议选择)

[15] 简述移动端IM开发的那些坑:架构设计、通信协议和客户端

[16] 微信对网络影响的技术试验及分析(论文全文)

[17] 腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(上篇)

[18] IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!

[19] 微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解

[20] IM通讯协议专题学习(一):Protobuf从入门到精通,一篇就够!


(本文已同步发布于:http://www.52im.net/thread-4669-1-1.html

posted @ 2024-06-27 11:51 Jack Jiang 阅读(84) | 评论 (0)编辑 收藏

一、关于RainbowChat-Web

RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址)  的产品级移动端IM系统)。

二、v7.0 版更新内容

此版更新内容更多历史更新日志):

  • 1)[bug] [前端]    - 解决了断网重连后,首页“消息”列表中的item选中状态会消失的问题;
  • 2)[bug] [前端]    - 解决了“清屏”功能不能清除群聊缓存的问题;
  • 3)[bug]  [服务端] - 解决了消息撤回时,被引用消息的历史记录没有被正确处理;
  • 4)[新增] [前端]    - 新增“@”功能;
  • 5)[新增] [前端]    - 新增消息引用功能(支持引用全部消息类型);
  • 6)[新增] [前端]    - 启用了新的“加载更多”功能,支持动态分页加载,提升大量历史聊天记录下的用户体验;
  • 7)[优化] [前端]    - 首页消息列表中的语音消息将显示时长(跟新版微信一样);
  • 8)[优化] [前端]    - 优化了聊天消息中的网址链接显示(自动解析超链接);
  • 9)[优化] [前端]    - 大幅提升聊天界面中加载大量消息时的ui渲染性能;
  • 10)[优化] [前端]   - 其它ui和体验的小细节优化;
  • 11)[优化] [服务端] - 为“接口1008-26-7”增加了“at_me”字段的返回;
  • 12)[优化] [服务端] - 优化了“接口1008-26-8”,使聊天记录支持按时间戳的分页加载方案;
  • 13)[优化] [服务端] - 升级了包括log4j2等在内的一些基础库版本。

三、v7.0 版新增主要特性截图

“@”功能功能运行截图查看演示视频更多运行截图):

“消息引用”功能(查看演示视频更多运行截图):

 

posted @ 2024-06-24 13:25 Jack Jiang 阅读(48) | 评论 (0)编辑 收藏

     摘要: 本文由腾讯技术kernel分享,原题“TCP经典异常问题探讨与解决”,下文进行了排版和内容优化等。1、引言TCP的经典异常问题无非就是丢包和连接中断,在这里我打算与各位聊一聊TCP的RST到底是什么?现网中的RST问题有哪些模样?我们如何去应对和解决?本文将从TCP的RST技术原理、排查手段、现网痛难点案例三个方面,自上而下、循序渐进地给读者带来一套完整的分析方法和解决思路...  阅读全文

posted @ 2024-06-20 12:49 Jack Jiang 阅读(88) | 评论 (0)编辑 收藏

     摘要: 本文由环信技术黄飞鹏分享,原题“实战|如何利用 Electron 快速开发一个桌面端应用”,本文进行了排版和内容优化等。1、引言早就听说利用Electron可以非常便捷的将网页端快速打包成桌面应用,并且利用 Electron 提供的 API 调用可以使用原生桌面 API 一些高级功能。于是这次借着论证 Web IM端 SDK 是否可以在 Electron 生成的桌面端正常稳...  阅读全文

posted @ 2024-06-13 11:53 Jack Jiang 阅读(65) | 评论 (0)编辑 收藏

为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第 40 期。

[- 1 -] 一个基于长连接的安全可扩展的订阅/推送服务实现思路

[链接] http://www.52im.net/thread-776-1-1.html

[摘要] 本文将从如何保证连接的业务安全(禁止非业务认证的连接订阅消息)和如何扩展能够支持更多的消息和连接两点展开分析。


[- 2 -] 实践分享:如何构建一套高可用的移动端消息推送系统?

[链接] http://www.52im.net/thread-800-1-1.html

[摘要] 本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢失、延迟,接入复杂性,统计缺失等问题,提供了一整套平台级的高可用消息推送解决方案。实践中,借助于该平台,不仅能提能显著提高消息到达率,还能提高研发效率,并道出了移动开发基础设施的平台化架构思路。


[- 3 -] Go语言构建千万级在线的高并发消息推送系统实践(来自360公司)

[链接] http://www.52im.net/thread-848-1-1.html

[摘要] 本文内容整理自奇虎360公司的周洋在 Gopher China 2015 大会上的分享(演讲PPT下载:《Go语言构建高并发消息推送系统实践PPT(来自奇虎360)[附件下载] 》),该次分享以360海量在线的消息推送系统为例,来探讨使用Go语言构建高并发消息推送系统时所遇到的问题以及总结出的各种实践技巧。


[- 4 -]腾讯信鸽技术分享:百亿级实时消息推送的实战经验

[链接] http://www.52im.net/thread-999-1-1.html

[摘要] 本文整理了此次甘恒演讲的内容并以文字的方式分享给大家,希望能给技术同行带来一些技术上的启发。



[- 5 -] 百万在线的美拍直播弹幕系统的实时推送技术实践之路

[链接] http://www.52im.net/thread-1236-1-1.html

[摘要] 本文作者是美拍的架构师,经历了直播弹幕从无到有,从小到大的过程,借此文为大家分享构建弹幕系统的经验,希望能为正在开发或正打算开发弹幕、消息推送、IM聊天等系统的技术同行带来一些启发。


[- -] 京东京麦商家开放平台的消息推送架构演进之路

[链接] http://www.52im.net/thread-1321-1-1.html

[摘要] 我会详细的介绍下京麦实时消息推送是如何在演变中不断完善的。


[- 7 -] 了解iOS消息推送一文就够:史上最全iOS Push技术详解

[链接] http://www.52im.net/thread-1762-1-1.html

[摘要] 本文将对iOS Push的在线push、本地push及离线(远程)push进行了详细梳理,介绍相关逻辑、测试时要注意的要点以及相关工具的使用。


[- 8 -] 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)

[链接] http://www.52im.net/thread-1820-1-1.html

[摘要] 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力。


[- 9 -]  解密“达达-京东到家”的订单即时派发技术原理和实践

[链接] http://www.52im.net/thread-1928-1-1.html

[摘要] 本文将描述“达达-京东到家”的订单即时派发系统从无到有的系统演进过程,以及方案设计的关键要点,希望能为大家在解决相关业务场景上提供一个案例参考。


[- 10 -] 技术干货:从零开始,教你设计一个百万级的消息推送系统

[链接] http://www.52im.net/thread-2096-1-1.html

[摘要] 本文主要分享的是如何从零设计开发一个中大型推送系统,因限于篇幅,文中有些键技术只能一笔带过,建议有这方面兴趣的读者可以深入研究相关知识点,从而形成横向知识体系。


[- 11 -] 长连接网关技术专题(四):爱奇艺WebSocket实时推送网关技术实践

[链接] http://www.52im.net/thread-3539-1-1.html

[摘要] 本文分享了爱奇艺基于Netty实现WebSocket长连接实时推送网关时的实践经验总结。


[- 12 -] 喜马拉雅亿级用户量的离线消息推送系统架构设计实践

[链接] http://www.52im.net/thread-3621-1-1.html

[摘要] 本文分享的离线消息推送系统设计并非专门针对IM产品,但无论业务层的差别有多少,大致的技术思路上都是相通的,希望借喜马拉雅的这篇分享能给正在设计大用户量的离线消息推送的你带来些许启发。


[- 13 -] 直播系统聊天技术(三):微信直播聊天室单房间1500万在线的消息架构演进之路

[链接] http://www.52im.net/thread-3376-1-1.html

[摘要] 本文将回顾微信直播聊天室单房间海量用户同时在线的消息组件技术设计和架构演进,希望能为你的直播聊天互动中的实时聊天消息架构设计带来启发。


[- 14 -] 直播系统聊天技术(四):百度直播的海量用户实时消息系统架构演进实践

[链接] http://www.52im.net/thread-3515-1-1.html

[摘要] 本文主要分享的是百度直播的消息系统的架构设计实践和演进过程。


[- 15 -] 消息推送技术干货:美团实时消息推送服务的技术演进之路

[链接] http://www.52im.net/thread-3662-1-1.html

[摘要] 本文将首先从Pike的系统架构升级、工作模式升级、长稳保活机制升级等方面介绍2.0版本的技术演进,随后介绍其在直播、游戏等新业务场景下的技术特性支持,并对整个系统升级过程中的技术实践进行了总结。


[- 16 -] 揭秘vivo百亿级厂商消息推送平台的高可用技术实践

[链接] http://www.52im.net/thread-4416-1-1.html

[摘要] 本文将要分享的是vivo技术团队针对消息推送系统的高并发、高时效、突发流量等特点,从长连接层容灾、逻辑层容灾、流量容灾、存储容灾等方面入手,如何保证百亿级厂商消息推送平台的高可用性的。


[- 17 -] 得物从零构建亿级消息推送系统的送达稳定性监控体系技术实践

[链接] http://www.52im.net/thread-4614-1-1.html

[摘要] 本文分享的是得物针对现有的消息推送系统的消息送达耗时、实时性、稳定性等方面问题,从零到一构建完整的消息推送质量监控体系和机制的技术实践。


[- 18 -] B站千万级长连接实时消息系统的架构设计与实践

[链接] http://www.52im.net/thread-4647-1-1.html

[摘要] 本文将介绍B站基于golang实现的千万级长连接实时消息系统的架构设计与实践,包括长连接服务的框架设计,以及针对稳定性与高吞吐做的相关优化。


👉52im社区本周新文:《IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践》,欢迎阅读!👈

我是Jack Jiang,我为自已带盐!https://github.com/JackJiang2011/MobileIMSDK/

posted @ 2024-06-12 14:54 Jack Jiang 阅读(52) | 评论 (0)编辑 收藏

     摘要: 本文由腾讯梁中原分享,原题“红包算法揭秘!哪段代码让你只抢了0.01元?”,下文进行了排版和内容优化等。1、引言在上一篇《来看看微信十年前的IM消息收发架构,你做到了吗》的文章中,有用户提到想了解自己每次微信红包只能抽中 0.01 元的反向手气最佳是怎么在技术上实现的,于是就有了本篇文章的诞生。其实,微信红包最初在产品设计上有过很多思路,最初曾以多档次、按比例分配的方式,但...  阅读全文

posted @ 2024-06-06 12:45 Jack Jiang 阅读(55) | 评论 (0)编辑 收藏

为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第 39 期。

[- 1 -] iOS的推送服务APNs详解:设计思路、技术原理及缺陷等

[链接] http://www.52im.net/thread-345-1-1.html

[摘要] 本文重点介绍APNs的设计思路、技术原理以及各种缺陷槽点,也希望能给自已设计推送系统的同行带来启发。

[- 2 -] 信鸽团队原创:一起走过 iOS10 上消息推送(APNS)的坑

[链接] http://www.52im.net/thread-862-1-1.html

[摘要] 集成推送需要注意些什么?集成之后,怎样确认自己是否正确集成了远程消息推送呢?

[- 3 -] Android端消息推送总结:实现原理、心跳保活、遇到的问题等

[链接] http://www.52im.net/thread-341-1-1.html

[摘要] 最近研究Android推送的实现, 研究了两天一夜, 有了一点收获, 写下来既为了分享, 也为了吐槽. 需要说明的是有些东西偏底层硬件和通信行业, 我对这些一窍不通, 只能说说自己的理解.

[- 4 -] 扫盲贴:认识MQTT通信协议

[链接] http://www.52im.net/thread-318-1-1.html

[摘要] MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。

[- 5 -] 一个基于MQTT通信协议的完整Android推送Demo

[链接] http://www.52im.net/thread-315-1-1.html

[摘要] 本文主要介绍的是基于MQTT实现一个简单的Android消息推送系统。更多推送技术资料请见:http://www.52im.net/forum.php?mod=collection&action=view&ctid=11

[- 6 -] 求教android消息推送:GCM、XMPP、MQTT三种方案的优劣

[链接] http://www.52im.net/thread-314-1-1.html

[摘要] 对各个方案的优缺点的研究和对比,推荐使用MQTT协议的方案进行实现,主要原因是在文中。

[- 7 -] IBM技术经理访谈:MQTT协议的制定历程、发展现状等

[链接] http://www.52im.net/thread-525-1-1.html

[摘要] MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。

[- 8 -] 移动端实时消息推送技术浅析

[链接] http://www.52im.net/thread-288-1-1.html

[摘要] 本文将从移动端无线网络的特点来谈谈实时消息推送的技术原理及相关问题,希望能给你带来些许启发。

[- 9 -]  扫盲贴:浅谈iOS和Android后台实时消息推送的原理和区别

[链接] http://www.52im.net/thread-286-1-1.html

[摘要] 本文将从原理上谈谈两个平台上实时消息推送的区别。

[- 10 -] 绝对干货:基于Netty实现海量接入的推送服务技术要点

[链接] http://www.52im.net/thread-166-1-1.html

[摘要] 通过本文的案例分析和对推送服务设计要点的总结,帮助大家在实际工作中少走弯路。

[- 11 -] 移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)

[链接] http://www.52im.net/thread-122-1-1.html

[摘要] 本文主要内容由微信开发团队人员编写,来自 WeMobileDev

[- 12 -] 为何微信、QQ这样的IM工具不使用GCM服务推送消息?

[链接] http://www.52im.net/thread-117-1-1.html

[摘要] 同样是IM软件,为什么微信不使用GCM的机制而要自己开启一个Service常驻后台轮询,并且还要使用多种方式触发该Service导致无法关闭,这种机制既耗电又浪费网络资源,微信放弃成熟的GCM推送机制而使用自身后台服务的软件是否有其他自身目的性?还是说微信某些功能必须自身常驻呢?

[- 13 -] 极光推送系统大规模高并发架构的技术实践分享

[链接] http://www.52im.net/thread-602-1-1.html

[摘要] 2016年的双十一大促改改过去,作为国内第三方推送服务的领导者,极光(JIGUANG)采取了哪些措施来应对高并发推送服务?同时,极光基于 ICE 打造高可用云推送平台,其背后有哪些技术细节值得探索?

[- 14 -] 从HTTP到MQTT:一个基于位置服务的APP数据通信实践概述

[链接] http://www.52im.net/thread-605-1-1.html

[摘要] 基于以上业务场景,如此频繁的数据交互,要达到数据的实时推送级别,该选用哪种技术?HTTP短轮询还是基于TCP的实时长连接?本文给出的答案是使用MQTT协议,请继续往下阅读。

[- 15 -] 魅族2500万长连接的实时消息推送架构的技术实践分享

[链接] http://www.52im.net/thread-723-1-1.html

[摘要] 此文内容整理自魅族架构师于小波在“魅族技术开放日”的演讲分享,本次演讲中于小波分享了魅族在实现2500万长连接的实时消息推送系统中所遇到的坑和一些心得体会,希望对实时消息推送技术相关的技术同行有所启发和帮助。

[- 16 -] 专访魅族架构师:海量长连接的实时消息推送系统的心得体会

[链接] http://www.52im.net/thread-750-1-1.html

[摘要] 本文内容来自ChinaUnix的IT名人堂对魅族系统架构师于小波的专访,于小波分享了在构建魅族海量长连接的实时消息推送系统过程中所总结出的各种心得和体会,希望对正在或即将开发消息推送系统的开发者同行带来一些启发。请往下看正文。

[- 17 -]  深入的聊聊Android消息推送这件小事

[链接] http://www.52im.net/thread-771-1-1.html

[摘要] 微信由于有国际版,将 GCM 作为辅助公共通道,但仅用于激活微信自己的 Push 通道,并没有通过 GCM 来传递数据,这点也是为了复用心跳的优化策略和数据处理逻辑。

[- 18 -] 基于WebSocket实现Hybrid移动应用的消息推送实践(含代码示例)

[链接] http://www.52im.net/thread-773-1-1.html

[摘要] 本文将围绕 Hybrid App(以Cordova为例)的 WebSocket 消息推送进行一系列的实践性探索。

👉52im社区本周新文:《社交软件红包技术解密(十三):微信团队首次揭秘微信红包算法,为何你抢到的是0.01元》,欢迎阅读!👈

我是Jack Jiang,我为自已带盐!https://github.com/JackJiang2011/MobileIMSDK/

posted @ 2024-06-05 11:56 Jack Jiang 阅读(14) | 评论 (0)编辑 收藏

本文由腾讯技术何金源分享,原题“不畏移山,手机QQ技术架构升级变迁史”,本文进行了排版和内容优化等。

1、引言

接上篇《总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM技术优化》,本文则将重点介绍手机 QQ 客户端技术架构升级背后的故事。

手机 QQ 经过20多年发展,功能不断增加,代码不断累积,架构已经变得越来越臃肿,影响到协作团队开发效率,对用户体验、质量稳定都有较大风险,因此手机 QQ 亟需技术架构的升级。但是对如此庞大的项目进行架构升级,在行业内也是少有的,手机 QQ 架构升级面临的困难和挑战都十分巨大,本文将围绕最新手机 QQ 客户端项目背景、项目历程、项目挑战、项目成果等方面进行深入介绍。

 
 

2、手机QQ的历史包袱

在过去20多年里,手机 QQ 从原来纯粹的即时通讯IM工具,成长为承载了空间、频道、短视频、超秀、增值服务等众多业务的平台。

随着业务越来越复杂,最初设计的技术架构变得越来越不适配,业务相互之间耦合越来越严重,时常会遇到改一个问题,牵扯出 N 个问题,问题改不动,代码债越积越多的情况,历史的包袱如同一座大山横在每一位手机 QQ 项目成员面前。

2020年,我们开始着手做架构升级。

鉴于手机 QQ 的业务复杂度、代码量级都非常大,评估下来架构升级的工作量大得惊人,于是我们采用分阶段、逐步演进的策略去进行架构升级。

整体回顾,手机 QQ 的架构升级时间线是这样的:

3、“解耦重构”架构设计

虽然历史包袱如同一座大山,但是手机 QQ 项目成员也有移山的意志和决心。

在2020年,手机 QQ 启动了名为“工业化实践”的技术架构升级项目,这标志着手机 QQ 工程首次系统性地进行业务边界划分、解耦和重构升级。

从上图可看出,旧架构虽然有模块化和插件化,但存在以下不足:

  • 1)边界不清晰:主工程承载基础和大部分业务代码,导致基础和业务代码边界不清晰;
  • 2)代码耦合紧:基础核心类持续膨胀、业务之间代码依赖不合理;
  • 3)开发效率低:代码修改扩散造成 CR、解冲突、定位问题成本高,同时拖慢编译速度。

针对以上不足,对手机 QQ 工程重新设计了架构:

1)新架构按业务划分模块,业务模块之间是相互解耦的,业务模块之间通过接口和路由进行通信;

2)同时按层级设计划分,层级自上而下依赖,上层模块可依赖下层模块,但下层模块不能逆向依赖上层模块。

手 Q 客户端新架构:

新架构的主要收益:

  • 1)模块更加内聚:新特性开发影响范围逐步收敛到模块内部,提升研发效率;
  • 2)接口更加清晰:依赖数减少,可测性提升,更易于通过单元测试、接口测试保障代码逻辑正确性,提升产品质量。

4、“解耦重构”的实践历程

4.1概述

手机 QQ 工程各个业务之间的依赖非常严重,对它进行解耦重构不是一蹴而就的事情,需要按阶段制定目标,一步一步地优化。

通过整理,手机 QQ 工程解耦重构划分为以下三个阶段。

4.2阶段一(2020.11 - 2021.2)

基本完成约300万行核心代码的解耦,一共约30个基础模块和40个基础组件完成解耦,核心业务模块基本完成解耦。

开发新功能时,因为接口与服务实现是隔离的,通过接口依赖的代码不会再耦合严重。

4.3阶段二(2021.3 - 2021.6)

目标:业务模块继续解耦,建设防劣化机制。

成果:

  • 1)API 代码占比与依赖数不增加;
  • 2)完成防劣化机制搭建,在合入阶段拦住不合理修改;
  • 3)完善动态化能力,优化插件与宿主间通信机制和发布效率。

4.4阶段三(2021.7 以后)

目标:进一步完善基础模块和组件化,实现子工程化。

成果:

  • 1)完善基础模块和公共组件重构,建立基础模块发布组件流程;
  • 2)对频道、小世界业务实现子工程化,独立编译运行。

5、“解耦重构”的技术收益

在重构基础上,梳理依赖关系,通过三个阶段改善模块化水平,提高编译速度和研发效率,流水线的编译耗时提升50%。

代码冲突方面也得到明显改善,对比重构前后数据,冲突文件数减少60%,冲突次数减少30%,大大提升开发效率。

6、手机QQ下一代架构:NT架构

在成功迈出改革的第一步之后,我们将注意力转向了手机 QQ 面临的版本碎片化问题。

不同端各自发展,形成了所谓的“烟囱式”结构,其中代码的复用率极低。这种结构带来了多端体验不一致、端内业务体验参差不齐以及每次版本更新时高昂的开发和维护成本等问题。

为了解决这些问题,并在提升用户体验、优化性能和提高研发效率方面实现突破,我们不得不深入思考。

正是这些迫切的需求和挑战促使我们启动了改革的第二步——推进手机 QQ NT 架构升级项目。

在 NT 架构设计之初,我们坚定认为不应该继续缝缝补补,而是应该采用最新且合理的技术理念,摒弃了简单的修补式方法。这次升级不仅是技术上的一次大刀阔斧的改造,更是一场深思熟虑的技术转型。

我们重视在不造成架构大规模动荡的前提下,制定了一条清晰、可行的实施路径。目标是以更少的人力投入实现更高的工作效率和成果,确保了升级过程中的高效和稳健。这种方法不仅保证了项目的顺利进行,也为未来的技术发展和迭代奠定了坚实的基础。

7、NT架构落地之难

由于手机 QQ 的历史悠久且拥有庞大的用户群,该项目在业务和用户层面都展现了巨大的复杂性。

具体来看,项目层面的挑战包括:

  • 1)代码总量庞大:手机端代码近千万行,形成了一个技术上的庞然大物;
  • 2)测试复杂性高:测试用例众多,功能繁杂,且存在部分文档缺失的情况;
  • 3)依赖组件过时:项目中依赖了一些陈旧且缺乏维护的组件,以及大量无人维护的二进制库;
  • 4)研发流程保障:在进行架构升级的同时,必须确保研发工作流程能够平稳过渡,以免影响到研发效率。

用户层面上的挑战则包括:

  • 1)在长达一年以上的升级过程中,日常版本需要正常迭代;
  • 2)用户本地数据量巨大,如超过 10G 的本地消息数据库;
  • 3)项目需在技术优化的同时提升用户体验与活跃度,确保技术优化在用户端实现价值。

面对这些复杂度,项目的核心难点主要集中在以下三个方面。

1)海量功能项目的架构升级和统一:针对全终端、全功能和全项目团队的整体升级,确保架构升级过程中不能有任何缺失。手机 QQ 是在发展了20多年进行彻底重构,难度空前,没有资料可参考。

2)IM 全链路架构重写升级:解决陈年技术债,优化消息架构,平稳迁移用户历史数据,并提升消息性能。QQ 消息架构有陈年技术债,很多 QQ 历史版本里,没有统一的消息 ID 生成规则,没有统一的存储和索引方案,消息类型也是无序扩张。所以,既需要对IM全链路重写优化,同时在过程中,还需要平稳迁移用户历史数据,最终完成升级,保护用户数据、用户体验不受影响。

3)用户体验提升与活跃数据提升:逐步优化核心功能体验,不影响用户习惯,通过提升体验推动产品数据增长。代码的重写不能全盘一次性推倒重来。核心功能体验要保持,逐步优化,不能影响用户使用习惯。

这些挑战不仅说明了手机 QQ NT 架构升级项目的复杂性,也证明了我们在面对前所未有的技术难题时的决心。

8、NT架构设计

为了实现架构升级和统一,项目团队先用 C++ 开发了具备 QQ IM 核心功能的跨平台内核层:把 IM 核心业务逻辑(好友、群、频道等消息逻辑、资料与关系链逻辑、图片语音视频等富媒体收发逻辑、实时音视频逻辑等),QQ 通用组件(数据库、协议编解码、网络传输等),以及线程/网络/IO 等通用资源管理模块和操作系统封装部分,由原来的各平台原生语言实现,统一下沉到 C++ 跨平台层。

为了控制项目质量风险,NT 跨平台内核先接入用户量相对较少,对功能补齐紧迫度高的桌面端,完全用新架构重写桌面端。

在桌面端成功完成功能验证和质量测试之后,我们开始了向移动端的迁移工作,并顺利完成了 iOS 和安卓平台的集成。

当然,移动端的接入远远不像图中描述的这般容易,接下来将介绍其中的解决方案和主要过程。

9、 IM客户端全链路重写升级

在新的 NT 架构基础上,对 QQ 来说,最核心的技术升级,是 IM 全链路的升级。

IM 消息数据源复杂,历史包袱很重,升级过程的遇到的第一个难点就是数据转换及存量数据迁移到新版本问题。

比如:

  • 1)老版本的 QQ,好友消息没有唯一标识字段,导入和去重影响大;
  • 2)2012年以前的版本,群消息没有支持漫游,消息无唯一字段;
  • 3)各平台消息数据格式不同,复杂度高,iOS 和 Android 分别有约200种消息类型;
  • 4)富媒体(图片、视频、语音、文件)资源,存储的目录结构、命名都不同;
  • 5)特殊消息,如结构化消息、Ark 消息、小灰条消息,需要做转换,完成业务的梳理和下架工作;
  • 6)还有因为各种功能的变迁带来的遗留数据问题,如已经退出或者解散的群和讨论组等。

所以,首先需要做 IM 的精简。项目团队基于用户价值考虑,零基思维,完成消息格式统一,对消息和会话类型进行彻底精简,为 QQ 消息长治久安打下基础。

有了全端格式统一和类型精简的基础,开始用大小、性能、安全性综合最优方案设计跨平台统一的全新客户端 DB,然后再考虑旧 DB 的数据,如何平稳升级到新 DB。

移动端和桌面端不同,活跃用户全年在线,有些手机本地纯文本消息的 DB 文件超过10G,加上富媒体、文件等,总数据量超过100G,而且移动端又有存储空间小、功耗敏感、后台杀进程等多方面限制,需要设计出一套周密的升级策略,保护用户核心数据资产不丢失。

方案核心要点:

  • 1)断点续导:移动端场景,进程随时可能被杀或退出。确保消息不丢失、不重复;
  • 2)用户分级:跟进消息数据大小,用户分为三类,做不同的体验优化,减少对用户的影响;
  • 3)优化发烫和耗电:限制导入速度,防止手机发烫。手机切后台后停止导入。对消息数据多的用户,引导用户设置在后台导入;
  • 4)监控:做好各种导入异常上报监控,随时跟进用户反馈。

通过设计周密的升级策略,内部多轮推演,外部从百级开始放量,全方位监控,并用兜底策略保障不丢消息。最终结合监控数据和用户反馈数据,完成了全量用户的全量数据平稳迁移新 DB。

10、客户端核心功能优化提升

不仅是消息,在 NT 架构重写升级过程中,对 QQ 核心功能也一起做了更彻底的重构,手机 QQ 原生功能进行了大规模解耦,通用的部分进行优化并下沉为统一的 NT-Runtime 原生组件(NT 组件服务及框架层)。基于重构后的架构,也对性能进行全面优化。

首先是消息相关核心模块的优化。

消息逻辑下沉到 C++ 跨平台,也推动上层进行架构刷新。

以聊天窗口(AIO)为例:基于全新数据流架构 + 数据预加载 + UI 逻辑并行化的设计思路,完成单向数据流驱动与异步加载渲染,系统资源全力供给 AIO 消息列表,最终性能指标提升明显,AIO 内查看、跳转、滑动消息,顺畅丝滑。

核心技术优化方案:

  • 1)采用基于单向数据流的 MVI 架构,实现业务解耦;
  • 2)预加载和异步渲染,实现消息无缝滑动;
  • 3)消息加载并行化,减少首屏和滑动时的加载时间;
  • 4)消息动态加载、释放,优化内存占用。
  • 5)200+业务组件懒加载,实现数据分层和按需加载。

其它 QQ 主场景,如消息列表页、消息与富媒体收发、图片视频查看等,也采用相同的路径进行优化,最终性能全面提升。

11、本文小结

在手机 QQ 超过20年的发展历程中,应用功能的不断扩展和代码量的持续增长积累了巨大的技术债务,给原有的客户端架构带来了沉重的负担。最新版手机QQ通过一系列的架构演变和技术升级,成功地实现了从臃肿不堪到模块化、高效、稳定的转变。

客户端架构由各端烟囱式架构逐步升级为多端跨平台复用的 NT 架构,降低多端维护人力成本,提升 QQ 全端开发效率,为 QQ 的持续发展和技术迭代打下了坚实的基础。

展望未来,QQ 将基于 NT 架构,在技术创新的道路上继续前行,不断进行架构优化和技术升级,为用户提供更加流畅稳定的产品体验。

12、相关资料

[1] 总是被低估,从未被超越,揭秘QQ极致丝滑背后的硬核IM技术优化

[2] 大型IM工程重构实践:企业微信Android端的重构之路

[3] 企业微信针对百万级组织架构的客户端性能优化实践

[4] 微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题

[5] 腾讯技术分享:Android版手机QQ的缓存监控与优化实践

[6] 腾讯技术分享:Android手Q的线程死锁监控系统技术实践

[7] 全面解密新QQ桌面版的Electron内存优化实践

[8] 移动端IM实践:iOS版微信界面卡顿监测方案

[9] 微信团队原创分享:Android版微信的臃肿之困与模块化实践之路

[10] 微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等

[11] 微信团队分享:微信支付代码重构带来的移动端软件架构上的思考

[12] 微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化

[13] 抖音技术分享:飞鸽IM桌面端基于Rust语言进行重构的技术选型和实践总结

[14] 阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践

[15] QQ设计团队分享:新版 QQ 8.0 语音消息改版背后的功能设计思路

13、更多鹅厂技术文章汇总

  1. 微信朋友圈千亿访问量背后的技术挑战和实践总结
  2. 腾讯技术分享:腾讯是如何大幅降低带宽和网络流量的(图片压缩篇)
  3. IM全文检索技术专题(二):微信移动端的全文检索多音字问题解决方案
  4. 微信团队分享:iOS版微信的高性能通用key-value组件技术实践
  5. 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?
  6. 微信团队分享:微信Android版小视频编码填过的那些坑
  7. IM全文检索技术专题(一):微信移动端的全文检索优化之路
  8. 企业微信客户端中组织架构数据的同步更新方案优化实战
  9. 微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解
  10. 微信“红包照片”背后的技术难题
  11. 移动端IM实践:iOS版微信的多设备字体适配方案探讨
  12. 腾讯信鸽技术分享:百亿级实时消息推送的实战经验
  13. IPv6技术详解:基本概念、应用现状、技术实践(上篇)
  14. 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践
  15. 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅
  16. 社交软件红包技术解密(一):全面解密QQ红包技术方案——架构、技术实现等
  17. 社交软件红包技术解密(四):微信红包系统是如何应对高并发的
  18. 社交软件红包技术解密(十):手Q客户端针对2020年春节红包的技术实践
  19. 微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结
  20. IM“扫一扫”功能很好做?看看微信“扫一扫识物”的完整技术实现
  21. 微信团队分享:微信支付代码重构带来的移动端软件架构上的思考
  22. IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总
  23. 微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路
  24. 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
  25. IM全文检索技术专题(四):微信iOS端的最新全文检索技术优化实践
  26. 微信团队分享:微信后台在海量并发请求下是如何做到不崩溃的
  27. 微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等
  28. 微信技术分享:揭秘微信后台安全特征数据仓库的架构设计
  29. IM跨平台技术学习(九):全面解密新QQ桌面版的Electron内存优化实践
  30. 企业微信针对百万级组织架构的客户端性能优化实践
  31. 揭秘企业微信是如何支持超大规模IM组织架构的——技术解读四维关系链
  32. 微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题
  33. 微信团队分享:微信后端海量数据查询从1000ms降到100ms的技术实践
  34. 大型IM工程重构实践:企业微信Android端的重构之路
  35. IM技术干货:假如你来设计微信的群聊,你该怎么设计?
  36. 微信团队分享:来看看微信十年前的IM消息收发架构,你做到了吗
  37. 长连接网关技术专题(十一):揭秘腾讯公网TGW网关系统的技术架构演进


(本文已同步发布于:http://www.52im.net/thread-4658-1-1.html

posted @ 2024-05-30 10:24 Jack Jiang 阅读(67) | 评论 (0)编辑 收藏

     摘要: 本文由腾讯云开发者张曌、毕磊分享,原题“QQ 9“傻快傻快”的?!带你看看背后的技术秘密”,本文进行了排版和内容优化等。1、引言最新发布的 QQ 9 自上线以来,流畅度方面收获了众多用户好评,不少用户戏称 QQ 9 “傻快傻快”的,快到“有点不习惯了都”。作为庞大量级的IM应用,QQ 9 从哪些方面做了...  阅读全文

posted @ 2024-05-23 14:20 Jack Jiang 阅读(95) | 评论 (0)编辑 收藏

仅列出标题
共47页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last 
Jack Jiang的 Mail: jb2011@163.com, 联系QQ: 413980957, 微信: hellojackjiang