zoukankan      html  css  js  c++  java
  • 面试刷题31:分布式ID设计方案

    image.png

    面试中关于分布式的问题很多。(分布式事务,基本理论CAP,BASE,分布式锁)先来一个简单的。

    简单说一下分布式ID的设计方案?

    首先要明确在分布式环境下,分布式id的基本要求。

    1, 全局唯一,在分布式集群下,不同的节点并发生成的分布式id要唯一;

    2, 顺序性,分布式id是有序生成

    然后给出分布式id的设计方案。

    1, 基于数据的自增id生成分布式ID,使用比较简单,缺点是扩展性和可靠性有限;基于数据库表的自增id

    2,基于snowflake 算法生成;

    snowflake生成的分布式id是一个64位整数;位数标识如下:

    image.png

    1 标识正负

    41位,一般使用System.currentTimeMilles()得到;

    5 数据中心标识

    5 机器ip标识

    12 单位毫秒内可以生成的序数极限

    snowflake的生成跟时间相关的使用的是System.currentTimeMilles(),跟冬令时没有关系。

    分布式id的进一步要求

    可靠性: 即高可用
    紧凑性: 64位的整数比较长,不太紧凑,作为索引,存储不占优势。
    有意义: 可以放入业务标识或者时间

    snowflake的缺点

    受时间影响:需要保证分布式集群的时间同步,即NTP ; 
    可以预测到:容易按照时间规律预测到,进而影响安全性;

    小结

    回答了分布式id的基本要求,已经常用方案。

    image.png

    原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
    我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!

  • 相关阅读:
    Ubuntu安装pyaudio找不到python.h的问题
    使用Django根据已有数据库生成models.py文件
    Ubuntu 16.04 安装MySQL
    Pycharm连接Github
    python中str内置函数isdigit、isdecimal、isnumeric的区别
    Python函数详解
    python递归详解+汉诺塔小案例
    Windows中git使用教程
    win10安装VirtualBox+使用
    AWK如何打印从某一列到最后一列的内容
  • 原文地址:https://www.cnblogs.com/snidget/p/12649844.html
Copyright © 2011-2022 走看看