钉钉 IM 基于 RocketMQ 5.0 的云原生应用实践

本文介绍了钉钉IM如何利用RocketMQ实现系统解耦、异步处理和分布式定时任务,以及在使用过程中遇到的问题和解决方案。文章详细讨论了RocketMQ在消息发送、已读处理、负载均衡等方面的挑战,并提出了POP消费模式以解决现有问题,展示了一种云原生应用的最佳实践。
摘要由CSDN通过智能技术生成

作者 | 尹启绣 - 阿里云智能钉钉技术专家

背景

最近几年,钉钉迅速成为一款国民级应用。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 系统最核心的发消息和已读链路简化流程(如上图),来详细说明消息队列在系统里的重要作用。

发消息链路流程

处于登录状态的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值