全局唯一ID
2019-01-04 本文已影响0人
yehongyu_2018
生成全局唯一ID
- 通过MySQL的自增主键,作为唯一id;
- 通过内存中变量AtomicLong的自增来得到唯一id;
- 通过Java的UUID来生成唯一id;
生成订单id:
集群id | server ip | 线程id | timestamp | Atomic Long |
---|---|---|---|---|
2 bit | 8 bit | 5 bit | 10 bit | 10 bit |
每个集群中的多台机器上启多个worker线程,每个线程有自己的AtomicLong,这个是通过系统原子操作来实现的。从而保证了id的全局唯一性。
生成设备id:
字段 | value |
---|---|
version | id定义的版本 |
id | mysql中表device的自动id |
type | 设备类型 |
将这个class对象的protobuf的字节数组做base64的url encode编码,即可得到唯一的设备id。
生成消息id:
java.util.UUID 这个类可生成random id全局唯一的,实际上UUID的内部实现原理跟上面提到的生成订单id的原理很类似。
根据机器的Mac地址,timestamp等信息拼成一个全局唯一的id,并转成统一长度的格式。