分布式发号器
可伸缩服务架构-框架与中间件 学习笔记
目录
一些分布式全局唯一id 方案简介。
基本需求
- 全局唯一性
- 粗略有序
- 在秒级别有序、在毫秒级别有序
- 可反解
- 可以通过id 获取相关信息 (例如时间信息、工作组、机器信息等)
- 可制造
- 可以进行手工处理
- 高可用
- 一台发生器出问题,可以使用别的替代,或者请求转移
- 高性能
- 性能要达到10000/s 单台机器
- 可伸缩性
- 业务是会增长的,需要有良好的可扩展性
可以选择的方案
- UUID
uuid 可以保证 ID 的唯一性。但是,有如下缺点
- 时间内容缺失
- 长度比较长, 数据库占用空间较大
- 不具有有序性, 数据库插入不友好
- 数据库方案
通过设置步长、数据库自增,保证唯一性
- 对数据库有一定依赖, 有性能问题
- 步长固定,水平扩展比较困难
- 不同数据库,管理困难
- snowflake 项目
- Scala 语言实现
- 需要二次开发
- golang 实现