IM电竞官网 分类
IM电竞官网 - 专业电竞投注平台注册登录送体验金抖音技术分享:飞鸽IM桌面端基于Rust语言进行重构的技术和总结发布日期:2025-08-12 浏览次数:

  本文将介绍飞鸽IM前端团队如何结合Rust对飞鸽客户端接待能力进行的技术提升,一步步从概念验证、路径分解到分工开发,再到最后上线收益论证,并分享了其中遇到的技术挑战与经验总结等。

  本项目是一个长周期的复杂项目,相信本项目落地的经验对其他同学及团队能有所借鉴。

  飞鸽是在抖音电商业务上面向商家和用户的聊天工具,其拉通售前、售中、售后渠道,为商家履约提供重要支撑。

  对于飞鸽桌面端IM而言,我们会面临很多基础挑战,比如做好会话稳定性、操作流畅性、冷启动速度等,而在满足98%以上的用户需求且业务趋于稳定后,一些在冲刺后遗留的性能天花板问题暴露在我们面前,其中 高并发接待 & 多开是两个重要的挑战,是旧账与难啃的硬骨头。

  1)历史技术选型,包含者成本、人力、效率等考量,飞鸽客户端使用的技术栈是react + electron:

  *im sdk与业务渲染代码都由 js 编写,im sdk同时是cpu密集型 & io 密集型的组件,在高并发场景下,渲染频率也比较高,业务与sdk相互抢占cpu资源与io资源,导致收发消息慢、操作卡顿(高并发限制)。

  *由于im sdk运行在webview中,所以收发消息依赖webview存活,故多开账号 = 多个webview,内存成本线性增长。

  2)im页面在web层面多次优化后已接近架构上限,无法基于现有架构做更多天花板的突破。

  对于以上这些挑战,我们给出的解法是:对现有架构进行调整,使用Rust语言对im sdk进行重写,彻底解除这一块的性能瓶颈!

  飞鸽im sdk是一个对运行稳定性要求高的组件,其工程量大、逻辑复杂,对于异步特性使用非常频繁,其对于内存安全、 线程安全有着比较严格的要求。

  假如使用C++,作为新手并没有把握能够将复杂的IM SDK少bug的编写下来(团队限制)。

  Rust学习曲线虽然陡峭,但是其为安全设计的各类语言特性、强大的编译器,能够将新人编写代码的问题数降到最低(逻辑问题除外)。

  并且飞书团队提供了客户端的rust生态库,帮助我们解决很多的基建问题,所以这里使用Rust是相当合适的。

  IM SDK 与 业务JS代码共用Weview资源,接待密集的时候,sdk与业务,互相抢占cpu与io资源,导致容易卡顿、消息延迟;

  Rust独立进程承担所有的im sdk的计算压力,可以大幅减轻js线程压力,可提升压力场景接待体验;

  rust 整体优于 js,计算占比越重,优势越明显(高压时cpu差别能到达3倍以上);

  架构选型上,rust进程独立是最好的方案,稳定性更优、性能损耗相差较小。

  路要一步步走,整个项目粗估下来会有上百的工作日,作为业务团队,我们无法在短期内投入大量的资源去做这个项目,所以需要一步一步拆解、验证、拿收益。

  团队内native开发资源有限,这件事情的进行也需要团队进行学习、成长。下面我们将详细分享这个过程 。

  造房子先得有一个地基 —— Rust工程的基础建设,是Native业务的前置条件!

  这阶段的工作是考验耐心的,因为这个阶段并不能带来实质性的用户体验提升、也无法拿到明显的提升数据,只是作为中间阶段,它有存在的必要性。

  这阶段后,在稳定性治理、基础能力验证、 Rust 语言经验、指标制定合理性这几方面,我们踩上了一个更结实的台阶,更有信心去进行更复杂的下一阶段。

  夯实基础后,我们开始发力冲刺,大刀阔斧的对IM SDK进行重新设计、实现、联调以及上线。

  此阶段要实现im sdk的全部能力、 并对线上运行的js im sdk进行替换。

  由于飞鸽im对于通信模块的稳定程度要求是很高的,替换过程就像是在高速行驶的车辆上替换轮胎,如果出现问题也容易导致大量的客服负面反馈。

  因此,新rust sdk的稳定性、异常问题时的兜底方案、灰度时的监控观察、对新增反馈的留意都很重要,IM电竞,IM电竞官网,IM电竞注册,电竞投注平台,电竞博彩,英雄联盟竞猜放量过程会存在一定精神压力。

  a)分析、拆解所有Js Im SDK至今具有的能力,并以贴合Rust的方式重新设计;

  b)需要在协议设计中,尽可能的合并 & 简化 Js - Rust的调用,以减少IPC通信成本。

  设计数据冗余,当Rust进程出现崩溃、无响应、不可恢复的网络错误时,识别并fallback到 web版本,使用冗余数据快速恢复im sdk正常运行状态,确保用户体验。

  最后的阶段,我们基于完善的Rust IM SDK的能力进行形态的升级。

  3)做好阶段性分解与验证,缩短单个周期(如本文的一二阶段拆解,可逐步累积信心);

  频率过高的IPC通信可能使得CPU优化适得其反,因为老版本都运行在Js中,所以调用频率是没有节制的(循环读取数据也经常出现),必须要在设计上降低下来——降低业务JS线程的压力。以下措施可以将本场景通信成本降低90%以上。

  针对某种场景做的优化工作不容易在大盘数据中得到体现(尤其在灰度阶段),我们应该针对特殊场景建立新指标。

  即编写策略,识别并收集极端场景下的数据:为了衡量极端场景的的卡顿优化,建立了忙碌与卡顿指标,可以衡量出用户接待忙碌程度与卡顿率的关系,并且通过此指标将优化清晰的衡量出来。

  3)需要建设便捷的日志回捞 & 日志分析工具(帮助快速找到日志还原现场)。

  [4]如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

  [6]IM开发干货分享:IM客户端不同版本兼容运行的技术思路和实践总结

  [7]IM全文检索技术专题(四):微信iOS端的最新全文检索技术优化实践

  [8]从游击队到正规军(二):马蜂窝旅游网的IM客户端架构演进和实践总结