`
onemeter_2017
  • 浏览: 11337 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

分布式环境下订单号生成策略

 
阅读更多

Leaf——来自美团点评的分布式ID生成系统



 

重要字段说明:biz_tag用来区分业务,max_id表示该biz_tag目前所被分配的ID号段的最大值,step表示每次分配的号段长度。原来获取ID每次都需要写数据库,现在只需要把step设置得足够大,比如1000。那么只有当1000个号被消耗完了之后才会去重新读写一次数据库。

 

test_tag在第一台Leaf机器上是1~1000的号段,当这个号段用完时,会去加载另一个长度为step=1000的号段,假设另外两台号段都没有更新,这个时候第一台机器新加载的号段就应该是3001~4000。同时数据库对应的biz_tag这条数据的max_id会从3000被更新成4000,更新号段的SQL语句如下:

Begin
UPDATE table SET max_id=max_id+step WHERE biz_tag=xxx
SELECT tag, max_id, step FROM table WHERE biz_tag=xxx
Commit

这种模式有以下优缺点:

优点:

  • Leaf服务可以很方便的线性扩展,性能完全能够支撑大多数业务场景。

  • ID号码是趋势递增的8byte的64位数字,满足上述数据库存储的主键要求。

  • 容灾性高:Leaf服务内部有号段缓存,即使DB宕机,短时间内Leaf仍能正常对外提供服务。

  • 可以自定义max_id的大小,非常方便业务从原有的ID方式上迁移过来。

缺点:

  • ID号码不够随机,能够泄露发号数量的信息,不太安全。

  • TP999数据波动大,当号段使用完之后还是会hang在更新数据库的I/O上,tg999数据会出现偶尔的尖刺。

  • DB宕机会造成整个系统不可用。

优化方案:1.不要在号段消耗完的时候再去取新号段,比如号段消耗了70%就再去加载新号段。

 

                 2.在取到的号段末尾再加一位随机数字

分享到:
评论

相关推荐

    订单号生成工具类

    订单号生成工具类是软件开发中的一个重要组成部分,特别是在电商、金融等业务中,订单号的唯一性和可追溯性是至关重要的。...在实际开发中,选择合适的订单号生成策略并实现高效、稳定的工具类是非常关键的一步。

    订单号的生成redis中获取

    Redis是一个高性能的键值存储系统,常用于缓存和实时数据操作,其速度快,适合处理高并发场景下的订单号生成。 描述中的博文链接指向了一篇可能详细介绍如何在Java环境中使用Redis实现订单号生成的文章。虽然具体的...

    java 分布式 代码生成器 唯一ID

    这样的需求通常出现在数据库主键、订单号、用户唯一标识等业务场景中。下面我们将深入探讨Java分布式代码生成器以及如何实现唯一ID。 首先,我们需要理解什么是分布式代码生成器。在分布式系统中,由于多个节点并行...

    分布式发号器

    在实际应用中,分布式发号器广泛应用于生成订单号、用户ID、事务ID等,保证了这些标识在全局范围内的唯一性,为大数据分析、日志追踪等提供了便利。同时,优化后的分布式发号器还能提高系统的并行处理能力,降低因...

    Android-给集群环境下生产一定命名规范下的id如订单号等

    为了实现这个功能,开发者可能需要创建一个自定义的ID生成器类,该类可以调用 Snowflake 算法或者其他分布式ID生成策略,并结合业务规则来构造最终的订单号。同时,为了适应多线程和并发场景,生成器类需要处理好...

    并发生成重复订单号1

    1. **订单号生成策略**: - 订单号通常由日期和序列号组成,如`"yyyy-MM-dd-HH-mm-ss-"`后跟一个自增序列,目的是保证订单号的时间顺序性和全局唯一性。 - 示例代码中的`OrderCodeGenerator`类中,`getOrderCode()...

    通用、灵活、高性能的分布式 ID 生成器

    这包括但不限于数据库主键生成、订单号生成、用户唯一标识等。它应该支持多种编程语言的接口,以便不同语言开发的服务都能方便地接入。 灵活性是指分布式ID生成器应具备配置和定制化的能力。例如,它可以允许用户...

    web项目里用到的工具类(正则校验、图片验证码、json解析、订单号生成)

    例如,正则校验类可以提供更多的验证规则,图片验证码类可以支持自定义颜色、背景、字体等,订单号生成类可以考虑更多的业务需求,如区分不同的订单类型等。这些工具类的复用不仅简化了开发工作,还降低了维护成本。

    C#生成唯一不重复订单号

    在C#编程中,生成唯一不重复的订单号是一个常见的需求,特别是在电商系统中,确保每个订单具有唯一...同时,也可以结合数据库的自增字段或分布式ID生成服务(如Snowflake算法)来实现更高效、更安全的订单号生成机制。

    C#实现在购物车系统中生成不重复订单号的方法

    3. **分布式锁**:在多服务器环境下,可以使用分布式锁(如Redis或Zookeeper)来确保在同一时刻只有一个服务器能够生成订单号,避免并发冲突。 4. **UUID/Guid**:生成全局唯一标识符(UUID或Guid),虽然它们看...

    集群环境流水号设计

    本文将围绕这个主题展开,详细解释集群环境下如何设计高效的流水号生成策略,以及如何通过源码分析理解其工作原理。 首先,流水号,又称为序列号或唯一标识符,通常用于唯一标识系统中的每一个事务或对象,如订单号...

    (源码)基于Spring Boot和Redis的秒杀系统.zip

    3. 分布式订单号生成使用雪花算法生成分布式唯一订单号,确保订单号的唯一性。 4. 异步邮件通知秒杀成功后,系统通过RabbitMQ异步发送邮件通知用户。 5. 订单超时处理通过定时任务和死信队列处理超时未支付的订单,...

    利用asp.net实现生成不重复订单号

    在高并发的环境下,仅依赖时间戳生成订单号可能会遇到冲突的风险,尤其是在高并发的系统中,如果有两个订单几乎在同一毫秒内生成,单纯依靠时间戳就无法确保唯一性了。因此,针对这种情况,可能需要引入额外的策略,...

    全球唯一的订单标识snowflake

    总的来说,"全球唯一的订单标识snowflake"是一种高效且实用的分布式ID生成策略,特别适用于需要全局唯一ID且对时间序列性有要求的业务场景,如电商订单系统。通过Java实现,它可以在大规模分布式环境中稳定地生成...

    利用sql函数生成不重复的订单号的代码

    在SQL数据库中,生成不重复的订单号是一个常见的需求,特别是在电商系统中,每个...这种方法适用于单个数据库环境,但若涉及分布式系统或高并发场景,可能需要更复杂的全局唯一ID生成策略,如雪花算法或分布式ID服务。

    php生成唯一的订单函数分享

    总的来说,生成唯一的订单号是电商系统基础架构中的关键部分,需要根据系统的具体需求和并发水平来选择合适的生成策略。这个自定义的PHP函数提供了一个实用且简单的解决方案,但对于更复杂的应用场景,可能需要更...

    java雪花算法.zip

    在实际应用中,雪花算法常被用在数据库主键生成、订单号生成、用户唯一标识等领域。`snowflakes`这个文件可能是一个Java实现雪花算法的源代码文件,它包含了雪花算法的具体实现逻辑,可以作为理解和使用雪花算法的一...

    IdWorker(1).zip_ropejst_分布式自增长ID

    在分布式系统中,生成全局唯一的、有序的自增ID是一个常见的需求,比如在数据库主键、订单号等场景中。`IdWorker`是阿里巴巴开源的一个高效、可扩展的分布式ID生成器,它确保了在大规模分布式环境下的ID唯一性、有序...

    OrderNo.rar

    从描述来看,该系统采取了一种常见的订单号生成策略,即结合日期和流水号来创建订单编号。下面我们将深入探讨这种订单号生成机制及其背后的IT知识。 1. **日期(YYYYMMDD)**: 订单号中的日期部分通常用来区分每天...

    美团点评分布式id项目 Leaf jar包依赖

    2. **模块化设计**: Leaf支持模块化的配置,可以根据业务需求选择不同的ID生成策略。例如,可以为订单、用户等不同业务场景定制ID生成规则。 3. **动态配置**: Leaf允许动态地调整配置,如机器ID、序列号范围等,以...

Global site tag (gtag.js) - Google Analytics