分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网

分布式序列号生成组件

项目介绍

微服务年代,咱们需求出产一个接连的友爱的序列号,例如订单号等。变得比较费事。

这儿我供给了两种业界常用的解决方案来完成这个分布式序列号生成组件。

(1)运用集中式存储功能取步长进行分配。现在支撑数据库(Mysql)、Redis

(2)运用雪花算法获取接连序列号,确保多服务器集群不重复

组件存在的意图便是屏蔽序列号底层完成,支撑多样化的算法。让分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网用户开箱即用。便利开发。

项目结构

  1. xsequence-core突尼斯:中心代码分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网
  2. xsequence-test:测验代码
  3. doc:需求寄存一些测验数据和文档

Maven支撑


com.分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网xuanner
xsequence-core
1.6

功能比照

详细的测验报告能够在doc目录下的jmh文件夹里边找,这儿做一个简略的南宫雪琪捍卫萝卜3攻略介绍

数据库和redis布置主机装备:

CPU:1二手摩托车核

内存:昌平气候1GB

操作系统:CentOS 6.8 64位

运用宽带:1Mbps

完成算法ops/s(每秒发生序列号)补白阐明运用DB获取区间314754.083 1089932.384 ops/sMysql是单机布置,详细衔接参数看测验包,步长1000运用Redis获取区间244326.027 5185分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网24.654 ops/sR微软小冰edis是单机布置,步长1000运用雪花算法88中文获取4076501.612 44955.567 ops/s缺陷便是长度比较长运用UUID东西类生成仅有编号3368986.174 724159.973 ops/s缺陷便是长度32位,无序

总结: 上面取步长生成序列号的功能和详细DB、Redis的功能联系很大,并且和步长设置巨细也有很大联系。 这儿我用了比较差的机器装备御贡天朝。DB和Redis也都是单机比较差的。在这样的情况下,获取序列号的功能也还能够。 其间雪花算法的功能和机器没啥联系了,他的上限也没有可利用esp是什么空间。运用Redis方法功能的提高空间最大。

简哈希米娅单运用

(1)运用DB获取区间方法

public class DbTest_Api extends BaseTest {
private Sequence sequence;
@Before
public void setup() {
//数据源
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("xxx");
dataSource.setUsername("xxx");
dataSource.setPassword("xxx");
dataSou分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网rce.setMaxActive(300);
dataSource.setMinIdle(50);
data四级考试Source.setInitialSize(2分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网);
dataSo千户苗寨urce.setMaxWait(500);
/**
* 参数阐明如下:
* dataSource:数据库的数据源
* bizName:详细某中事务的序列号
* step:[可选] 默许1000,即每次取redi阔腿裤s获取步长值,依据详细事务吞吐量来设置,越大功能越好,可是序列号断层的危险也就越大
*/
sequence = DbSeqBuilder.create().dataS分布式系列号转化成部件 xsequence-必威体育 betwayapp_betway88客户端-betway体育官网ourc女子战俘营e(dataSource).bizName("userId").build();
}
@Test
public void test() {
long start = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
System.out.println("++++++++++id:" + sequence.nextValue());
}
System.out.println("int吻别豪门老公erval time:" + (苹果4sSystem.currentTimeMillis() - start));
}
}

(2)运用Redis获取区间方法

/**
* 参数阐明如下:
* ip:redis衔接ip
* port:redis衔接port
* auth:假如redis设置了暗码权限需求设置,没有就能够不必设置
* bizName:详细某中事务的序列号榜首创业
* step:[可选] 默许1000,即每次取redis获取步长值,依据详细事务吞吐量来设置,越大功能越好,可是序列号断层的危险也就越大
*/
sequence = RedisSeqBuilder.create().ip("xxx").port(6379).auth("xxx").step(1000).bizName(
"userId").build();

(3)运用雪花算法寻衅滋事罪方法

 /**
* 参数阐明如下:
* datacenterId: 一般能够设置机房标志,值高树庚只能设置[0-31]之间
* workerId: 一般设置主机编号,值只能设置[0-31]之间
* 只用这来那个值确保服务器仅有就能够
*/
sequence = SnowflakeSeqBuilder.create().datacenterId(1).workerId(2).build();

(4)UUID东西类运用

UUIDUtils.uuid()

评论(0)