ID生成服务系列(二)

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: ID生成服务系列(二)

本地ID生成器,分布式ID生成器

本地ID生成器是指在本地环境中生成唯一标识符(ID)的工具或算法。本地ID生成器是相对于 分布式ID生成器而言的。二者的区分不是ID的用途,而是生产ID是否存在 网络 IO开销:

①、本地ID生成器在本地生产ID,没有网络IO开销;

②、分布式ID生成器 需要进行远程调用生产ID,有网络IO开销;

在设计ID生成器时,需要考虑以下几个方面

1. 唯一性:生成的ID必须在整个系统中是唯一的,以避免冲突。

2. 可排序性:生成的ID应该具有可排序性,以便根据ID的顺序进行查询和排序操作。

3. 性能:ID生成的过程应该高效,不应该成为系统的瓶颈。

4. 可读性:生成的ID可以是可读的,便于调试和理解。

5. 分布式支持:如果系统是分布式的,需要确保在多个节点上生成的ID是唯一的

常见的本地ID生成器算法包括:

1. 自增ID:使用一个计数器(本地计数器、或者分布式计数器),在每次生成ID时递增。这种方式 简单高效,但在分布式环境中需要额外的考虑,以避免冲突,长整型,64位,8个字节。

2. UUID(Universally Unique Identifier):使用标准的UUID算法生成唯一的128位标识符。UUID 可以使用时间戳、MAC地址等信息来保证唯一性,但不具备可排序性。 UUID.randomUUID().toString().repleace("-",");我们这样替换掉就可以了;32个字节。8-4-4-4-12的 36个字符,我一般短横线就减少了4个字节,从存储空间来说是long的是4倍。存储空间是自增Id的4倍。

3. 雪花算法(Snowflake):雪花算法是Twitter开源的一种分布式ID生成算法。它使用一个64位的 整数,结合时间戳、机器ID和序列号来生成唯一的ID。雪花算法具备可排序性和高性能,适用于 分布式环境。

分布式ID:数据库自增ID

这里常规是指数据库主键自增索引。特点如下:

(1)、架构简单容易实现。

(2)、ID有序递增,IO写入连续性好。

(3)、INT和BIGINT类型占用空间较小。

(4)、由于有序递增,易暴露业务量。

(5)、受到数据库性能限制,对高并发场景不友好。

(6)、bigint最大是2^64-1,但是数据库单表肯定放不了这么多,那么就涉及到分表。如果业务量真的太大了,主键的自增id涨到头了,会发生什么?报错:主键冲突。

分布式ID:Redis生成ID

(1)、通过redis的原子操作INCR和INCRBY获得id。

(2)、相比数据库自增ID,redis性能更好、更加灵活。

(3)、不过架构强依赖redis,redis在整个架构中会产生单点问题。

(4)、在流量较大的场景下,网络耗时也可能成为瓶颈。

分布式ID:ZooKeeper唯一ID

(1)、ZooKeeper是使用了Znode结构中的Zxid实现顺序增ID。

(2)、Zookeeper类似一个文件系统,每个节点都有唯一路径名(Znode),Zxid是个全局事务计数器,每个节点发生变化都会记录响应的版本(Zxid),这个版本号是全局唯一且顺序递增的。

(3)、这种架构还是出现了ZooKeeper的单点问题。

分布式雪花算法

虽然Snowflake 可以很容易扩展成为分布式架构

(1)、Snowflake + 机器固定编号

(2)、Snowflake +zookeeper 自增编号

(3)、Snowflake + 数据库 自增编号

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
7月前
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
963 0
|
前端开发
class id
class id
79 0
|
3月前
|
存储 Kubernetes 算法
ID生成服务系列(一)
ID生成服务系列(一)
|
2月前
|
Oracle Java 关系型数据库
@Id、@GeneratedValue的作用,以及@GeneratedValue的使用
@Id、@GeneratedValue的作用,以及@GeneratedValue的使用
|
自然语言处理 安全 Unix
了解一下新工具ULID?
了解一下新工具ULID?
264 0
|
自然语言处理 算法 安全
还在用uuid ,ulid来了
还在用uuid ,ulid来了
1750 0
|
安全
IDOR绝不止他人的 ID
目标中有这样一个功能,免费用户最多可以同时创建 3 个列表。如果您发送创建三个以上列表的请求,该站点将授予普通用户选择 3 个列表并锁定第 4 个和其他列表的权利。此外,无法管理、添加或删除、共享或重命名锁定列表。
123 0
IDOR绝不止他人的 ID
高性能高并发的生成唯一的Id
高性能高并发的生成唯一的Id
111 0