算法优化前:
标准Snowflake将64个bit位分为三部分,41bit的时间戳,10bit的机器id,12bit的自增序列号.
除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定。默认情况下41bit的时间戳可以支持该算法使用大约69.7年,10bit的工作机器id可以支持1023台机器,序列号支持1毫秒产生4095个自增序列id。
算法优化:
工作机器id由10位调整为18位,取值为docker容器ipv4的后18位; 自增序列由12位调整为4位, 最大值15。
序列号是一系列的自增id,为了处理在同一毫秒内需要给多条消息分配id,若同一毫秒把序列号用完了,则“等待至下一毫秒”。
微服务中自增序列号占4bit, 最大值为15。