面试连环炮系列(十一):说说你们的分布式ID设计方案
- 说说你们的分布式ID设计方案
我们采用Snowflake算法,生成一个64bit的数字,64bit被划分成多个段,分别表示时间戳、机器编码、序号。
- 41位的时间序列(精确到毫秒,41位的长度可以使用69年)。
- 10位的机器标识(10位的长度最多支持部署1024个节点)。
- 12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)。
优点: - 时间戳在高位,自增序列在低位,整个ID是趋势递增的,按照时间有序。
- 性能高,每秒可生成几百万ID。
- 可以根据自身业务需求灵活调整bit位划分,满足不同需求。
Snowflake算法有什么缺点?
它的算法依赖机器时钟,如果机器时钟回拨,会导致重复ID生成。虽然在单机上是递增的,但是分布式环境下,每台机器上的时钟不可能完全同步,有时候会出现不是全局递增的情况。UUID不是更简单吗,为什么不用?
UUID是16字节128位长的数字,以36字节的字符串表示,UUID算法规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素。UUID过长,而且没有顺序,不适合用于数据库索引字段。Snowflake算法的ID太长了,有没有更短的方案
可以采用基于Redis的原子操作INCR自增,比如订单号 = 日期 + 当日自增长号。- 采用Redis方案的缺点是什么?
- 如果系统中没有Redis,还需要引入,增加系统复杂度。
- 需要编码和配置的工作量比较大。
参考(部分摘抄的文字版权属于原作者):
https://blog.csdn.net/hl_java/article/details/78462283
https://www.jianshu.com/p/2456c737aebb
面试连环炮系列(十一):说说你们的分布式ID设计方案的更多相关文章
- 面试刷题31:分布式ID设计方案
面试中关于分布式的问题很多.(分布式事务,基本理论CAP,BASE,分布式锁)先来一个简单的. 简单说一下分布式ID的设计方案? 首先要明确在分布式环境下,分布式id的基本要求. 1, 全局唯一,在分 ...
- 分布式ID设计方案
分布式ID的定义: 全局唯一 有序性 有意义 高可用 紧凑性 序列号的可预测性 方案1:使用数据库递增的顺序 最常见的方式.利用数据库,全数据库唯一. 优点: 1)简单,代码方便,性能可以接受. 2) ...
- 面试连环炮系列(二十一):你们的项目怎么使用kafka
你们的项目怎么使用kafka? 我们采用kafka进行日志采集,准确点说是ELK方案,即elasticsearch + logstash + kibana + kafka.通过Spring AOP的方 ...
- 手撕面试官系列(十一):BAT面试必备之常问85题
JVM专题 (面试题+答案领取方式见侧边栏) Java 类加载过程? 描述一下 JVM 加载 Class 文件的原理机制? Java 内存分配. GC 是什么? 为什么要有 GC? 简述 Java ...
- 面试连环炮系列(二十三): StringBuffer与StringBuild的区别
StringBuffer与StringBuild的区别 频繁修改字符串时,建议使用StringBuffer和StringBuilder类.StringBuilder相较于StringBuffer有速度 ...
- 面试连环炮系列(二十):TCP的滑动窗口协议是什么
TCP的滑动窗口协议是什么 滑动窗口协议,用于网络数据传输时的流量控制,以避免拥塞的发生.该协议允许发送方在停止并等待确认前发送多个数据分组.由于发送方不必每发一个分组就停下来等待确认,因此该协议可以 ...
- 面试连环炮系列(十五):说说Eureka的高可用方案
说说Eureka的高可用方案 至少3个Eureka实例才能满足高可用,配置方法如下: 准备三个节点node1,node2,node3. 在每个实例的application.xml文件里加入 eurek ...
- 面试连环炮系列(十四): HTTP状态码302的跳转逻辑
HTTP状态码302的跳转逻辑 302状态码表示重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地 ...
- 面试连环炮系列(三):synchronized怎么用的
synchronized怎么用的? 用过,synchronized是常用的并发控制关键字,简单的说就是访问加锁.它可以修饰静态方法或者一个类的class对象,这叫类锁:可以修饰普通方法或者代码块,这叫 ...
随机推荐
- Ubuntu 16.04 安装最新稳定版Nginx 1.6.0
Ubuntu 16.04 默认安装的是nginx 1.14.0 #默认安装方式:apt-get install nginx 1.查看是否安装nginx,如果已经安装,请先卸载 #查看安装版本 d ...
- Dockerfile构建私有镜像
构建第一个镜像 镜像的定制实际上就是定制每一层所添加的配置,文件.我们可以把每一层修改,安装,构建,操作的命令都写入一个脚本,这个脚本就是Dockerfile.Dockerfile是一个文本文件,其内 ...
- OSI案例详解+ARP+DNS
案例,淘宝买东西 DNS 域名的作用其实就是相对ip地址来说更好记忆和识别,DNS就是根据域名解析出ip 一次请求,DNS解析的过程 1.在浏览器输入一个域名,操作系统首先会检查自己的本地hosts文 ...
- ThinkPHP5——安装验证码和使用
1.使用composer安装验证码 首先要安装composer,大部分“composer require topthink/think-captcha”命令无法运行或者提示不是内部文件或可执行命令,都 ...
- 转:JDK1.8-Stream()使用详解
为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...
- composer install 或 update 速度慢的解决方案(composer加速)
我们在使用composer install和composer update时,有的时候安装和更新速度非常慢,我们可以通过下面的几个方法来解决这个问题. 首先查看一下当前的 composer 全局配置地 ...
- 洛谷 题解 P5595 【【XR-4】歌唱比赛】
本蒟蒻又双叒叕被爆踩了. 考试时一遍过 其实这题还是很简单的,难度不会大于普及组T1. CSP 2019 RP++ 看开始看到题目,觉得特别长,不想看... 我来和你们分析分析题目,你们就都可以秒了. ...
- 强化学习一:Introduction Of Reinforcement Learning
引言: 最近和实验室的老师做项目要用到强化学习的有关内容,就开始学习强化学习的相关内容了.也不想让自己学习的内容荒废掉,所以想在博客里面记载下来,方便后面复习,也方便和大家交流. 一.强化学习是什么? ...
- A.Changing Volume
题目:改变音量 题意:给定两个数a和b,有6个操作(-5, -2, -1, +1, +2, +5),求a变到b的最小操作次数 操作的过程中不能变到小于0,即音量不能调到小于0 分析: (贪心),我们可 ...
- 每个pool pg数计算
ceph PGs per Pool Calculator 原文档:http://xiaqunfeng.cc/2017/09/18/ceph-PGs-per-Pool-Calculator/ 2017- ...