Skip to content

Repository files navigation

Cell ( 细胞 )

Maven CentralLicenseGitHub release

cell-logo

Cell(细胞)是一个高性能的分布式ID生成框架,提供规范性、可理解性的ID生成策略,开箱即用。 在现有提供的策略之外,亦可自定义ID规范并利用Cell的内核扩展出符合诉求的ID生成器。

Architecture

cell-architecture

环境依赖

Cell 环境依赖如下:

cellJavaSpring Boot备注
1.x17+3.x停止支持新功能
2.x17+4.x持续更新中

快速开始

Maven Dependency

<dependency>
<groupId>com.lazycece.cell</groupId>
<artifactId>cell-spring-boot-starter</artifactId>
<version>${cell.version}</version>
</dependency>

脚本执行

在数据库中执行脚本创建注册表,并注册相关内容:

CREATETABLEIF NOT EXISTS `cell_registry`(
`id`INT UNSIGNED AUTO_INCREMENT COMMENT 'pk id',
`name`VARCHAR(255) NOT NULL COMMENT 'cell name',
`value`INTNOT NULL COMMENT 'current value',
`min_value`INTNOT NULL COMMENT 'min value',
`max_value`INTNOT NULL COMMENT 'max value',
`step`INTNOT NULL COMMENT 'step',
`create_time`TIMESTAMPNOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'create time',
`update_time`TIMESTAMPNOT NULL DEFAULT CURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP COMMENT 'update time',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`)
) COMMENT 'cell registry'
;
insert into cell_registry(`name`,`value`,`min_value`,`max_value`,`step`,`create_time`,`update_time`)
values("order",0,0,100000,100,now(),now())
;

Coding

@RestControllerpublicclassCellSpringSampleController {
@AutowiredprivateCellFacadecellFacade;
@GetMapping("/cell-spec/orderId")
publicStringgetOrderId() {
// return CellHelper.getInstance().generateId(CellEnum.ORDER)returncellFacade.generateId(CellEnum.ORDER);
}
}

更多样例详情可查看 cell-samples

Cell 简介

Cell 分三个模块:

  • cell-core: Cell内核,用于生成唯一的序列号
  • cell-specification: Cell规范,用于定义并生成ID
  • cell-spring-boot-starter: Cell启动器,用于Spring Boot 项目的快速引入,并进行配置扩展

Cell Core

Cell内核是利用数据库注册模式来生成唯一序列号。 Cell注册表模型如下:

数据库脚本位置 ./document/script

字段名称类型描述
idINT数据库主键ID
nameVARCHARcell名称,拥有唯一性
valueINTcell序列号当前值
min_valueINTcell序列号最小值
max_valueINTcell序列号最大值,达到最大值后从最小值进行循环
stepINTcell序列号获取步长
create_timeTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

Cell内核通过缓存来控制对外提供序列号值,确保获取序列号的唯一性。可引用该模块并结合自己业务中ID的规范来定制化出更具个性化的ID值。

Cell Specification

Cell的ID规范由时间、领域标识码、数据中心、机房和唯一序列号等部分内容组成。从ID的长度和时间范围内ID生成支持 的最大范围考虑,Cell支持三种模式:天、小时、分钟。

天级别模式,cell-id的长度为24位:

  • 组件构成:日期(8)+ 领域标识码(3)+ 数据中心(1)+ 机房(2)+ 序列号(10)
  • ID样例:[20231004] [101] [1] [01] [1314230822]
  • 支持最大qps = Integer.MAX_VALUE/24/60/60 = 24855

小时级别模式,cell-id的长度为26位:

  • 组件构成:日期(8)+ 领域标识码(3)+ 数据中心(1)+ 机房(2)+ 小时(2)+ 序列号(10)
  • ID样例: [20231004] [101] [1] [01] [11] [1314230822]
  • 支持最大qps = Integer.MAX_VALUE/60/60 = 596523

分钟级别模式,cell-id的长度为28位:

  • 组件构成:日期(8)+ 领域标识码(3)+ 数据中心(1)+ 机房(2)+ 小时(2)+ 分钟(2)+ 序列号(10)
  • ID样例: [20231004] [101] [1] [01] [11] [58] [1314230822]
  • 支持最大qps = Integer.MAX_VALUE/60 = 35791394

Cell Spring Boot Starter

Cell 在 Spring Boot 项目中使用时,支持直接在配置文件中对Cell进行定制化。

配置默认值描述
cell.cell-type-class如果有配置,服务启动时会自动注册到数据库表;如果不设置,需要自己手动在数据库表设置值
cell.specification.patternDAY天模式
cell.specification.data-center1数据中心,值范围[0,9]
cell.specification.machine1机房,值范围[0,99]
cell.specification.min-value0序列号最小值,自动注册Cell时使用
cell.specification.max-valueInteger.MAX_VALUE序列号最大值,自动注册Cell时使用
cell.specification.step6000序列号刷新步长,自动注册Cell时使用
cell.buffer.expansion-step-elasticity-time2buffer扩容时步长弹性次数,用于动态调整buffer大小
cell.buffer.expansion-threshold0.75buffer扩容阙值
cell.buffer.expansion-interval10mbuffer扩容时间间隔,动态扩缩容的衡量标准
cell.buffer.thread-pool-core-size5buffer的核心线程数
cell.buffer.thread-pool-max-sizeInteger.MAX_VALUEbuffer的最大线程数
cell.buffer.thread-pool-keep-alive-time60s线程活跃时间

License

Apache-2.0

About

Cell(细胞)是一个高性能的分布式ID生成框架,提供规范性、可理解性的ID生成策略,开箱即用

Topics

Resources

Stars

23 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages