分布式id生成方案及springboot进行集成

这篇具有很好参考价值的文章主要介绍了分布式id生成方案及springboot进行集成。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要方案:

UUID(Universally Unique Identifier)

即通用唯一识别码,是一种由网络软件使用的标识符,它是由IP地址、当前时间戳、随机数、节点等多个部分组成,具有唯一性。但是,UUID方案的缺点是,生成的id较长,不便于存储和使用。

Snowflake算法

它是Twitter公司开源的一个分布式唯一ID生成器,采用64位的二进制格式,其中高位是符号位,其次是时间戳,然后是数据中心ID和机器ID,最后是序列号。主要缺点是序列号存在单点故障问题,同时如果Clock回拨,可能会产生重复ID。

Leaf算法

它是美团点评公司开源的一个唯一ID生成服务,采用64-bit的ID存储方式,支持1s内最高生成2^63-1个唯一ID。该方案集成简单,ID生成速度较快,且可支持多语言。

总结

对于一般的业务系统,建议采用Leaf算法或其他中间件提供的分布式ID生成服务,原因如下:

ID生成速度快:分布式ID生成服务将ID生成逻辑放到了中间件中,可以直接从中间件中获取ID,不需要再进行ID的生成,避免了过多的ID生成计算和存储。
ID唯一性高:现有的分布式ID生成方案的ID生成算法都具有很高的唯一性,不会出现ID冲突的问题。
集成简单:将分布式ID生成中间件集成到业务系统中比自己编写ID生成逻辑更方便,还可以通过配置中间件进行ID生成器的相关配置和调整,提高系统的灵活性和可维护性。

Springboot集成leaf算法

引入Leaf算法,主要步骤:

  1. 首先需要下载并依赖Leaf算法的客户端和服务端,可以选择maven依赖或者直接从github上下载jar包。
  2. 在业务系统的配置文件中,配置与Leaf算法相关的参数信息,包括服务端的地址、端口等信息。
  3. 在业务系统中调用Leaf算法的客户端SDK,进行ID的生成和获取,根据自己的业务需要自行封装API接口。进行调试测试,验证ID是否符合要求,并进行优化和调整。

需要注意的是,Leaf算法虽然解决了分布式系统中ID生成的问题,但是其也存在不足,例如无法完全保证ID连续递增、无法控制生成的ID长度、集群运维等问题,需要根据具体的业务需求进行选择。文章来源地址https://www.toymoban.com/news/detail-404236.html

1. 引入依赖。pom.xml中需要引入Leaf依赖。

<dependency>
    <groupId>com.sankuai.inf.leaf</groupId>
    <artifactId>leaf-core</artifactId>
    <version>1.2.0</version>
</dependency>

2. 配置application.yml。配置Leaf Client连接的服务端信息。

leaf:
  client:
    # leaf所在server的IP和端口
    server-addr: localhost:8080
    port: 8080

3. 创建ID生成器接口。在项目中创建一个ID生成器接口,定义生成ID方法。

 public interface IdGenerator {
    Long nextId();
}

4. 实现ID生成器接口。创建一个Leaf算法实现的ID生成器类,实现上面的接口。

 @Service
public class LeafIdGenerator implements IdGenerator {

    private SegmentIdGenImpl leafIdGenerator;

    public LeafIdGenerator() throws Exception {
        // 构造Leaf ID生成器
        Properties properties = new Properties();
        properties.setProperty("leaf.name", "your-leaf-name");
        properties.setProperty("leaf.segment.enable", "true");
        properties.setProperty("leaf.segment.oneTimeCacheSize", "10000");
        properties.setProperty("leaf.jdbc.url", "your-database-url");
        properties.setProperty("leaf.jdbc.username", "your-database-username");
        properties.setProperty("leaf.jdbc.password", "your-database-password");
        properties.setProperty("leaf.jdbc.driver", "your-database-driver-class-name");
        SegmentIDGenImpl segmentIDGen = new SegmentIDGenImpl();
        segmentIDGen.init(properties);
        this.leafIdGenerator = segmentIDGen;
    }

    @Override
    public Long nextId() {
        // 生成Leaf ID
        return leafIdGenerator.getNextSegmentId("your-leaf-key").getId();
    }
}

5. 在API Controller中使用ID生成器。例如,在UserController中生成用户ID。

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IdGenerator idGenerator;

    @PostMapping("")
    public Result createUser(@RequestBody User user) {
        Long id = idGenerator.nextId();
        user.setId(id);
        // 保存到数据库,...
        return Result.success(user);
    }
}

