商交易系统高并发分布式订单号生成策略
一、要求:
1.全局唯一性,不能重复
2.信息安全加密防止用户根据id规则获取数据
3.数据递增,保证下一个id一定大于上一个id
二,策略
1.UUID 唯一识别码,16个字节 (128位)
组成部分:当前日期+时间+时钟的序列+mac地址
uuid 有几个实现版本,比如jdk 自带的uuid
优点:生成简单,不占用宽带,本地生成,数据迁移不影响。
缺点:字母存储,无序,无法保证趋势递增,查询慢,不可读
2.snowflake(雪花twitter开源 分布式id算法)
41字节毫秒+10字节的机器id+10版本号,国内有很多平台有将其实现和优化
优点:本地生成,不占宽带,毫秒在高位,低位是趋势递增。
缺点:依赖时钟 如果时间回拨可能会重复,效率比uuid慢
3. 数据库
优点:代码实现简单,性能ok,数字排序,可读性强
缺点:受限于数据库,单点故障,扩容麻烦,需要插入后才能获取id增加查询数据库主从延迟master才能查到
4.redis 集群
格式:12位=年2位+当年第几天3+小时2+自增5
优点:不依赖数据库,灵活,没有单点故障,性能优于数据库
缺点:网络资源,需要增加额外服务插件
总结:
uuid | Token ,图片id等 | ※※ |
snowflake | Elk,mq,业务系统 | ※※※※ |
数据库 | 并发不大,业务增长不快 | ※※※ |
redis | 业务系统 | ※※※※※ |