当我们分库分表之后,同一个逻辑表的数据被分布到多个库中,这时如果使用数据库自增字段作为主键,
那么只能保证在这个库中是唯一的,无法保证全局的唯一性。那么假如你来设计用户系统的时候,使用
自增 ID 作为用户 ID,就可能出现两个用户有两个相同的 ID,这是不可接受的,那么你要怎么做呢?
我建议你搭建发号器服务来生成全局唯一的 ID。
基于 Snowflake 算法搭建发号器:
Snowflake 的核心思想是将 64bit 的二进制数字分成若干部分,每一部分都存储有特定含义的
数据,比如说时间戳、机器 ID、序列号等等,最终生成全局唯一的有序 ID。它的标准算法是这样的:
一般来说我们会有两种算法的实现方式:
1)嵌入到业务代码里,也就是分布在业务服务器中.
2)作为独立的服务部署,这也就是我们常说的发号器服务.
此文章为5月Day13学习笔记,内容来源于极客时间《高并发系统设计 40 问》