【Java面试】谈谈常用的分布式ID设计方案(java分布式id生成方案)

  本篇文章为你整理了【Java面试】谈谈常用的分布式ID设计方案(java分布式id生成方案)的详细内容,包含有分布式id的作用 java分布式id生成方案 分布式id解决方案 分布式id算法 【Java面试】谈谈常用的分布式ID设计方案,希望能帮助你了解 【Java面试】谈谈常用的分布式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就需要更新数据库,性能上限比较明显,

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

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

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

  它的好处是:

  算法实现简单

  不存在太多外部依赖

  可以生成有意义的有序编号

  基于位运算,性能也很好,Twitter测试的峰值是10万个每秒。

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

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

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

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

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

  大家记得点赞收藏加关注

  版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构!
 

  如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

  以上就是【Java面试】谈谈常用的分布式ID设计方案(java分布式id生成方案)的详细内容,想要了解更多 【Java面试】谈谈常用的分布式ID设计方案的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: