All Projects → Zeb-D → distributed-id

Zeb-D / distributed-id

Licence: Apache-2.0 license
基于netty4+twitter-snowFlake分布式Id生成之服务实现

Programming Languages

java
68154 projects - #9 most used programming language
Dockerfile
14818 projects

Projects that are alternatives of or similar to distributed-id

tsid-creator
A Java library for generating Time Sortable Identifiers (TSID).
Stars: ✭ 16 (-11.11%)
Mutual labels:  id, snowflake
piccolo
Netty4长连接网关
Stars: ✭ 19 (+5.56%)
Mutual labels:  netty, snowflake
Distributedid
基于twitter的雪花算法(SnowFlake)来产生分布式ID,支持SDK、HTTP方式接入
Stars: ✭ 273 (+1416.67%)
Mutual labels:  netty, snowflake
sqltools-snowflake-driver
A Snowflake driver for the SQLTools VSCode extension.
Stars: ✭ 28 (+55.56%)
Mutual labels:  snowflake
simple-ddl-parser
Simple DDL Parser to parse SQL (HQL, TSQL, AWS Redshift, BigQuery, Snowflake and other dialects) ddl files to json/python dict with full information about columns: types, defaults, primary keys, etc. & table properties, types, domains, etc.
Stars: ✭ 76 (+322.22%)
Mutual labels:  snowflake
zrp
zrp 是使用Java开发的一款基于Netty的内网穿透工具,主要用于将内网服务反向代理到公网访问。目前支持所有TCP上层协议的代理,包括但不限于HTTP、SSH、FTP、TELNET、SMTP、POP3、DNS等。
Stars: ✭ 32 (+77.78%)
Mutual labels:  netty
itstack-naive-chat-server
💞 《服务端》| 服务端同样使用Netty4.x作为socket的通信框架,同时在服务端使用Layui作为管理后台的页面,并且我们的服务端采用偏向于DDD领域驱动设计的方式与Netty集合,以此来达到我们的框架结构整洁干净易于扩展。同时我们的通信协议也是在服务端进行定义的,并对外提供可引入的Jar包,这样来保证客户端与服务端共同协议下进行通信。
Stars: ✭ 21 (+16.67%)
Mutual labels:  netty
packetevents
PacketEvents is a powerful packet library. Our packet wrappers are efficient and easy to use. We support many protocol versions. (1.8+)
Stars: ✭ 235 (+1205.56%)
Mutual labels:  netty
netty-in-action-cn
Netty In Action 中文版
Stars: ✭ 1,389 (+7616.67%)
Mutual labels:  netty
sample-spring-webflux
testing webclient reactive communication with spring boot reactive application built on top of spring webflux
Stars: ✭ 21 (+16.67%)
Mutual labels:  netty
fastim
🚀基于Netty高可用分布式即时通讯系统,支持长连接网关管理、单聊、群聊、离线消息、消息推送消息、消息已读未读、消息未读数、红包、消息漫游等功能,支持集群部署的分布式架构。
Stars: ✭ 111 (+516.67%)
Mutual labels:  netty
java-sdk
一些常用的java sdk和工具类(日期工具类,分布式锁,redis缓存,二叉树,反射工具类,线程池,对称/非对称/分段加解密,json序列化,http工具,雪花算法,字符串相似度,集合操作工具,xml解析,重试Retry工具类,Jvm监控等)
Stars: ✭ 26 (+44.44%)
Mutual labels:  snowflake
mmqtt
An Open-Source, Distributed MQTT Broker for IoT.
Stars: ✭ 58 (+222.22%)
Mutual labels:  netty
dremio-snowflake
Snowflake Connector for Dremio using the ARP SDK.
Stars: ✭ 14 (-22.22%)
Mutual labels:  snowflake
scamper-chat
An IRC-like chat client and server using SCTP, based on Scamper+Netty
Stars: ✭ 13 (-27.78%)
Mutual labels:  netty
spring-boot-netty
Spring Boot integration with Netty
Stars: ✭ 51 (+183.33%)
Mutual labels:  netty
gateway
API proxy gateway base on netty and okHttp.
Stars: ✭ 21 (+16.67%)
Mutual labels:  netty
platform device id
flutter plugin to get device id
Stars: ✭ 32 (+77.78%)
Mutual labels:  id
netty-mqtt-client
No description or website provided.
Stars: ✭ 31 (+72.22%)
Mutual labels:  netty
qynat-spring-boot-starter
A springboot-starter that can achieve Intranet penetration. 一款可以实现内网穿透的springboot-starter。
Stars: ✭ 65 (+261.11%)
Mutual labels:  netty

