作者 | 尹启绣 - 阿里云智能钉钉技术专家
背景
最近几年,钉钉迅速成为一款国民级应用。IM 作为钉钉最核心的功能,每天需要支持海量企业用户的沟通,同时还通过 PaaS 形式为淘宝、高德等 App 提供基础的即时通讯能力,是日均千亿级消息量的 IM 平台。
我们通过 RocketMQ 实现了系统解耦、异步削峰填谷,还通过定时消息实现分布式定时任务等高级特性。另外,过程中也与 RocketMQ 深入共创,不断优化解决了很多问题,并且孵化出 POP 消费模式等新特性,彻底解决了RocketMQ 负载粒度只能到Queue级别、rebalance导致时延等问题。
钉钉作为企业级 IM 领先者,面临着巨大的技术挑战。市面上 DAU 过亿的 App 里,只有钉钉是 2B 产品,我们不仅需要和其他 2C 产品一样,支持海量用户的低时延、高并发、高性能、高可用,还需保证企业级用户在使用钉钉时能够提升沟通协同效率。
因此,钉钉提供了很多竞品没有的功能,比如消息必达是钉钉的代名词。Ding 和已读很好地提升了大家在企业中的沟通效率。消息多端同步、消息云端存储使得用户不管在哪里登录钉钉都能看到所有历史消息。工作场景下,信息安全是企业的生命线,我们提供了非本组织的人不能加入策略,用户退出企业即自动退出工作群,很好地保障了企业的信息安全。
同时,在钉钉官方已经支持全链路加密的基础上,还支持用户自己设置密钥的三方加密,进一步提高了系统的信息安全性。
稳定性方面,企业用户对稳定性的要求也非常高,如果钉钉出现故障,深度使用钉钉的企业都会受到巨大影响。因此,钉钉 IM 系统在稳定性上也做了非常深入的建设,架构支持异地多活和可弹性伸缩容,核心能力所有依赖都为双倍。并建立了流量防护,制定了单测和集成测试标准以及常态化的容灾演练机制。比如波浪式流量就是在做断网演练时发现。
针对不同行业的业务多样性,我们会尽可能地满足用户的通用性需求,比如万人群、全员群等,目前钉钉已经能够支持 10 万人级别的群。更多的需求我们会抽象出通用的开放能力,将 IM 能力尽可能地开放给企业和三方 ISV,使不同形态的业务都能在钉钉平台上得到满足 。
市场调研表明,钉钉 IM 的开放能力数量处于行业顶尖水平,我们将持续结合业界智慧,打造好钉钉生态。
钉钉 IM 核心功能处理流
IM 本身是异步化沟通系统,与开会或者电话沟通相比,我们在发送出一条消息后,并不要求对方马上给出回应。这种异步特性与消息队列的能力很契合,消息队列可以很好地帮助 IM 完成异步化解耦、失败重试、削峰填谷等能力。
以 IM 系统最核心的发消息和已读链路简化流程(如上图),来详细说明消息队列在系统里的重要作用。
发消息链路流程
处于登录状态的