IM海量聊天消息序列号生成

如何确保聊天消息的唯一性和顺序性?

  • 看到这个问题,普遍考虑的是用自增序列作为消息ID,这样既可以保证唯一性,又可以保证顺序性。但是在分布式情况下很难保证id的唯一性和顺序递增,维护id生成的一致性难度又很大。

目前找到的方案

  1. Twitter的snowflake算法 (算法简单,值得一试)
    • snowflake 是 Twitter 开源的分布式 ID 生成算法,结果是一个 long 型的 ID。其核心思想是:使用 41bit 作为毫秒数,10bit 作为机器的 ID ( 5 个 bit 是数据中心,5 个 bit 的机器 ID ),12bit 作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID ),最后还有一个符号位,永远是 0。


  2. seqsvr(在没有微信那么高的并发情况下,暂时不考虑,毕竟实现麻烦)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容