分布式系统id生成策略

Posted by Clear Blog on May 27, 2017
  1. 数据库自增id 往同一个db中插入一条没有意义的数据,返回自增id,然后将id赋给相应的对象。

优点:方便易用 缺点:高并发会成为性能瓶颈。

  1. uuid 优点:本地生成 缺点:太长,无序,逐渐性能差

  2. 时间戳 + 用户id + 业务含义编码 优点:时间有序,本地生成 缺点:并发会有数据重复

  3. snowflake算法

twitter开源的分布式id生成算法,就是把一个64位的long型的id,第一bit为正负标示位, 用其中的41 bit作为毫秒数,用10 bit作为工作机器id,12 bit作为序列号, 最后12bit代表同一个毫秒内的4096个不同的id。

这么说来既能保证唯一性,又能满足高并发,还是粗略有序,那么分布式id的生成策略就确定是它了。

国内有很多在snowflake算法上做了开发的id生成器, 比如说美团开源的 https://github.com/Meituan-Dianping/Leaf、 以及金服的技术专家李艳鹏开源的 https://github.com/cloudatee/vesta-id-generator。

主要是为了实现全局唯一、粗略有序、可反解和可制造等特性。