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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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、上层根据服务业务场景都可以调用该服务

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Ubuntu
百度搜索:蓝易云【Ubuntu开机自启服务systemd.service配置教程】
现在,你的服务将在Ubuntu开机时自动启动,并在之后的启动中持续运行。记得根据你的实际需求修改 `your_service_name.service`文件中的相关信息。
360 2
|
缓存 运维 NoSQL
分布式ID生成方法的超详细分析(全)
目录前言1. UUID2. 数据库自增3. 数据库集群4. 数据库号段5. redis模式6. 雪花算法7. 其他总结 前言 关于什么是分布式ID 数据量不是很多的时候,单一个数据库表可以支撑其业务,即使数据在大也可以主从复制 到一定量的数据时,实现分库分表的时候,就需要一个全局唯一的ID,订单的编号就是分布式ID 关于上面牵扯到的主从复制 可看我之前的文章进行查缺补漏 关于主从复制的超详细解析(全) 关于数据库的分布式ID可看我之前在Mycat种提及到 具体都有如下: 在实现分库分表的情况下,数据库自增主
461 0
分布式ID生成方法的超详细分析(全)
|
9月前
|
弹性计算 分布式计算 监控
祝贺叠纸新游《无限暖暖》全球开服!阿里云全球基础设施持续护航
祝贺叠纸新游《无限暖暖》全球开服!阿里云全球基础设施持续护航
323 5
|
11月前
|
存储 安全 网络协议
|
存储 Kubernetes Cloud Native
一句话总结Docker与K8S的关系
一句话总结:Docker只是容器的一种,它面向的是单体,K8S可以管理多种容器,它面向的是集群,Docker可以作为一种容器方案被K8S管理。下文继续具体介绍。
一句话总结Docker与K8S的关系
|
数据可视化 关系型数据库 MySQL
使用IDEA连接Mysql数据库
使用IDEA连接Mysql数据库,提前在可视化工具中建好表
913 1
|
JavaScript Java 数据库
订单服务-----功能实现逻辑2
订单服务-----功能实现逻辑2
289 0
|
数据可视化 Java Linux
手把手教你安装Zookeeper 及可视化插件ZooInspector、ZKUI
手把手教你安装Zookeeper 及可视化插件ZooInspector、ZKUI
2260 0
|
NoSQL Java Redis
SpringBoot——实现对Redis五种数据类型的增删改查
SpringBoot——实现对Redis五种数据类型的增删改查
728 0
|
Shell Go Python
golang调用shell命令(实时输出, 终止, 乱码等)
golang调用shell命令(实时输出, 终止, 乱码等)
golang调用shell命令(实时输出, 终止, 乱码等)