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

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

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

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

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

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

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

2,基于snowflake 算法生成;

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

1 标识正负

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

5 数据中心标识

5 机器ip标识

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

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

分布式id的进一步要求

可靠性: 即高可用

紧凑性: 64位的整数比较长,不太紧凑,作为索引,存储不占优势。

有意义: 可以放入业务标识或者时间

snowflake的缺点

受时间影响:需要保证分布式集群的时间同步,即NTP ; 

可以预测到:容易按照时间规律预测到,进而影响安全性;

小结

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

原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。

我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!

最新文章

  1. SQL Server 2008 标准版不支持Reporting Services的数据驱动订阅
  2. 【Tomcat 6.0官方文档翻译】—— 简介
  3. SSO系统的分析与架构
  4. ASP连接11种数据库的常用语法
  5. Xcode 常用编译选项设置
  6. Android高斯模糊
  7. Database Connection Pool Library | Libzdb
  8. 201521123087《Java程序设计》第14周学习总结
  9. JAVAWEB开发环境搭建,附JDK开发环境一键配置批处理bat
  10. 一步一步从原理跟我学邮件收取及发送 3.telnet命令行发一封信
  11. 利用JDBC工具类 模拟用户登录!
  12. eclipese pyDEV安装----可以直接运行python文件
  13. 4、promise
  14. 安装CentOS 7 的yum 到 Radhat 7上,使其可以获取资源
  15. XBee 802.15.4/Digimesh FAQs:如何为2.4G模块选择合适的信道
  16. C#委托delegate、Action、Func、predicate 对比用法
  17. Cookie,Session的区别
  18. mysql数据库基于LVM快照的备份
  19. 配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
  20. 《锋利的JQuery》中的动画效果:

热门文章

  1. 【每日一包0018】fecha
  2. vue 组件中添加样式不生效
  3. golang切片
  4. 【asp.net core】实现动态 Web API
  5. mac 工具推荐
  6. Nginx之负载均衡配置(二)
  7. python3:input() 函数
  8. (转)C++中的new
  9. HTTP中主要的头字段
  10. 聊聊count(*)