【开源】分布式ID生成器

分布式ID生成器

背景

伴随互联网的发展,无论分布式系统、还是存储都变得更复杂、数据量更大,这些都需要唯一的标识记录。简单举例,数据库单表时,通常使用数据库自带的自增ID就可以了,但分库分表后,数据库自带的自增ID就无法满足需求了,我们需要有一个算法或服务来生产分布式ID。

很多公司都会自研唯一ID生成服务,来满足唯一标识的问题。

ID-Generator

ID-Generator分布式ID生成器,解决在分布式系统唯一性标识生成复杂、不统一的问题,如数据库分库分表数据唯一标识、业务流水号、链路跟踪唯一标识等场景。提供一站式部署,稳定、高性能的ID生成系统。

功能介绍

  • 提供全局唯一ID序号;
  • 提供隔离增长序号,以唯一KEY为自增ID标识,如数据库-表之间的自增id效果;
  • 支持自定义增长步长;
  • 支持固定前缀;
  • 支持固定位数;
  • 支持ID重置;
  • 支持Dubbo、Spring Cloud应用部署;
  • 支持MyBatis插件,可直接插入ID;
  • 支持try it,查看模拟ID效果;
  • 支持页面配置,即时生效;

设计与实现

设计原则

  • 0成本接入,部署即可以使用;
  • 操作简单,页面配置,即时生效;
  • 功能丰富,不仅限于递增序列生成,同时支持各种流水号、前缀、日期、重置等功能;
  • 性能稳定,节点之间无状态,可以根据流量随时扩容;
  • 代码预留扩展,持续集成;

核心设计

ID-Generator采用业内比较常用内存处理的方式,应用独立部署,提供生成ID能力的服务。服务启动时,先从存储中获得ID生成规则和取值范围,再经过计算生成ID值暂时存至内存。其它应用通过参数key调用ID服务,从内存获得ID值。服务定时检查内存剩余量,及时向内存补充ID值。

全局唯一ID生成算法基于Twitter开源的Snowflake算法。

  • 1bit-不用:符号位,0表示正数,1表示负数,ID都是正整数,所以为常数0不变;
  • 41bit-时间戳:精确到毫秒;
  • 10bit-工作机器id:通常需要依赖zookeeper等三方工具生成机器号,为减少其它依赖,此处使用本机mac地址计算方式,获得1-1024数值;
  • 12bit-序列号:流水号(每1毫秒,每1个节点,可以生产4096个ID,相当于409万TPS。);

因使用Snowflake算法依赖机器时间,需要注意机器时间回拨问题。

框架

ID-Generator支持与Dubbo、Spring Cloud无缝集成,满足大部分公司技术栈,部署即可使用。id-generator-core核心使用springboot2.1.X最新稳定版;id-generator-simple模块提供HTTP协议接口,对多语言支持。

监控

id-generator-metric监控模块,使用HTTP协议实现注册/发现功能,监控各ID服务节点,采集ID服务中KEY的内存剩余量,便于更合理的设置内存容量与阈值。

存储

ID-Generator支持MySQL和Redis等多种数据存储方式,实现通过配置文件自动适配。配置方式:

---
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/idgenerator
    username: root
    password: root

#---
# 遵循SpringBoot规则,支持集群模式
#spring:
#  redis:
#    host: 127.0.0.1
#    port: 6379

扩展-MyBatis插件

为更易集成,代码更优雅,通过MyBatis插件,实现注解方式自动注入分布式唯一ID。例如:

//mybatis insert对象
public class DemoModel {
   
    /**
     * 注解实现自动注入,对应key=pay_id的ID值
     */
    @IdField("pay_id")
    private Integer test2;

}

更多...

即将开始

  • client端的SDK模式,远程通信模块,不再依赖Dubbo、Spring Cloud框架;
  • server端golang版本;

加入我们

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349