如何確保聊天消息的唯一性和順序性?
- 看到這個問題,普遍考慮的是用自增序列作為消息ID,這樣既可以保證唯一性,又可以保證順序性。但是在分布式情況下很難保證id的唯一性和順序遞增,維護id生成的一致性難度又很大。
目前找到的方案
- Twitter的snowflake算法 (算法簡單,值得一試)
-
snowflake 是 Twitter 開源的分布式 ID 生成算法,結(jié)果是一個 long 型的 ID。其核心思想是:使用 41bit 作為毫秒數(shù),10bit 作為機器的 ID ( 5 個 bit 是數(shù)據(jù)中心,5 個 bit 的機器 ID ),12bit 作為毫秒內(nèi)的流水號(意味著每個節(jié)點在每毫秒可以產(chǎn)生 4096 個 ID ),最后還有一個符號位,永遠(yuǎn)是 0。
-
- seqsvr(在沒有微信那么高的并發(fā)情況下,暫時不考慮,畢竟實現(xiàn)麻煩)