分布式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开源项目测试的主要内容,如果未能解决你的问题,请参考以下文章