这里不会详细解释 snowflake ,如果要看详细解释可以参考 github.com/baidu/uid-g…
snowflake 是分布式主键的一种实现。分布式主键通常要解决4个基本问题:
- 全局唯一不冲突。
- 可“分布式”生成。
- ID“均匀分布”。
- 满足可被索引的需要,比如 MySQL 的 B+ 树索引的要求,即 ID 通常是要单调递增。
接下来看看 snowflake(是怎么解决上面的问题的) ,snowflake ≈ "时间戳"+"工作机器ID"+"系列号"。
- "时间戳"+"工作机器ID" 保证了机器之间不会冲突,"序列号"保证了单台机器内部不会冲突,整体保证了全局的唯一性。
- “工作机器ID”保证了可分布式生成。
- “序列号”(可能能)保证分布式主键均匀分布(主要是通过求余方式来落库的,保证序列号生成是均匀是一件好说不好做的事情)
- “时间戳”保证了单调递增。
之前看过很多关于 snowflake 的文章,通常都是长篇大论,说实在的我看第一次的看的时候我觉得 snowflake 好像简单,又好像复杂(长篇大论)。多看了几次之后发现是不能领会其要义。虽然是炒冷饭,只要对少部分人有帮助就好。