阿里分布式id生成 百度美团Java开发如何在高并发分布式下生成全局ID生成策略?
百度美团Java开发如何在高并发分布式下生成全局ID生成策略?
百度美团java开发如何在高并发分布式环境下生成全局ID生成策略?这种生成策略与您的数据库有很大关系。除非你想生成自己的程序,比如Oracle支持sequence,MySQL支持autoinc,MSSQL支持identified等等,你可以根据你的数据库系统采用不同的策略,如果你使用ORM框架,你可以采用框架提供的策略,比如,hibernate提供了许多生成策略
1如果主题不要求ID是数字,建议使用最简单的一个,即UUID,它包括机器代码、时间戳、随机数等。但是,UUID最终生成一个全局唯一的字符串,而不是整数,并且看起来是无序的。
2. MySQL自己添加ID。它使用一个表来存储各种业务id。每个分布式系统插入一个ID后,生成1000万个本地号码与ID拼接,然后每个系统得到一个ID,相当于生成1000万个ID,足够长时间使用。这1000万个ID可以预先定义,并在系统启动时放入内存。因为它们只是ID,所以不会占用太多内存。MySQL可以内置到集群中,这不会影响自增IDs的使用。
3. 与MySQL的auto-increment ID类似,redis的incr实现了自动增量。每个分布式系统,比如redis,都是用incr插入一个ID,然后生成1000万个本地号码与ID拼接,如果每个系统都有一个ID,相当于生成1000万个ID,足够长时间使用。这1000万个ID可以预先定义,并在系统启动时放入内存。因为它只是一个ID,所以不会占用太多内存。Redis也可以内置到集群中,这不会影响自增ID的使用。Twitter的雪花算法与UUID类似,包括机器码、时间戳、随机数等,但最终生成的是64位整数,可以满足许多分布式系统的要求。如果Id必须是整数,建议使用snowflake而不是UUID。
javaWeb 在系统高并发的情况下生成有序流水号?
两种常用的分布式ID方法是UUID和snowflake算法。
UUID是一种本地ID生成方法,不需要远程调用,具有高性能、低延迟和良好的可扩展性,但UUID不支持增量。
该算法的核心思想是一个长ID:1位标识符(始终为0)、41位时间戳毫秒、10位机器识别码和12位序列号(毫秒)。从理论上讲,该算法可以在一台机器上每秒生成1000*(2^12)个ID,具有高性能、增长趋势和高灵活性。然而,算法依赖于机器的操作时钟。如果服务器倒计时,将生成重复的ID。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。