_ __ ___ __ _ _ __ ___
| '_ ` _ \ / _` | '__/ __|
| | | | | | (_| | | \__ \
|_| |_| |_|\__,_|_| |___/
一个分布式、高性能的雪花id生成器
- 标准雪花id
- 53位兼容前端js精度的短雪花id
- 自增序列(按时间【分钟、小时、天、月、年】回退、按最大值回退)
- 批量获取id
- etcd 一个高可用的分布式键值(key-value)数据库,etcd内部采用raft协议作为一致性算法
- http
- 获取id
$ curl -u name:passwd 'http://{host}/id' $ 530749286099451904% $ # 批量获取 $ curl -u name:passwd 'http://{host}/id?num=10'
- 获取53位id
$ curl -u name:passwd 'http://{host}/id53' $ 4122703036416% $ # 批量获取 $ curl -u name:passwd 'http://{host}/id53?num=10'
- 获取序列号
$ # {id}:为序列号id,需要按照业务规则进行预先配置 $ curl -u name:passwd 'http://{host}/seq/{id}' $ 1% $ # 批量获取 $ curl -u name:passwd 'http://{host}/seq/{id}?num=10'
- 解析id信息
$ curl -u name:passwd 'http://{host}/info/530703474355077120' $ {"node":"192.168.1.65:9736","step":"0","time":"2019-01-04T11:06:08.28+08:00"}%
- tcp
- 使用redis-cli
$ redis-cli auth $ # 获取一个标准id $ get id $ #批量获取10个 $ lrange id 0 10 $ # 获取一个53位id $ get id53 $ #批量获取10个 $ lrange id53 0 10 $ # 获取一个序列号 {id}:为序列号id,需要按照业务规则进行预先配置 $ get seq/{id} $ #批量获取10个 $ lrange seq/{id} 0 10
- 使用其他redis client 请使用redis sentinel 模式
使用basic auth
使用redis auth
[
{
"id": "1",
"timeRollback": "m", // 按时间回退(m:分钟,h:小时,d:天,M:月,y:年)
"numRollback": 1000 // 按最大值回退
}
]
Running 30s test @ http://localhost:8081/id
16 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.99ms 782.98us 10.69ms 78.32%
Req/Sec 4.91k 632.05 8.32k 85.78%
Latency Distribution
50% 5.15ms
75% 5.45ms
90% 5.77ms
99% 6.43ms
2348646 requests in 30.10s, 374.05MB read
Socket errors: connect 0, read 237, write 0, timeout 0
Non-2xx or 3xx responses: 2348646
Requests/sec: 78021.13
Transfer/sec: 12.43MB