《说说常用的分布式ID设计方案》!一位工作7年的同学被问到这样的问题。问题不难,但在实际面试中,如果只回答1、2、3,很难通过面试,因为作为资深程序员,还是需要有自己的理解和思考。大家好,我是Mic,一名拥有14年经验的Java程序员。回答这个问题的达人,我整理成了15W字的面试文档,可以私信我获取。我们来看看专家的回答。专家:首先,分布式全局ID的解决方案有很多,比如:使用Mysql的全局表,使用Zookeeper的有序节点,使用MongoDB的objectidredis的自增idUUID等。。。这些解决方案只是解决了基本的id唯一性问题。在实际生产环境中,构建全局唯一id需要考虑更多的因素:有序,有序的id可以更好的确定数据的位置,而B+数据存储结构中,范围查询效率更高,可以提高效率B+树的数据维护。安全性,避免恶意爬取数据导致数据泄露可用性,ID生成系统的可用性要求非常高,一旦出现故障,业务将不可用。性能方面,全局id生成系统需要满足整个公司的业务需求,涉及亿级的调用对性能有更高的要求。因此,如果我们选择数据库的全局表,则需要更新数据库,而无需获取一次id。性能的上限是显而易见的,基于数据库构建高扩展性、高性能的解决方案是非常困难的。.因此,目前市场上的主流方案都是基于Twitter早期开源的Snowflake算法。它是由64位长度组成的全局id生成算法,通过将64位划分为区间来表达不同的含义来实现唯一性。它的优点是:算法实现简单,没有太多的外部依赖,可以根据位运算生成有意义的有序数,性能也很好。推特测试的峰值是每秒10万条。此外,美团开源了全球唯一id生成系统leaf,同样采用雪花算法构建全球唯一id,并在高性能和高可用方面做了很多优化,每天提供数亿次调用.总结很明显,这是一个热门话题,在实践中被广泛使用。建议粉丝在这方面做一些更深入的思考和研究,以应对面试官的进一步追问。请记住,全局ID本身的设计方案和实现细节非常重要。大家记得点赞收藏关注版权声明:本博客所有文章除特别注明外均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!
