2019独角兽企业重金招聘Python工程师标准>>>
分布式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步长方法实现自增
总结:
优点:不依赖数据、灵活方便、性能优于数据库的、无单点故障
缺点:占用网络资源、性能比本地生成慢