分布式ID开源项目

对于分布式ID的生成,算是行业里很火热的技术方向,在这方面比较成熟的是Twitter提供的Snowflake算法,在这个基础上行业里也有不少开源方案,在互联网方向比较有名的是美团的Leaf项目,百度的UIDGenerator,还有滴滴的tinyid。

根据Leaf项目提供的信息,在4C8G VM基础上,通过RPC方式调用,QPS压测结果近5w/s,TP999 1ms。

可以想象如果要生成大量的ID信息,比如要生成海量的订单,同时要保证ID的唯一性和趋势性,其实是一件很有挑战的工作。

今天主要测试了tinyid和Leaf,小结一下。

Tinyid的项目相对比较小巧,可以从项目名看出,它主要是做它的场景相对是比较简单的,主要用在客服业务方向上,可以理解是号段模式的用法。

Leaf项目相对比较成熟,具备号段模式和Snowflake模式,可以自由选择。

简单来看看两个项目的步骤和一些准备事项,这两个项目都是基于Java开发的,基于spring boot,使用maven编译,使用的数据库是MySQL,

TinyID的项目测试如下:

1)下载开源软件

git clone https://github.com/didi/tinyid.git

2)初始化数据库配置

需要创建2张表,然后插入3条数据,相关的SQL如下:

3)初始化数据库数据,可以按照如下的方式进行部署即可。

mysql> create database tinyid_db;

mysql> use tinyid_db;

mysql> source db.sql

4)编译软件包

cd tinyid-server/src/main/resources/offline/

sh build.sh offline

5)启动服务

经过编译,假设得到的是tinyid-server-0.1.0-SNAPSHOT.jar

我们可以启动微服务。

java -jar tinyid-server-0.1.0-SNAPSHOT.jar

6)测试ID生成明细

curl 'http://localhost:9999/tinyid/id/nextId?bizType=test&token=0f673adf80504e2eaa552f5d791b644c'

得到的结果如下:

{"data":[2],"code":200,"message":""}

或者可以指定生成策略,比如批量生成10个。

curl 'http://localhost:9999/tinyid/id/nextIdSimple?bizType=test&token=0f673adf80504e2eaa552f5d791b644c&batchSize=10'

4,5,6,7,8,9,10,11,12,13

小结:这个方案相对比较有特色,有自己适合的场景,生成策略也比较丰富,适用场景不是足够通用。

再来看一下Leaf项目,它的立足点更高,在美团业务线内已经是大量采用了。

1)下载源代码

git clone https://github.com/Meituan-Dianping/Leaf

2)编译软件

cd Leaf-server

mvn clean install -DskipTests

这个步骤耗时较多,一次编译成功,后续的编译就会快得多

相关链接:

3)配置项目的配置文件

Leaf里面很重要的一个配置就是leaf.properties,内容入下:

cat leaf-server/src/main/resources/leaf.properties

leaf.name=com.sankuai.leaf.opensource.test

leaf.segment.enable=true

leaf.jdbc.url=jdbc:mysql://127.0.0.1:3306/leaf?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8

leaf.jdbc.username=root

leaf.jdbc.password=xxxx

leaf.snowflake.enable=true

#leaf.snowflake.zk.address=

#leaf.snowflake.port=

4)数据库初始化,在这里会创建一张表,通过这个层面来实现分布式ID的生成策略。

5)启动微服务

使用如下的脚本来启动服务,默认的端口是8080

sh deploy/run.sh

6)测试ID生成情况

curl http://localhost:8080/api/segment/get/leaf-segment-test

4002

curl http://localhost:8080/api/segment/get/leaf-segment-test

4003

7)查看号段模式的监控页面:

http://localhost:8080/cache

页面内容如下:

通过这些测试也能够明确一些信息,这种分布式ID的生成策略是比较丰富的,可以基于发号器或者Snowflake模式来生成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值