mist
mist copied to clipboard
超高性能且不受时间回拨影响的全局唯一 ID 生成算法,薄雾算法
你好,请问分布式环境怎么保证不重复呢,以及怎么确保递增呢?
1. 第三段和第四段是两个8位的随机因子,可以组合成的效果是255 * 255,其实从效果上看,和一个16位的随机因子一样的。分成2段反而需要生成2次随机数,性能浪费; 2. 第二段的自增数,在分布式情况下,多台机器的自增数是有相同的情况的,那么id碰撞的概率是由后16位决定的,最低是65536分之一的概率碰撞,如果数据增多,碰撞概率指数级上升。
1. 由于该算法高位是自增的,也就是高位序列是确定的,因此只要知道某一个id存在,则可以轻松取出该ID对应的高位需求,并可以顺序前推或后推必然存在的id高位部分。 2. 由于低16位的组合复杂度最大为`256 ** 2 = 65536`次,任意一台计算机都能够在很短的时间内找到对应高位的所有低位ID。 3. 那么,我们只要知道1个已存在的ID,推测出其它ID的成本非常低。 > 4、信息安全:如果 ID 是连续的,恶意用户的爬取工作就非常容易做了,直接按照顺序下载指定 URL 即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要 ID 无规则、不规则; 那么,该算法对上面这一点(**信息安全**)的保护能力就非常有限。 我不知道我的顾虑是否多余,该算法是否有更多安全策略来保护信息安全呢?