分布式ID标准
- 分布式系统中往往ID需要跨库全局唯一,否则引发业务层的异常冲突。
- 全局ID必须是数字且升序,主要考虑到升序ID可以保证DB的性能。
- ID生成器必须稳定,因为这个系统是被所有系统所依赖的。
借鉴Instagram的ID生成算法
- 整个ID的二进制长度为64位
- 前36位使用时间戳,以保证ID是升序增加
- 中间13位是分库标识,用来标识当前这个ID对应的记录在哪个数据库中
- 后15位为自增序列,以保证在同一秒内并发时,ID不会重复。每个shard库都有一个自增序列表,生成自增序列时,从自增序列表中获取当前自增序列值,并加1,做为当前ID的后15位