nber1994



sysDesign-发号器

January 9, 2019

ID生成器

要求

ID一定要是全局有序的,再者因为有诸如按照时间排序的场景,所以要求按照时间有序。同时要求尽可能的短

方案

1.使用数据库的auto_increment生成全局递增ID

优点:

2.数据库集群

一共有n个节点,每个节点设置不同的auto_increment初始值,已经相同的增长步长

3.uuid

数据库生成ID方法,都需要有远程调用。uuid的方法是在本地生成唯一ID

4.snowflake

核心思想:一个long的ID,41bit作为毫秒数,10bit作为机器编号,12bit作为毫秒内序列号 理论上每秒能生成:1000*2^12个大约400w的ID

  1. 假设一个64bit的int值,如果系统预计运行10年,至少需要10365246060*1000来算出大致需要多少位
  2. 单机的峰值10w,也就是每毫秒大概是100,则需要预留7bit给毫秒内序列号
  3. 机房和机器数也按照该规则

参考