# 全局Sequence
**Repository Path**: zoomtech/global-sequence
## Basic Information
- **Project Name**: 全局Sequence
- **Description**: 不连续全局发号器,全局唯一、支持分布式系统,支持dubbo调用
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-01-03
- **Last Updated**: 2025-01-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: sequence, 发号器, 分布式唯一ID
## README
# 致用全局sequence(发号器)
### 目录
* 简介
* 性能
* 可用性
* 特性
* 应用场景
* 代码接⼊
* SQL初始化
* 运行说明
## 简介
基于滴滴(Tinyid)改造成了简易的全局sequence发号器。核心原理就是每个业务系统启动时从全局sequence表预占⼀个号段,
然后再内存中实现原⼦分配唯⼀sequence的操作,当号段快使用完时,自动从调用远端RPC发号器服务拉取下⼀个可用的唯⼀号段(滴滴只
提供了HTTP类型的远程获取号段接⼝,现改为性能更好的RPC远程获取号段接口)。
## 性能
由于本地获取sequence是在内存中获取,性能非常高,可以达到纳秒级;当本地号段使用完后,远程获取号段也是基于rpc调用获取也
非常快,耗时⼀般在20ms内。
sequence号段初始化sql,可以指定每次拉取号段的步长,理论上步长越长,并发生成sequence的性能就越高,但浪费也就越多,正常
业务步长设置为500~1000即可。

## 可用性
依赖db,当db不可用时,因为客户端有缓存,所以还可以使用⼀段时间。后面有需要还可以配置多个db,只要有1个db存活,服务就可
用。
## 特性
* 全局唯⼀的long型id
* 趋势递增的id,即不保证下⼀个id⼀定比上⼀个⼤
* 非连续性
* 支持批量获取id(最⼤250个)
* 支持生成1,3,5,7,9...序列的id
## 应用场景
适用场景 : 只关心id是数字、唯⼀,趋势递增的系统,可以容忍id不连续,有浪费的场景
不适用场景 : 必须ID连续,严格递增
## 代码接⼊
* 1、maven依赖
```
com.zhiyong.saas
global-sequence-starter
1.0.0-SNAPSHOT
```
* 2、application.properties 添加如下配置
```
#dubbo默认配置
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.16.225:2181
dubbo.provider.protocol.version=1.0.0
#当前业务默认使用的sequence名称
zhiyong.default.sequence.name=global_sequence
```
## SQL初始化
执行项目根目录下的init.sql
## 运行说明
* 下载项目
* 处理以下几个核心配置
* 初始化数据库脚本执行
init.sql
* 修改初始化系统配置(mysql、zk连接配置)
global-sequence-server/src/main/resources/application.yml
* 启动全局sequence服务端
* 运行global-sequence-server模块下的com.zhiyong.saas.server.Application类启动项目
* 需要使用全局sequence的依赖方,pom依赖global-sequence-starter
* 代码注入:
```
#注⼊sequenceId
@Resource
private SequenceId sequenceId;
#方法调用
①sequenceId.next();//从配置的默认sequence中获取1个sequenceId
②sequenceId.next(100);//从配置的默认sequence中批量获取100个sequenceId
③sequenceId.next("study");//从指定sequence中获取1个sequenceId
④sequenceId.next("study", 100);//从指定sequence中批量获取100个sequenceId
```
## 平台作者
### 毛军锐 VX:ybyh8899