首页 > 编程语言 >【Java面试】谈谈常用的分布式ID设计方案

【Java面试】谈谈常用的分布式ID设计方案

时间:2022-08-22 17:47:08浏览次数:146  
标签:Java ID 面试 设计方案 全局 id 分布式

“谈谈常用的分布式ID设计方案”!

一个工作了7年的同学,被问到了这样一个问题。

问题并不难,但是在实际面试的时候,如果只是回答1,2,3

很难通过面试,因为作为一个高级程序员,还需要有自己的理解和思考。

大家好,我是Mic,一个工作了14年的Java程序员。

这个问题的高手回答,我整理到了15W字的面试文档里面,大家可以私信我领取。

下面看看高手的回答

高手:

首先,分布式全局ID的的解决方案有很多,比如:

  • 使用Mysql的全局表
  • 使用Zookeeper的有序节点
  • 使用MongoDB的objectid
  • redis的自增id
  • UUID等等
  • ......

这些方案只是解决基础的id唯一性问题,在实际生产环境中,需要构建一个全局唯一id

还需要考虑更多的因素:

  • 有序性, 有序的ID能够更好的确认数据的位置,以及B+数的存储结构中,范围查询的效率更高,并且可以提升B+树数据维护的效率。

  • 安全性,避免恶意爬去数据造成数据泄露

  • 可用性,ID生成系统的可用性要求非常高,一旦出现故障就会造成业务不可用的问题

  • 性能,全局id生成系统需要满足整个公司的业务需求,涉及到亿级别的调用,对性能要求较高

因此,在如果我们选择数据库的全局表,你没获取一次id就需要更新数据库,性能上限比较明显,

而且基于数据库构建高扩展和高性能的解决方案难度很大。

所以,目前市面上主流的解决方案是基于Twitter早期开源的Snowflake雪花算法。

它是由64位长度组成的全局id生成算法,通过对64位进行区间划分来表述不同含义实现唯一性。

img

它的好处是:

  • 算法实现简单
  • 不存在太多外部依赖
  • 可以生成有意义的有序编号
  • 基于位运算,性能也很好,Twitter测试的峰值是10万个每秒。

另外,美团公司开源了一个全局唯一id生成系统leaf,它里面也用到了雪花算法去构建全局唯一id

并且在高性能和高可用方面,做了很多的优化,为美团内部业务提供了每天上亿次的调用。

总结

很明显这是一个热点问题,并且在实际应用中也比较广泛。

建议各位粉丝在这个领域做一些更深层次的思考和研究,从而去应对面试官更进一步的追问

记住,全局ID本身的设计方案和实现细节是很重要的。

大家记得点赞收藏加关注

file

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构
如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

标签:Java,ID,面试,设计方案,全局,id,分布式
From: https://www.cnblogs.com/mic112/p/16613629.html

相关文章

  • IDEA快捷键相关
    1./+shift**+Enter会出现以下这种注释文档注释12.选中ctrl+/加//注释或取消//注释单行3.选中ctrl+shift+/加/*/注释或取消/*/文档注释2......
  • wordpress粘贴图片自动上传到服务器(Java版)
    ​ 在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper。通过知乎提供的思路找到粘......
  • IDEA新建项目的坑
    今天新建项目时,发现了一个很有意思的问题。即如果你新建了一个文件夹,再在IDEA里面新建项目、选择该文件夹时,IDEA会自动把该文件夹转化为模块。例如上图中,DemoProject是我......
  • java算法:快速排序
    快速排序有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“61279345108”这个10个数进行......
  • 【JAVA】RestTemplate配置超时时间
    配置类:@BeanpublicRestTemplaterestTemplate(){SimpleClientHttpRequestFactoryrequestFactory=newSimpleClientHttpRequestFactory();......
  • Java IO理解
    JavaBIONIOAIO理解同步异步同步:发起一个调用后,被调用者未处理完请求之前,不返回异步:发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回......
  • 舵机 PID控制参数补充
    PID控制是一种非常有用的工具,可用于微调DYNAMIXEL系统的运动行为,以下视频很好地介绍了PID控制的基础知识。   链接稍后发送虽然这段视频为理解PID控制中使用的参数......
  • idea集成maven插件和使用骨架创建maven的java工程
    idea集成maven插件     关闭设置界面   使用骨架创建maven的java工程     ......
  • Android开发常用知识
    1.知识点解析1.1dimen1.尺寸资源;2.在工程的res\layout\目录下创建一个test_dimen.xml布局文件。3.在该布局文件中添加一个TextView和一个Button。4.TextView的宽......
  • 多平台Java安装程序构建器
    install4j是一个功能强大的多平台Java安装程序构建器,可为Java应用程序生成本机安装程序和应用程序启动器。install4j的易于使用,它的扩展平台支持和其强大的屏幕和动作系统......