乐趣区

关于java: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 生成零碎须要满足整个公司的业务需要,波及到亿级别的调用,对性能要求较高

因而,在如果咱们抉择数据库的全局表,你没获取一次 id 就须要更新数据库,性能下限比拟显著,

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

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

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

它的益处是:

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

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

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

总结

很显著这是一个热点问题,并且在理论利用中也比拟宽泛。

倡议各位粉丝在这个畛域做一些更深层次的思考和钻研,从而去应答面试官更进一步的诘问

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

大家记得点赞珍藏加关注

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

退出移动版