雪花算法分布式ID生成器

该项目的目的是提供一个轻量级、高并发、高可用的生成唯一ID的服务,生成的ID是一个64位的 长整型,全局唯一,保持递增,相对有序。基于twitter的雪花算法来生成ID,用于取代UUID那种无序、128位的字符串形式的ID,提供 一种更加高效、人性化的全局唯一ID的生成方式,目前单机CPU4核、内存8G压测的并发数可以达到 250万/每秒,即每秒最多可以生成250万个唯一的ID,当然如果部署集群的话,这个数据可以 更高。

具体的教程可以参考:基于twitter雪花算法的分布式ID —— Java篇



特点

  • 基于twitter的雪花算法生成ID;
  • 基于netty框架提供通信层接入;
  • 提供HTTP和SDK两种方式接入;
  • 轻量级、高并发、易伸缩;
  • 部署简单,支持分布式部署;

接入

服务器支持两种方式接入:HTTPSDK,无论哪一种方式接入,对于同一台服务器来说,调用的是同 一个ID生成器,所以得到的ID都是递增、有序的。

HTTP接入

HTTP的接入方式很简单,直接访问IP+端口即可,或者域名+端口,端口号固定为16830。如果你不喜欢这种带有端口号的方式,可以考虑配置Nginx来做代理转发,配置Nginx对于部署分布式ID集群也有好处,可以通过Nginx来做负载均衡。

SDK接入

SDK接入前需要在自己的项目中加入SDK的jar包,或者自己写一个SDK来接入,语言不限。

关于SDK client 调用可参考sdks/SdkClient.java ,也可以参考调用core/SnowFlake.java,只不过这种方式本地调用;

目前SDK接入采用自定义协议,请求id(rqid)和数据中心did,sdkServer会根据这两个参数进行生成全局Id,具体协议组成部分请看 sdks/SdkProto;



部署

部署之前需要把项目源码打包成jar包,或者使用项目打包好的jar包,把jar包上传到服务器,执行如下命令:
·java -jar distributedid.jar 1 2· 执行上面命令指定了两个参数1和2,前面的1代表数据中心标识,后面的2代表的是机器或进程标识.

如果不指定这两个参数,那么会使用默认的值1。如果只考虑部署单机服务器,那么可以不考虑这两个参数,

如果需要分布式集群来生成ID时,需要指定数据中心标识ID和机器进程标识ID,并且每一个服务器的数据中心标识ID和机器进程标识ID作为联合键全局唯一,这样才能保证集群生成的ID都是唯一的。


目前已经集成docker化构建镜像

构建步骤为:

1、首先执行maven编译命令 mvn clean install

2、进入本项目的根目录,执行 docker build

3、查看是否生成了镜像,docker images


以上构建镜像对于人工操作比较繁琐,建议使用genkins 方式;当然也可以使用其他集成插件:

	<plugin>
					<groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.4.13</version>
                    <executions>
                        <execution>
                            <id>tag-image-version</id>
                            <phase>package</phase>
                            <goals>
                                <goal>tag</goal>
                            </goals>
                            <configuration>
                                <image>flowable/${project.build.finalName}</image>
                                <newName>IP:2375/flowable/${project.build.finalName}:${project.version}</newName>
                                <serverId>docker-hub</serverId>
                                <pushImage>true</pushImage>
                            </configuration>
                        </execution>
                        <execution>
                            <id>tag-image-latest</id>
                            <phase>package</phase>
                            <goals>
                                <goal>tag</goal>
                            </goals>
                            <configuration>
                                <image>flowable/${project.build.finalName}</image>
                                		<newName>IP:2375/flowable/${project.build.finalName}:latest</newName>
                                <serverId>docker-hub</serverId>
                                <pushImage>true</pushImage>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

注:该插件需要开启docker仓库远程api端口



测试

准备

  1. 由于对本项目采用了限流算法基于信号量方式,所以需要调高GlobalConfig.HANDLE_HTTP_TPS 这参数,也视情况下,也可以修改 GlobalConfig.ACQUIRE_TIMEOUTMILLIS 限流时间;如在win下测试,需要注意win-os下tcp最大连接数;
  2. 需要会使用一些压测工具,及一些压测技巧;
  3. 如果想测试到并发最大值,需要将服务机器单独部署,及准备多台测试机器;

编码不易,觉得这项目还不错,请随手star !

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].