钉钉企业级IM架构的成功之处
极客时间编辑部
讲述:丁婵大小:7.98M时长:05:49
业界的 IM 产品在功能上同质化较高,而企业级的 IM 产品对于高可用、安全性又有更高的要求,如何打造具备差异化的产品,又能在高可用、安全性、数据一致性等方面具备较高的品质,是企业级 IM 产品成功的关键。钉钉在过去短短几年时间里,用户数已破 2 亿,企业组织数破千万,那钉钉是如何规划企业级 IM 产品的架构的呢?InfoQ 记者就此采访了钉钉 IM 服务端研发技术专家劲弩,以下为重点内容。
钉钉作为 ToB 产品,业务场景跟 ToC 的 IM 产品有很大区别,架构上也各有侧重。
一、一万人群
数目繁多的万人群给 IM 系统的流量冲击巨大。每逢节假日,群成员高频互动,流量洪峰瞬间流过 IM 系统,挑战着系统的极限。为支撑好超级大群,钉钉做了以下多点的优化。
1. 降低存储扩散量
最早 IM 使用写扩散模型,一万人的群发,一条消息要写一万次消息收件箱。优化为读扩散模型后,一条消息只需写一次消息收件箱,扩散量降低到万分之一。
2. 智能限流
当总体流量超过系统阈值时,智能限流机制会自动根据当时情况对消息发送频率相对较高的大群进行限流。
3. 万人群成员多级缓存
钉钉在客户端、服务端建立了群成员的多级缓存。一方面增强了用户打开 at 列表、查看群成员列表的体验。另一方面避免了大量群成员读写对 DB 的压力,影响系统稳定性。
4. 端到端的体验保证
客户端定期做极限压测,在群消息大规模刷屏的情况下,保证用户体验流畅不卡顿。
二、历史消息可回溯
在 ToB 场景下,数据属于企业的资产。企业有需求查看历史消息,因为它是关键的沟通信息。
首先是既省流量,又不遗漏的历史消息回溯协议。最近的消息通过同步协议推送到达客户端本地。而历史消息,服务端不曾推送,客户端本地没有入库。在用户进入会话时,如果客户端发现本地消息不足,自动从服务端拉取不足的历史消息。采用这种推拉结合的协议,保证了消息不管多么久远,都可以毫无遗漏的从服务端同步下来。
然后是低成本的历史消息存储架构。消息具有典型的冷热属性:用户访问的绝大部分都是最近的数据。钉钉自研了一套冷热分离架构,在冷库使用低成本高压缩率的存储引擎,大幅下降存储成本。
最后是达到金融级安全保障的历史消息加密。为了保证历史消息的安全性,钉钉在全链路使用金融级的加密算法,不留死角,确保没有任何人可以非法获取历史消息。
三、场景化
ToC IM 产品的场景都比较通用,比如微信群,每个人能够使用的功能集合是一样的,钉钉则是面向场景打造极致体验。
这给技术团队带来两方面的挑战。一方面是系统模型必须做到可扩展性强,足够灵活,能够快速地支持业务场景化的需求;另一方面是在维持业务快速迭代的情况下,保持核心 IM 系统的高可用性。因此钉钉的架构必须做到同时满足这两点需求。
以钉钉的班级群为例。它使用小程序开发,不需要发版就可以做 bugfix、实现业务需求。同时服务端切分为了业务层和 IMCore 层。基本做到了新需求不改动 IMCore 层。迭代速度快,系统稳定性强,达到了业务、技术皆大欢喜的局面。
四、单元化
单元化在钉钉有多层需求:
高可用。钉钉要保证 vip 用户在地域灾难的情况下可用。因此钉钉设计了一套基于单元化的异地容灾方案。当中心宕机,两分钟内一键把 vip 用户调度到容灾单元,确保用户能够正常使用 IM 基本功能。
国际化。海外地区对于数据有合规的要求。同时,钉钉在当地部署应用,也给海外用户提供了更流畅的用户体验。
支持大客户及特殊行业。钉钉今天不仅承接中小企业的沟通办公,也承接不少政务大客户。他们对钉钉的诉求是具备专有云部署能力。
容量。随着业务发展,所有流量在中心处理不可扩展。把流量分散到多地域是一个必然选择。
钉钉通过一套代码部署,一套运维体系实现单元化,满足了以上多层次的需求。技术团队开发了单元化基础组件,动态路由,业务层数据同步组件等一系列基础设施,可以将钉钉部署在任何一个国家或地区,甚至客户的自有机房。
以上就是钉钉企业级 IM 产品在架构层面的实践,受限于篇幅,钉钉关于高可用、安全性、数据一致性等方面的成功之处,将在下文分享,欢迎持续关注。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论