全局唯一ID生成规则,UUID、雪花算法、美团leaf算法

一、业务背景

       当单表数据量急剧上升后,表的查询性能会逐渐下降,会涉及到分库分表操作,如何确保数据均匀分布,可以通过全局唯一的ID。

      全局唯一的ID生成规则要求:

  • 全局唯一性
  • 有序递增
  • 高可用
  • 时间上的特性(例如互联网订单,从订单号可以看出具体时间的信息)

 

二、UUID算法:

   UUID含义是通用唯一识别码 (Universally Unique Identifier),格式:32个16进制字符,4个横线 (8-4-4-4-12);

   例如:d13a0096-abca-11ea-8997-acbc32785ec1

   组合部分:

  1、当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同;

 2、时钟序列;

 3、全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。 

缺点:

 UUID算法生成的ID虽然是唯一的,但是不是有序的,显然不适合作为数据库主键的生成策略,可以使用UUID作为令牌桶(限流算法)的生成规则。

 

三、雪花算法:

   从辩证法来考虑,世界上不存在一模一样的两片雪花,问题时间回拨,还是会生成两个相同的ID,

全局唯一ID生成规则,UUID、雪花算法、美团leaf算法_第1张图片

 

四、美团的Leaf,两种实现:

       1、基于数据库层面的Leaf-segment

            每个Leaf中预存一定的UUID,减少与数据库的交互,但是增加节点,扩容会存在问题。

       2、Leak -Snowflake  解决时间回拨问题;

      

你可能感兴趣的:(算法)