全局唯一数字ID生成子系统

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: GUID 雪花算法 snowflake uid-generator

为什么需要一个GUID生成服务?

1、业务实现会有限制
例如:某些业务场景批量导入功能,生成订单ID需要调用订单服务的订单ID生成来生成订单ID,支付信息的ID则需要调用支付服务来生成支付ID。
2、分库分表
分库分表时如果使用数据库自增主键,分表会受限。

为什么不用工具类等方式集成到每个工程里面?

1、业务系统集群内全局唯一
如果用工具类等方式集成到工程
优点:
1、ID为本地业务服务生成,不需要走网络调用链,性能提升
缺点:
1、业务服务可能需要关注ID生成的相关内容
要么每个工程都需要做相关配置(如:timebits、workerbits、seqbits和epohstr),要么将这些配置写死到代码。
2、业务服务生成的ID可能不是全局唯一

有什么风险

1、全局唯一ID服务挂掉业务全挂
2、可能会存在性能问题

为什么不使用MySQL自增ID?

1、MySQL自增ID限制后续业务分库分表
2、MySQL自增ID限制一些业务的简便性,例如:批量导入业务ID关联,只能先将业务数据写入数据库得到ID,然后再执行后续业务

目的

1、使用全局ID生成服务替换MySQL 自增ID

需求

1、生成全局唯一ID
2、ID有序
3、支持34年
4、单节点每秒生成65,534个ID
5、集群支持最大节点重启次数262,143次
6、接口需求(获取单个ID接口,获取N个ID接口、获取当前服务worker_node信息)

技术

1、搭建guid服务集群
2、使用百度uid-generator
3、使用MySQL数据库作为work_node记录
4、时间比特位分配:30位
5、worker比特位分配:18位
6、序列比特位分配:15位

系统架构-GUID服务

1、全局ID服务划分到整体业务架构的基础服务层
2、上层服务(应用服务层和领域服务层)使用http进行内部调用
3、上层根据服务业务场景都可以调用该服务

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
存储 NoSQL 数据库
全局id生成方式
全局id生成方式
|
23天前
|
JavaScript
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
9 0
|
29天前
|
存储 算法 数据库
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
106 0
|
5月前
|
程序员 C语言 C++
06 C++ - 名字控制
06 C++ - 名字控制
29 0
|
4月前
获取两个list中相互不包含的部分
获取两个list中相互不包含的部分
45 0
|
2月前
|
存储 JavaScript
如果需要在组件之间共享一个`ref`,应该如何实现?
如果需要在组件之间共享一个`ref`,应该如何实现?
14 0
|
5月前
|
存储 缓存 小程序
小程序全局共享数据--存储
小程序全局共享数据--存储
60 0
|
7月前
|
存储 Rust 算法
有关'全局唯一id'
有关'全局唯一id'
53 0
|
7月前
|
安全
RxSwift特征序列Driver的使用,以及共享附加作用与非共享附加作用的区别?
RxSwift特征序列Driver的使用,以及共享附加作用与非共享附加作用的区别?
131 0
|
SQL 机器学习/深度学习 分布式计算
如何判断多账号是同一个人?用图技术搞定 ID Mapping
如何判断多个账号,它可能是一个邮箱,一个地址,一个手机对应着多个 ID,或者是多个同一前缀的邮箱,背后是同一个用户。如何进行这种关联性信息的收集,判断这些信息归属于同一人呢?
282 0