Skip to content

Latest commit

 

History

History
24 lines (17 loc) · 1.29 KB

分布式id.md

File metadata and controls

24 lines (17 loc) · 1.29 KB

分布式系统唯一id的总结

  • 利用数据库的自增主键

    • 主键自增来生成递增的id主键
    • 缺点: 单机单点故障,不能支撑足够的并发量
    • 改进: 改成多机自增主键,每台机器设置不同的起始值,相同的自增步长实现唯一id
  • 构建唯一id服务

    • 底层数据库记录最新的max_id值,上层构建genSeqid服务每笔从下游数据库去到max_id,生成一个ids池,上游需要id直接从ids池中去取,如果取完了,继续从下游数据库拿到max_id,继续生成一定长度的id序列号提供服务
    • eg:数据库起始max_id=0,genseqid服务拿到0然后生成10个序列号[0-9],同时更新max_id=10
    • 目前据我理解:美团的leaf就是基于ids池来实现唯一id
  • twitter的snowflake算法:

    • 高位41位表示表示毫秒数,最高位0表示符号
    • 中位10位表示机器编号
    • 低位12为表示一毫秒内的序列号0
    • 在统一毫秒类,毫秒+机器号+序列号 每个请求都加锁利用atomic获取自增的id序列号,如果当前的序列号大于212就让这个请求等待到下一秒
    • 这种算法理论上单机每秒可以实现1000*212sup>个id,足以满足业务的需求
  • 号外: 乐观锁+悲观锁

    • 这里一直是我的知识盲区:还要继续踩