使用Redis创建分布式系统自增式的全局唯一id
1.为什么分布式系统需要全局唯一id?答:在互联网系统中,并发越大的系统,数据量就越大,就越需要分布式,但是大量的分布式数据就越需要唯一标识来识别它们。例如淘宝的商品系统有千亿级别的商品,订单系统有万亿级别的订单数据,这些数据都是日益增长的,传统的单库单表是无法支撑这种级别的数据,必须对其进行分库分表;一旦分库分表,表的自增id就失去了意义,所以需要一个全局唯一的id来表示每一条数据(商品,订单等
1.为什么分布式系统需要全局唯一id?
答:在互联网系统中,并发越大的系统,数据量就越大,就越需要分布式,但是大量的分布式数据就越需要唯一标识来识别它们。例如淘宝的商品系统有千亿级别的商品,订单系统有万亿级别的订单数据,这些数据都是日益增长的,传统的单库单表是无法支撑这种级别的数据,必须对其进行分库分表;一旦分库分表,表的自增id就失去了意义,所以需要一个全局唯一的id来表示每一条数据(商品,订单等等)。
2.全局唯一id必须具备什么特点?
答:1.全局唯一性:不能出现重复的id【最基本的要求】
2.单调递增:保证下一个id一定大于上一个id
3.趋势递增:在一段时间内,生成的id是递增的趋势,如:在一段时间内生成的id在【0,1000】之间,在过段时间生成的id在【1000,2000】之间。但是在【0,1000】区间内的时候,id生成有可能第一次是12,第二次是10,第三次是14。
4.信息安全:如果id是连续递增的,恶意用户就可以很容易窥见订单号的规则,从而猜出下一个订单号,如果是竞争对手,就可以知道我们一天的订单量,所以在某些场景下,需要id无规则。
第二和四两个需求是互斥的,无法同时满足
因此,做一个全局唯一id生成系统必须满足以下特点:
1.高可用,可用性达到5个9或者4个9 【99.99%】
2.高性能,否则容易造成线程阻塞
淘宝的商品id就是递增的,所以不考虑信息安全新,但是对于订单是要考虑信息安全性,所以订单id不能单调递增。
全局唯一id生成技术:1.UUID,redis,Twitter的雪花算法,美团的Leaf算法。
###################################################
3.使用Redis的INCR命令生成 分布式全局唯一id
使用Redis的INCR命令生成商品的全局id
实现:编写全局id封装类:
更多推荐
所有评论(0)