zoukankan      html  css  js  c++  java
  • 面试连环炮系列(十一):说说你们的分布式ID设计方案

    1. 说说你们的分布式ID设计方案
      我们采用Snowflake算法,生成一个64bit的数字,64bit被划分成多个段,分别表示时间戳、机器编码、序号。

      • 41位的时间序列(精确到毫秒,41位的长度可以使用69年)。
      • 10位的机器标识(10位的长度最多支持部署1024个节点)。
      • 12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)。
        优点:
      • 时间戳在高位,自增序列在低位,整个ID是趋势递增的,按照时间有序。
      • 性能高,每秒可生成几百万ID。
      • 可以根据自身业务需求灵活调整bit位划分,满足不同需求。
    2. Snowflake算法有什么缺点?
      它的算法依赖机器时钟,如果机器时钟回拨,会导致重复ID生成。虽然在单机上是递增的,但是分布式环境下,每台机器上的时钟不可能完全同步,有时候会出现不是全局递增的情况。

    3. UUID不是更简单吗,为什么不用?
      UUID是16字节128位长的数字,以36字节的字符串表示,UUID算法规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素。UUID过长,而且没有顺序,不适合用于数据库索引字段。

    4. Snowflake算法的ID太长了,有没有更短的方案
      可以采用基于Redis的原子操作INCR自增,比如订单号 = 日期 + 当日自增长号。

    5. 采用Redis方案的缺点是什么?

      • 如果系统中没有Redis,还需要引入,增加系统复杂度。
      • 需要编码和配置的工作量比较大。

    参考(部分摘抄的文字版权属于原作者):

    https://blog.csdn.net/hl_java/article/details/78462283
    https://www.jianshu.com/p/2456c737aebb

  • 相关阅读:
    模板库
    LCT小结
    BZOJ1502: [NOI2005]月下柠檬树
    技术资料分享
    ORM介紹及ORM優點、缺點
    依賴注入入門——Unity(二)
    面向切面編程入門(一)
    依賴注入入門——Unity(一)
    WCF、.Net Remoting、Web Service概念及区别
    深入设计模式(四)——建造者模式
  • 原文地址:https://www.cnblogs.com/xiaoyangjia/p/11607361.html
Copyright © 2011-2022 走看看