雪花id重复 论文

雪花id重复 论文

问:雪花算法之【线上订单号重复了?一招搞定它!】
  1. 答:公司老的系统原先采用的时间戳生成订单号,导致了如下情形
    打断一下:大家知道怎么查系统某项重复的数据吧
    不得了,这样重复岂不是一单成功三方回调导致另一单也成功了。
    多个服务怎么保证生成的订单号唯一呢?
    先上code
    以上是采用snowflake算法生成分布式唯一ID
    41-bit的时间可以表示 (1L<<41)/(1000L360024*365)=69 年的时间,10-bit机器可以分别表示1024台机器。如果我们对IDC划分有需求,还可以将10-bit分5-bit给IDC,分5-bit给工作机器。
    这样就可以表示32个IDC,每个IDC下可以有32台机器,可以根据自身需求定义。12个自增序列号可以表示 2^12 个ID,理论上snowflake方案的QPS约为 409.6w/s ,这种分配方式可以保证在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的。
    这种方式的优缺点是:
    优点:
    缺点:
    一般来说,采用这种方案就解决了。
    还有诸如,mysql的 auto_increment策略,redis的INCR,zookeeper的单一节点修改版本号递增,以及zookeeper的持久顺序节点。
问:ID号生成 雪花算法
  1. 答:1、twitter的SnowFlake生成ID能够按照时间有序生成
    2、SnowFlake算法生成id的结果是一个64bit大小的整数
    3、分布式系统内不会产生重复id(用有datacenterId和machineId来做区分)
    datacenterId(分布式)(服务ID 1,2,3.....) 每个服务中写死
    machineId(用于集群) 机器ID 读取机器的环境变量MACHINEID 部署时每台服务器ID不一样
问:分布式ID生成方案:雪花算法(源自Twitter)
  1. 答:雪花(snowflake)在自然界中,是极具独特美丽,又变幻莫测的东西:
    雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。
    算法描述:
    snowflake.go
    main.go
    测试结果:
    结论:
雪花id重复 论文
下载Doc文档

猜你喜欢