分布式ID(Snowflake)

 

分布式ID方案的要求

分布式 ID 生成方案首先要满足ID的唯一性。

在此基础上再优化,从而为业务提供更好的支持。如:

 

ID有意义

如果ID是有序的,或其本身就包含了相关业务的时间等其它应用系统本身的业务信息,那就有利于提高处理业务的效率。

提高数据查找效率就是最常见的好处。

 

服务高可用

生成ID的机器(服务)应该是高可用的,以满足分布式系统整体的高可用目标。

这可以通过主从备份或真正的分布式多服务实例来实现。

 

ID紧凑

过长的ID处理起来比较耗费资源。在数据库存储与索引性能方面,长ID都不如短ID表现得好。

设计ID时也需要考虑编程语言中基本数据类型是否可以方便地表示ID。

 

此外,如果某些场景中生成ID的需求非常密集,那么还得考虑单位时间内所能生成ID的上限是否足以支撑业务。

 

两种分布式ID方案

一般有两种方案:

方案一:基于数据库自增序列

优点:简单易用

缺点:

每生成一个ID都会触发一次数据库写请求,代价较高;

构建高扩展性和可靠性的解决方案比较复杂。因为会涉及数据库本身的扩展性和可靠性方案。

 

 

方案二:基于 Snowflake 的方案

优点:算法简单,对外部依赖少,性能好

缺点:存在时钟偏斜问题。计算机可能发生时钟回拨问题,导致时间戳不准确,继而产生重复ID。

可以通过设置操作系统 ntp 的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值