Skip to content

整体设计

钟勋 edited this page Apr 3, 2020 · 11 revisions

简介

idcenter是一款高效分布式id生成系统,分为服务端和客户端,服务端和客户端是通过http请求进行交互。

1. 整体设计图

2. 服务端

服务端存储管理不同业务线需要的id,对id进行统一管理。接收客户端获取id的请求,并返回一批id给客户端。

id分为两部分:id所在的时间周期+id值。id具有周期概念(每个小时(天、月、年)算一个周期或无周期),当时间更替到下个周期时,id值自动重置到0(如果周期类型为“无周期”,则id值不会被重置)。每个id(id所在的时间周期+id值)是唯一的。

3. 表结构

下面是主要表的结构:

id提供者主要表结构:
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| iderId     | varchar(128) | YES  | UNI | NULL    |                |
| iderName   | varchar(255) | YES  |     | NULL    |                |
| periodType | varchar(64)  | YES  |     | NULL    |                |
| maxId      | bigint(20)   | YES  |     | NULL    |                |
| maxAmount  | int(11)      | YES  |     | NULL    |                |
| factor     | int(11)      | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
重要字段说明
iderId:id编码,每种类型id的唯一标识。
iderName:id提供者的名称
periodType:周期类型(小时、天、月、年、无)
maxId:id在一个周期内允许的最大值(不包含),null表示不限制。
maxAmount:客户端一次请求允许获取的最多id数量(包含),null表示不限制。
factor:该id提供者具有的生产者数量。
id生产者主要表结构:
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| iderId        | varchar(128) | YES  | MUL | NULL    |                |
| index         | int(11)      | YES  |     | NULL    |                |
| currentPeriod | datetime     | YES  |     | NULL    |                |
| currentId     | bigint(20)   | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
重要字段说明
iderId:id编码,标识本生产者属于哪个id提供者
index:生产者的序号,iderId+index标识一个唯一的生产者
currentPeriod:当前周期,标识本生产者当前生产到了哪个周期。如果周期类型为无,则当前周期为null
currentId:当前id,标识本生产者在当前周期下生产到了哪个id
Clone this wiki locally