分布式ID开源项目测试

Posted 杨建荣的学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式ID开源项目测试相关的知识,希望对你有一定的参考价值。

这是学习笔记的第 1952 篇文章


对于分布式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模式来生成。




以上是关于分布式ID开源项目测试的主要内容,如果未能解决你的问题,请参考以下文章

DMLC:最大开源分布式机器学习项目

可信开源项目分享之细说TARS开源发展之路

简明分布式系统实现 - 开源项目

Github比较热门的Java开源项目

还不会用Git的程序员,这份开源项目拿好了

微软开发工具 Tye 宣布开源 !