常见的分布式唯一ID生成方案的优缺点对比
数据库增长主键
需要专门使用一个库和一张表,专门用于生成全局唯一ID,向表中(insert into)插入一条数据,会返回一个全局唯一id,然后把这个id设置给业务数据。
优点:落实起来非常方便,只需要在自己的系统的库里面专门使用一张表,用来生成ID。
缺点:单库单表,一旦达到每秒几千的高并发,单库就有可能存在高可用的问题。而且不停的向表中插入id,表中的数据就会越来越多。
UUID
jdk自带的API,可用通过UUID生成一个唯一id,生成一个很长的字符串。
优点: 在本地生成,使用起来很方便,没有并发的压力。
缺点: 生成的唯一id太长了,没有业务含义。
Twitter开源的Snowflake方案
使用64个bit位,最高位1个bit是0,41位放时间戳(到毫秒单位,最多使用69年),10位放机器标识(最多把snowflake程序部署在1024台机器上),12位放序号(每毫秒,每台机器,可以顺序生成4096个ID),snowflake程序分布式部署在多台机器上,每台机器生成的每个ID,都是这一毫秒、机器id、序号,每台机器每毫秒最多4096个ID。
优点: 高性能,高并发,集群化,可伸缩
缺点:可能存在时钟回拨的问题