
声明:本文来自于微信公众号 InfoQ(ID:infoqchina),作者:小智,授权站长之家转载发布。
业界的 IM 产品在功能上同质化较高,而企业级的 IM 产品对于高可用、安全性又有更高的要求,如何打造具备差异化的产品,又在高可用、安全性、数据一致性等方面具备较高的品质,是企业级 IM 产品成功的关键。钉钉在过去短短几年时间里,用户数已破 2 亿,企业组织数破千万,钉钉是如何规划企业级 IM 产品的架构的?InfoQ 记者就此采访了钉钉 IM 服务端研发技术专家劲弩,劲弩也将在 ArchSummit 全球架构师峰会(北京站)2019 为我们带来《钉钉企业级 IM 存储的挑战与实践》的精彩分享,感兴趣的读者朋友可以多加关注。
1不同场景,架构不同
钉钉的技术栈继承自阿里巴巴集团。阿里有着”大中台,小前台“的组织战略,所以钉钉在大的框架上是复用集团的能力,包括集团的中间件、存储引擎、微服务框架等。在此之上,钉钉聚焦在核心能力的研发,比如:IM 核心系统、系统单元化、音视频通讯,弱网优化,图片收发极致体验等等。
钉钉作为 ToB 产品,业务场景跟 ToC 的 IM 产品有很大区别,架构上也各有侧重。
第一是万人群。在钉钉里,企业的组织关系映射到 IM 的群,产生了为数众多的超级大群。和 500 群人数上限相比,钉钉支持万人大群,大幅提升了群的触达人数。
如此数目繁多的万人群给 IM 系统的流量冲击巨大。在节假日,特别是元旦、春节或者双 11 这样的重大活动时期,管理层和员工在大群高频互动,流量洪峰瞬间流过 IM 系统,挑战着系统的极限。
为支撑好超级大群,我们做了以下多点的优化:
降低存储扩散量
最早 IM 使用写扩散模型,一万人的群发一条消息写一万次消息收件箱。优化为读扩散模型后,一条消息只需写一次消息收件箱,扩散量降低到万分之一。
智能限流
在节日场景下,一些大群的消息发送频率过高,可能超过系统整体容量,影响 IM 系统稳定性。如果对每个群设置较低的发送阈值,系统又没有完全发挥出容量,从而提供足够流畅的用户体验。针对这个问题,我们设计了一种智能限流的方法,当总体流量超过系统阈值时,自动根据当时情况对消息发送频率相对较高的大群进行限流。
万人群成员多级缓存
我们在客户端、服务端建立了群成员的多级缓存。
一方面增强了用户打开 at 列表、查看群成员列表的体验。因为群成员人数增大时,打开群成员列表的延迟提升明显,用户能感受到长达数十秒的卡顿。增加客户端缓存后,用户输入 @立刻响应成员列表,即使群里有几万个群成员。另一方面避免了大量群成员读写对 DB 的压力。如果压力直接打到 DB 层,万行记录的扩散量过大,很容易造成热点,影响系统稳定性。










