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封装类:

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