利用数据库自增ID
优点:最简单
缺点:单点风险、单机性能瓶颈利用数据库集群并设置相应的步长(Flickr方案)
优点:高可用、ID较简洁
缺点:需要单独的数据库集群Twitter Snowflake
优点:高性能高可用、易拓展
缺点:需要独立的集群以及ZK
snowflake算法的缺点:
时钟回拨问题;
趋势递增,而不是绝对递增;
不能在一台服务器上部署多个分布式ID服务;
一大波GUID、Random算法
优点:简单
缺点:生成ID较长,有重复几率基于Redis的ID生成器
优点:长度可控,高性能
缺点:依赖redis时间戳+用户标识码+随机数(点评)
优点:方便、成本低。
- 基本无重复的可能。
- 自带分库规则,这里的用户标识码即为用户ID的后四位,在查询的场景下,只需要订单号就可以匹配到相应的库表而无需用户ID,只取四位是希望订单号尽可能的短一些,并且评估下来四位已经足够。
- 可排序,因为时间戳在最前面。 缺点:长度稍长性能要比int/bigint的稍差等