分布式id
基本要求:
全局唯一,有序递增,高可用性
解决方案:
UUID,数据库自增id,号段模式,redis生成,zookeeper生成,雪花算法
uuid:
基于当前时间,随机数,网卡的mac地址等数据生成,他能保证同一时空所有机器上都是唯一的
优点是本地生成,性能高,全球唯一
缺点是没有排序,不是趋势递增,uuid过长占用磁盘和内存空间较大,影响查询效率,同理需要消耗更多的网络资源
auto_increment:
需要一个数据库实例,任何业务系统需要分布式ID时,都来访问该数据库实例来获得分布式ID
优点是操作简单,分布式id自增有序
缺点是需要独立数据库实例,成本高,数据库压力大,性能有限
号段模式:
从数据库批量获取自增id,如1000个,用完后再去取
优点是不需要每次都重新取,降低数据库压力,提高性能
缺点是实现难度复杂,id存在内存中,每次重启服务器会造成id不连续
redis
优点,自增,若redis是集群可以防止单点故障
缺点,依赖redis,如果是单点就会出现单点故障
雪花算法
由推特开源的,由64位整数组成的分布式id,性能较高,并且在单机递增,bit位+时间戳+机器id+序列号
优点:时间戳在高位,序列在低位,调整bit位满足不同业务要求,没有依赖,使用方便
缺点:时钟回拨,每个机器需要配置不同的worker id