到了这里,关于分布式id生成方案及springboot进行集成的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式技术专题】「分布式ID系列」百度开源的分布式高性能的唯一ID生成器UidGenerator

    UidGenerator是什么 UidGenerator是百度开源的一款分布式高性能的唯一ID生成器,更详细的情况可以查看官网集成文档 uid-generator是基于Twitter开源的snowflake算法实现的一款唯一主键生成器(数据库表的主键要求全局唯一是相当重要的)。要求java8及以上版本。 snowflake算法 Snowflake算法描

    2024年02月04日
    浏览(48)
  • 分布式—雪花算法生成ID

    由64个Bit(比特)位组成的long类型的数字 0 | 0000000000 0000000000 0000000000 000000000 | 00000 | 00000 | 000000000000 1个bit:符号位,始终为0。 41个bit:时间戳,精确到毫秒级别,可以使用69年。 10个bit:工作机器ID,可以部署在1024个节点上。 12个bit:序列号,每个节点每毫秒内最多可以生成

    2024年02月11日
    浏览(31)
  • 分布式ID生成算法——雪花算法

    一、分布式ID ID可以唯一标识一条记录。 对于单体架构,我们可以使用自增ID来保证ID的唯一性。但是,在分布式系统中,简单的使用自增ID就会导致ID冲突。这也就引出了 分布式ID 问题。分布式ID也要求满足分布式系统的 高性能、高可用、高并发 的特点。 二、雪花算法 世界

    2024年02月06日
    浏览(32)
  • 无分布式锁的ID生成

    TEAM GARDEN 本来ID是自增的,后面发现自增ID比较麻烦,有问题: 不可控的间隔: 如果你在插入数据时,中途删除了一些行,导致自增的ID出现间隔,那么新插入的行会填充这些间隔,可能会导致ID序列不连续,不利于数据分析和理解。 不适用于批量插入: 在批量插入数据时,

    2024年02月11日
    浏览(31)
  • 分布式主键ID生成策略

    小程序 搜索“ 源码轻舟 ”后续将推出算法和面试模块 坚持学习,好文每日送达!   业务系统对分布式ID的要求 唯一性:在分布式系统中,每个节点都需要生成唯一的标识符来确保数据的唯一性。传统的单点生成ID方式无法满足分布式环境下的需求,而分布式ID能够在整个

    2024年02月12日
    浏览(32)
  • 分布式ID生成算法:雪花算法

    雪花算法(Snowflake)是一种分布式ID生成算法,可以生成唯一的、有序的、不重复的ID号,广泛应用于分布式系统中。其生成的ID号由64位二进制数组成,可以转换成16进制或10进制的字符串表示。 雪花算法的核心思想是将一个64位的二进制数分成四部分,分别表示时间戳、数据

    2024年02月15日
    浏览(27)
  • 48 分布式id的生成策略

    1.UUID UUID由以下几部分的组合: UUID 是由一组32位数的16进制数字所构成,以连字号分隔的五组来显示,形式为 8-4-4-4-12,总共有 36个字符(即三十二个英数字母和四个连字号)。例如: 如果需求是只保证唯一性,那么UUID也是可以使用的,但是按照上面的分布式id的要求, UU

    2024年01月17日
    浏览(29)
  • 雪花算法生成分布式主键ID

    直接上代码,复制即可使用 在这个示例中,你可以通过 SnowflakeIdGenerator.init(dataCenterId, workerId); 初始化数据中心 ID 和工作 ID,然后通过 SnowflakeIdGenerator.generateId(); 静态方法生成 Snowflake ID 的字符串形式。

    2024年02月22日
    浏览(34)
  • 分布式ID解决方案对比

    在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进行了分库分表操作,这时候数据库的自增ID显然不能作为某个订单的唯一标识。除此之外还有其他分布式场景对分布式ID的一些要求: 趋势递增:  由于多数RDBMS使用B-tree的数据结构来存储索

    2024年02月04日
    浏览(24)
  • 【Java笔记】分布式id生成-雪花算法

    随着业务的增长,有些表可能要占用很大的物理存储空间,为了解决该问题,后期使用数据库分片技术。将一个数据库进行拆分,通过数据库中间件连接。如果数据库中该表选用ID自增策略,则可能产生重复的ID,此时应该使用分布式ID生成策略来生成ID。 snowflake是Twitter开源的

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包