CN107864233A - 全局唯一id结构及生成方法 - Google Patents
全局唯一id结构及生成方法 Download PDFInfo
- Publication number
- CN107864233A CN107864233A CN201711094095.8A CN201711094095A CN107864233A CN 107864233 A CN107864233 A CN 107864233A CN 201711094095 A CN201711094095 A CN 201711094095A CN 107864233 A CN107864233 A CN 107864233A
- Authority
- CN
- China
- Prior art keywords
- machine
- globally unique
- sequence number
- computer room
- work
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/30—Managing network names, e.g. use of aliases or nicknames
- H04L61/3015—Name registration, generation or assignment
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2101/00—Indexing scheme associated with group H04L61/00
- H04L2101/30—Types of network names
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种全局唯一ID结构及生成方法,生成方法包括以下步骤:步骤1,工作ID分配器提前录入机器ID;步骤2,单机启动初始化时,从工作ID分配器获取当前机器ID以及机器ID与机房ID、机器ID的对应列表,得到当前机器唯一的机房ID和机器ID;步骤3,基于单机的算法生成序号;步骤4,获取当前毫秒数,减去基准时间,得到时间毫秒数;步骤5,生成当前毫秒数下的序号,如果序号超过当前最大数,则获取下一毫秒数;步骤6,将获取的毫秒数左移22位,机房ID左移17位,机器ID左移12位之后再与序号按位或,生成全局唯一ID。本发明完全基于本机的算法产生序号,不需要额外的开销。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种全局唯一ID生成方法。
背景技术
全局唯一ID值产生的背景是为了满足记录全局唯一订单、支付的流水号。每个流水号必须分配一条唯一的ID,而且需要有一定的顺序,方便客户端排序;并且在分布式系统中不同的机器产生的ID必须唯一,支持高并发,每秒能产生足够多的全局唯一ID;全局唯一ID要带有时间标识,方便判断序号的生成时间。
电商系统中通常需要生成如订单号、支付的流水号等这样的全局唯一ID,要求毫秒级的快速响应,生的的ID有连续性且体积小(8字节为最佳),且不同的机房,服务器,同一时间仍然能够保持全局唯一。常规的生成方式如java自带的生成全局唯一ID的方式UUID(Universally Unique IDentifier,通用唯一识别码)有16字节,占用空间大。本发明借鉴twitter的策略,但摒弃ZK等机制,单机启动时初始化,从数据库/配置中心获取属于自己的工作机器ID(即,机房ID和机器ID),此后再也无须和配置中心打交道,完全基于本机的算法生产序号。
Twitter Snowflake生成的唯一ID为8字节,其中包括1bit的符号位,41bit的毫秒时间,10bit的机房ID和机器ID,12bit的时间戳,把时间戳,工作机器ID,序列号组合在一起,虽然可用性强,速度快,但其中的机房ID和机器ID需要要worker启动时从zookeeper中获取,需要引入zookeeper和独立的snowflake专用的服务器。
Twitter Snowflake方案中为保证机器ID的唯一性,在Worker启动的时候对外部有依赖(需要从Zookeeper获取唯一Worker号),因此使用Twitter Snowflake获取唯一序列号,需要搭建Zookeeper集群。
发明内容
本发明解决了以下技术问题:
1、产生的ID全局唯一,不同的机器产生的ID也不能重复;
2、分布式;
3、支持高并发,每秒能产生足够多的ID;
4、ID有序,方便客户端排序等;
5、可扩展,支持生成策略调整;
6、可持续,能支撑未来数年的全局唯一ID的生成;
7、高性能;
8、带有时间标识,能定位全局唯一ID的生成时间。
为了解决上述技术问题,本发明采用以下技术方案:
一种全局唯一ID结构,包括首位、时间戳、工作机器ID和序号,其中首位有1位,时间戳有41位,工作机器ID有10位,序号有12位,所述工作机器ID包括机房ID和机器ID。
进一步地,所述首位为0,为保持产生用户ID的自增特性。
进一步地,所述10位工作机器ID中5位保存机房ID,5位保存机器ID。
一种全局唯一ID生成方法,包括以下步骤:
步骤1,工作ID分配器提前录入机器IP;
步骤2,单机启动初始化时,从工作ID分配器获取当前机器IP以及机器IP与机房ID、机器ID的对应列表,得到当前机器唯一的机房ID和机器ID;
步骤3,基于单机的算法生成序号;
步骤4,获取当前毫秒数,减去基准时间,得到时间毫秒数;
步骤5,生成当前毫秒数下的序号,如果序号超过当前最大数,则获取下一毫秒数;
步骤6,将获取的下一毫秒数左移22位,机房ID左移17位,机器ID左移12位之后再与序号按位或,生成全局唯一ID。
进一步地,所述工作ID分配器包括数据库或者配置中心。
进一步地,通过调整机房ID和机器ID来调整所述全局唯一ID生成方法。
本发明的有益效果在于,单机启动初始化时,从数据库/配置中心获取属于自己的工作机器ID,此后再也无须和配置中心打交道,完全基于本机的算法生产序号。考虑到数据库/配置中心在业务中一定会使用到,因此本发明并不需要额外的开销。
附图说明
图1是全局唯一ID结构图。
图2是工作ID分配器分配工作机器ID示意图。
具体实施方式
本发明提供了一种全局唯一ID结构及生成方法,单机启动初始化时,从数据库/配置中心获取属于自己的机房ID和机器ID,此后再也无须和配置中心打交道,完全基于本机的算法生产序号。此方式不需要搭建Zookeeper集群,减少了生成全局唯一ID的成本。下文中,结合附图和实施例对本发明作进一步阐述。
一、全局唯一ID结构,如图1所示
用64bit(位)来表示全局唯一ID结构,其组成如下:
1bit:首位为0,为了保持产生UID(用户ID)的自增特性。
41bit;时间戳(时间毫秒数),默认情况下有41个bit可以供使用,那么一共有241=2199023255552毫秒供使用分配,年份=2199023255552/(3600*24*365*1000.0)=69.7年,以当前时间为基准(基准时间),可支撑大约等70年时间。
10bit:工作机器ID,可细分为5bit保存datacenter ID(机房ID)和5bit machineID(机器ID),按5位datacenter ID来计算,可有25-1=31个datacenter ID,按5位machineID来计算,可有25-1=31个机器ID,可根据具体的情况做相应的调整。单机启动初始化时,从数据库/配置中心(工作ID分配器)获取属于自己的工作机器ID(即机房ID和机器ID),此后再也无须和配置中心打交道,完全基于本机的算法生产序号,如图2所示。
12bit:单位毫秒内的自增序号,每台机器每毫秒能产生212-1=4095个序号,即单机每秒能生成4095000个序号,TPS(Transactions Per Second,每秒处理的事物个数)绝对满足多个系统的高并发的需求,若同一毫秒把序列号用完了,则“等待至下一毫秒”。
二、全局唯一ID生成方法
步骤1,数据库/配置中心中提前录入机器IP,以有其对应的机房ID和机器ID。
步骤2,单机启动初始化时,获取当前机器的IP以及机器IP,机房ID,机器ID对应列表。从而得到当前机器的唯一的机房ID和机器ID。
步骤3,此后再也无须和数据库/配置中心打交道,完全基于本机的算法生产序号。
步骤4,获取当前毫秒数,减去基准时间,得到时间毫秒数。
步骤5,生成当前毫秒数下的序列号,若序列号超过当前最大数,则获取下一毫秒数。
步骤6,将获取的毫秒数左移22位,机房ID左移17位,机器ID左移12位之后再与序列号按位或,最终生成全局唯一ID。
三、扩展
如果需要调整全局唯一ID生成方法,只需调整机房ID和机器ID即可。
本发明优选使用java完成实施。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (6)
1.一种全局唯一ID结构,其特征在于,包括首位、时间戳、工作机器ID和序号,其中首位有1位,时间戳有41位,工作机器ID有10位,序号有12位,所述工作机器ID包括机房ID和机器ID。
2.如权利要求1所述的一种全局唯一ID结构,其特征在于,所述首位为0,为保持产生用户ID的自增特性。
3.如权利要求1所述的一种全局唯一ID结构,其特征在于,所述10位工作机器ID中5位保存机房ID,5位保存机器ID。
4.一种全局唯一ID生成方法,采用如权利要求1所述的全局唯一ID结构,其特征在于,包括以下步骤:
步骤1,工作ID分配器提前录入机器IP;
步骤2,单机启动初始化时,从工作ID分配器获取当前机器IP以及机器IP与机房ID、机器ID的对应列表,得到当前机器唯一的机房ID和机器ID;
步骤3,基于单机的算法生成序号;
步骤4,获取当前毫秒数,减去基准时间,得到时间毫秒数;
步骤5,生成当前毫秒数下的序号,如果序号超过当前最大数,则获取下一毫秒数;
步骤6,将获取的下一毫秒数左移22位,机房ID左移17位,机器ID左移12位之后再与序号按位或,生成全局唯一ID。
5.如权利要求4所述的一种全局唯一ID生成方法,其特征在于,所述工作ID分配器包括数据库或者配置中心。
6.如权利要求1所述的一种全局唯一ID生成方法,其特征在于,通过调整机房ID和机器ID来调整全局唯一ID生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711094095.8A CN107864233A (zh) | 2017-11-08 | 2017-11-08 | 全局唯一id结构及生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711094095.8A CN107864233A (zh) | 2017-11-08 | 2017-11-08 | 全局唯一id结构及生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107864233A true CN107864233A (zh) | 2018-03-30 |
Family
ID=61701329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711094095.8A Pending CN107864233A (zh) | 2017-11-08 | 2017-11-08 | 全局唯一id结构及生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107864233A (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241056A (zh) * | 2018-08-23 | 2019-01-18 | 重庆富民银行股份有限公司 | 一种用于分布式系统的数字id生成系统 |
CN109344162A (zh) * | 2018-09-14 | 2019-02-15 | 北京京东金融科技控股有限公司 | 业务数据处理方法和装置 |
CN109783126A (zh) * | 2019-01-10 | 2019-05-21 | 珠海金山网络游戏科技有限公司 | 一种分布式全局id生成方法及其装置 |
CN109862097A (zh) * | 2019-01-31 | 2019-06-07 | 上海易点时空网络有限公司 | Id生成方法及装置 |
CN110096528A (zh) * | 2019-04-12 | 2019-08-06 | 中国银行股份有限公司 | 一种分布式系统中生成序列的方法、装置及系统 |
CN110505306A (zh) * | 2019-08-30 | 2019-11-26 | 公安部交通管理科学研究所 | 一种可指定位数的数据id生成方法 |
CN110602158A (zh) * | 2019-07-24 | 2019-12-20 | 中国联合网络通信集团有限公司 | 全局唯一id生成系统与方法、id生成器与存储介质 |
CN110634052A (zh) * | 2019-09-20 | 2019-12-31 | 中国银行股份有限公司 | 分布式架构生成订单号的方法及装置 |
CN111078693A (zh) * | 2019-11-29 | 2020-04-28 | 叮当快药科技集团有限公司 | 用于生成数据库记录主键的方法和装置 |
CN111225073A (zh) * | 2018-11-26 | 2020-06-02 | 北京京东尚科信息技术有限公司 | 业务编码分配方法及装置、存储介质、计算机系统 |
CN111371918A (zh) * | 2020-02-28 | 2020-07-03 | 上海钧正网络科技有限公司 | 一种分布式集群环境中的id生成方法、装置、介质及设备 |
CN111611247A (zh) * | 2020-05-25 | 2020-09-01 | 山东健康医疗大数据有限公司 | 一种多域机房的id生成器及id生成方法 |
CN112235431A (zh) * | 2020-09-30 | 2021-01-15 | 银盛支付服务股份有限公司 | 一种基于雪花算法自动配置机器id的方法及系统 |
CN112506929A (zh) * | 2020-12-15 | 2021-03-16 | 北京致远互联软件股份有限公司 | 一种基于分布式id生成的避免id碰撞的升级方法 |
CN113596193A (zh) * | 2021-07-27 | 2021-11-02 | 京东科技控股股份有限公司 | 一种分布式id处理方法、系统、存储介质及电子设备 |
CN113708983A (zh) * | 2021-11-01 | 2021-11-26 | 湖南新云网科技有限公司 | 一种分布式节点id生成方法、装置、设备及存储介质 |
CN114116060A (zh) * | 2021-11-26 | 2022-03-01 | 中企云链(北京)金融信息服务有限公司 | 一种全局唯一的分布式id生成方法 |
CN115987941A (zh) * | 2023-03-20 | 2023-04-18 | 公安部信息通信中心 | 一种支持多租户的去中心化号码生成系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105812248A (zh) * | 2016-05-09 | 2016-07-27 | 腾讯科技(深圳)有限公司 | 标识取值的分配方法和装置 |
CN106372994A (zh) * | 2016-08-31 | 2017-02-01 | 北京炎黄新星网络科技有限公司 | 一种处理订单的方法和系统 |
CN106572165A (zh) * | 2016-10-26 | 2017-04-19 | 宜人恒业科技发展(北京)有限公司 | 一种分布式全局唯一id应用方法 |
CN106874424A (zh) * | 2017-01-25 | 2017-06-20 | 杭州淘淘搜科技有限公司 | 一种基于MongoDB和Redis的网页数据采集处理方法及系统 |
-
2017
- 2017-11-08 CN CN201711094095.8A patent/CN107864233A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105812248A (zh) * | 2016-05-09 | 2016-07-27 | 腾讯科技(深圳)有限公司 | 标识取值的分配方法和装置 |
CN106372994A (zh) * | 2016-08-31 | 2017-02-01 | 北京炎黄新星网络科技有限公司 | 一种处理订单的方法和系统 |
CN106572165A (zh) * | 2016-10-26 | 2017-04-19 | 宜人恒业科技发展(北京)有限公司 | 一种分布式全局唯一id应用方法 |
CN106874424A (zh) * | 2017-01-25 | 2017-06-20 | 杭州淘淘搜科技有限公司 | 一种基于MongoDB和Redis的网页数据采集处理方法及系统 |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241056A (zh) * | 2018-08-23 | 2019-01-18 | 重庆富民银行股份有限公司 | 一种用于分布式系统的数字id生成系统 |
CN109344162A (zh) * | 2018-09-14 | 2019-02-15 | 北京京东金融科技控股有限公司 | 业务数据处理方法和装置 |
CN111225073A (zh) * | 2018-11-26 | 2020-06-02 | 北京京东尚科信息技术有限公司 | 业务编码分配方法及装置、存储介质、计算机系统 |
CN109783126A (zh) * | 2019-01-10 | 2019-05-21 | 珠海金山网络游戏科技有限公司 | 一种分布式全局id生成方法及其装置 |
CN109862097A (zh) * | 2019-01-31 | 2019-06-07 | 上海易点时空网络有限公司 | Id生成方法及装置 |
CN110096528A (zh) * | 2019-04-12 | 2019-08-06 | 中国银行股份有限公司 | 一种分布式系统中生成序列的方法、装置及系统 |
CN110602158A (zh) * | 2019-07-24 | 2019-12-20 | 中国联合网络通信集团有限公司 | 全局唯一id生成系统与方法、id生成器与存储介质 |
CN110505306A (zh) * | 2019-08-30 | 2019-11-26 | 公安部交通管理科学研究所 | 一种可指定位数的数据id生成方法 |
CN110505306B (zh) * | 2019-08-30 | 2021-12-21 | 公安部交通管理科学研究所 | 一种可指定位数的数据id生成方法 |
CN110634052A (zh) * | 2019-09-20 | 2019-12-31 | 中国银行股份有限公司 | 分布式架构生成订单号的方法及装置 |
CN111078693B (zh) * | 2019-11-29 | 2021-10-22 | 叮当快药科技集团有限公司 | 用于生成数据库记录主键的方法和装置 |
CN111078693A (zh) * | 2019-11-29 | 2020-04-28 | 叮当快药科技集团有限公司 | 用于生成数据库记录主键的方法和装置 |
CN111371918A (zh) * | 2020-02-28 | 2020-07-03 | 上海钧正网络科技有限公司 | 一种分布式集群环境中的id生成方法、装置、介质及设备 |
CN111611247A (zh) * | 2020-05-25 | 2020-09-01 | 山东健康医疗大数据有限公司 | 一种多域机房的id生成器及id生成方法 |
CN112235431A (zh) * | 2020-09-30 | 2021-01-15 | 银盛支付服务股份有限公司 | 一种基于雪花算法自动配置机器id的方法及系统 |
CN112506929A (zh) * | 2020-12-15 | 2021-03-16 | 北京致远互联软件股份有限公司 | 一种基于分布式id生成的避免id碰撞的升级方法 |
CN113596193A (zh) * | 2021-07-27 | 2021-11-02 | 京东科技控股股份有限公司 | 一种分布式id处理方法、系统、存储介质及电子设备 |
CN113596193B (zh) * | 2021-07-27 | 2024-01-16 | 京东科技控股股份有限公司 | 一种分布式id处理方法、系统、存储介质及电子设备 |
CN113708983A (zh) * | 2021-11-01 | 2021-11-26 | 湖南新云网科技有限公司 | 一种分布式节点id生成方法、装置、设备及存储介质 |
CN113708983B (zh) * | 2021-11-01 | 2022-02-11 | 湖南新云网科技有限公司 | 一种分布式节点id生成方法、装置、设备及存储介质 |
CN114116060A (zh) * | 2021-11-26 | 2022-03-01 | 中企云链(北京)金融信息服务有限公司 | 一种全局唯一的分布式id生成方法 |
CN115987941A (zh) * | 2023-03-20 | 2023-04-18 | 公安部信息通信中心 | 一种支持多租户的去中心化号码生成系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107864233A (zh) | 全局唯一id结构及生成方法 | |
CN102769667B (zh) | 一种id生成方法、装置和系统 | |
CN107454203A (zh) | 在分布式系统中生成唯一id的方法 | |
US20130073717A1 (en) | Optimizing clustered network attached storage (nas) usage | |
CN103235718A (zh) | 一种远程过程调用rpc代码生成的方法及装置 | |
CN110601931B (zh) | 一种智能家居系统的批量配置方法及系统 | |
CN105915369A (zh) | 一种配置信息管理方法及装置 | |
HU217157B (hu) | Eljárás és adatfeldolgozó rendszer elektronikus könyvtárban lévő többszörös dokumentumverziók létrehozására és karbantartására | |
US20090150548A1 (en) | Management of network-based services and servers within a server cluster | |
CN104469392A (zh) | 一种视频文件存储方法及装置 | |
CN106993022B (zh) | 用于集群的标识管理方法、标识服务器及相应的系统 | |
CN109167819A (zh) | 数据同步系统、方法、装置及存储介质 | |
CN104780202A (zh) | 用于端到端云服务数据库虚拟化及管理的架构和方法 | |
CN103905201B (zh) | 主应用与多个从属应用的交互方法及装置 | |
CN111694845A (zh) | 一种基于Redis的标识生成方法和装置 | |
CN114172792B (zh) | 一种保证服务高可用的序号生成方法的实现方法及装置 | |
CN105302817B (zh) | 分布式文件系统管理方法和装置 | |
CN107168642B (zh) | 一种数据存储方法及系统 | |
WO2001055813A3 (en) | System and method for using directory services to facilitate access to applications available on thin client servers | |
CN105047210B (zh) | 一种随机播放列表的跨设备同步方法及装置 | |
CN100589542C (zh) | 一种电视节目标识的分布式自动生成方法 | |
CN107844328A (zh) | 一种服务器bios配置方法及系统 | |
CN105099784B (zh) | 标签设置方法、装置及系统 | |
US9253281B2 (en) | Cells and/or vantage points in streaming media | |
CN111984293A (zh) | 一种信息处理方法、装置和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180330 |
|
WD01 | Invention patent application deemed withdrawn after publication |