关于分布式下如何保证ID全局唯一性的读书笔记

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

分布式ID的全局唯一性

要求:

1.全局唯一性:不能出现重复的id号(基本的要求)

2.信息安全:防止恶意的用户规矩id的规则来获取数据

3.数据递增:保证下一个id一定大于上一个id

 

解决方案:

1.UUID:通用唯一识别码 16个字节128位的长数字

组成部分:当前日期和时间序列+全局唯一性网卡mac地址

代码:

UUID.randomUUID()

如:35dd3497-dfe0-40fb-9cb2-b9624bad15a0

总结:

优点:代码实现简单、不占用宽带、数据迁移不受影响

缺点:无序、无法保证趋势递增、字符存储、传输、查询慢、不可读

 

2.Snowflake雪花算法:国外的twitter分布式id生成算法

组成部分:高位随机+毫秒数+机器码(数据中心+机器id)+10位的流水号

1+41+10+10=62

代码:百度or google

总结:

优点:代码实现简单、不占用宽带、数据迁移不受影响、地位趋势递增

缺点:强依赖时钟(多台服务器时间一定要一样,可统一用数据库时间)、无序无法保证趋势递增

 

3.redis:

组成部分:年份+当前这天属于这一年的第几天+小时+redis自增

2+3+2+5=12

代码:使用redis的incr步长方法实现自增

总结:

优点:不依赖数据、灵活方便、性能优于数据库的、无单点故障

缺点:占用网络资源、性能比本地生成慢

转载于:https://my.oschina.net/u/2460728/blog/1548113

你可能感兴趣的:(关于分布式下如何保证ID全局唯一性的读书笔记)