在后端系统中,有生每条记录都需要一个唯一的成方ID来进行标识。
虽然一开始听起来可能很琐碎,分布但在高度分布式的式系式环境中生成全局唯一标识符实际上是一个具有挑战性的任务。
在本文中,统中让我们来看一下一些常见的有生已知ID生成算法。
使用自增功能生成ID
Ticket 服务解决方案利用 SQL 数据库中的成方自增功能来生成唯一的ID。
使用集中式数据库服务器,分布Web 服务器插入一个新记录到数据库中以生成一个自增的式系式ID。
CREATE TABLE `ID` (`id` bigint(20) unsigned NOT NULL auto_increment,统中`stub` char(1) NOT NULL default '',PRIMARY KEY (`id`),UNIQUE KEY (stub));REPLACE INTO ID (stub) VALUES ('a');SELECT LAST_INSERT_ID();
与使用 INSERT INTO 命令不同,我们可以使用 REPLACE INTO 命令来减少数据库中的有生记录数量。
REPLACE INTO 命令以原子方式原地更新单行,成方并获取自增的主 ID,而无需创建新记录。
优点:
缺点:
使用轮询路由请求
与使用一个数据库不同,我们可以使用多个具有偏移量的数据库,以避免单点故障和写入瓶颈。
偏移量 用于防止ID冲突。每个数据库通过 k,k 是正在使用的数据库服务器数量,增加其ID。
如上所示,如果使用了三个数据库,每次生成ID时,自增的ID增加3。
优点:
缺点:
Snowflake方法在不依赖数据库的情况下生成 64位的ID。
64位的ID被分成5个主要部分
ID分为5个主要部分:
时间戳。自纪元以来的毫秒数。41位大约会在70年内溢出,对于大多数项目的寿命来说是安全的。
数据中心ID。服务器所在的数据中心。如果两个服务器在相同的时间收到相同的请求,则可以防止ID冲突。
机器ID。机器的ID。如果两台服务器在相似的数据中心中的相同时间收到相同的请求,则可以防止冲突。
序列号。对于在同一服务器上生成的每个ID,序列号会递增1,并在每毫秒重置为0。这可以防止在同一服务器上的ID冲突。
优点:
缺点:
MongoDB为每个新文档创建一个唯一的对象ID。
对象ID由 MongoDB驱动程序生成而不是数据库。这意味着可以在服务器上生成对象ID,而不依赖于MongoDB数据库。
MongoDB对象ID是一个96位的ID
与Snowflake方法类似,MongoDB对象ID分为4个部分。对象ID是一个96位的ID。
大部分字段与Snowflake方法中提到的字段相似。
由于同一台机器上可能运行多个线程或进程,因此进程ID可以区分在不同进程中由同一台机器生成的对象ID。
优点:
缺点:
UUID(通用唯一标识符)
128位UUID的示例
通用唯一标识符是一个128位的数字,包括多个部分,例如时间、节点的MAC地址或MD5哈希的命名空间。
有一组标准化的算法用于生成UUID,多年来已经发布了5个不同版本的UUID,以适应不同的需求。
这些算法相当冗长,因此我们不会详细介绍它们。我们将更多地关注它的优缺点。
优点:
缺点:
在分布式环境中实现高度可扩展和可用的ID生成器并不是微不足道的。
责任编辑:赵宁宁 来源: 小技术君 分布式ID(责任编辑:休闲)
我国打工人每周平均工作49小时:全球国家工时对比 欧洲干最少
我国打工人每周平均工作49小时:全球国家工时对比 欧洲干最少
Omdia复盘Orange开放技术日活动:从传统电信企业向全球数字化企业转型
消息称Orange与MasMovil西班牙合并交易将获欧盟批准