分布式ID系统设计(3)

这篇具有很好参考价值的文章主要介绍了分布式ID系统设计(3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分布式ID系统设计第三集

id-service-SnowFlake方案

第二集说了id-service-Segment-DB可以生成趋势递增的ID,但是ID号是可以计算的。不太适用于一些订单ID生成的场景。因为存在数据暴露的风险

比如我可以对比两天的订单ID号来大致计算出公司一天的订单量。这个有点危险。

所以我们需要id-serviceSnowFlake方案。
id-service-snowFlake完全沿用snowFlake方案的bit位设计。即"1+41+10+12"的方式组装id。对于workid的分配 基本上可以用手动配置。也可以借助Zk或者etcd CP实现的分布式协调者来配置。id-service-SnowFlake按照下面几个步骤启动:

1 启动id-servicesnowFlake。连接zk或者etcd。在id-service-snowflake父节点下检查自己是否已注册。
2 如果有就直接拿到自己的workId zk/etcd 生成的id 启动。
3 如果没有就在根下面生成一个节点id 当作自己的workId
4 start-service

弱依赖zk

如果想做到这一步就在本地osFile上。当zk出现问题的时候,而服务又要重启。这个时候这一步就能提高SLA.

解决时钟问题

因为这种方案依赖时间。如果机器的时钟发生了回拨。那么有可能生成重复的ID.那就需要解决这个问题。

1 首先服务注册到zk 检查自己是否写如果zk
2 如果写过 则用自己的系统时间与id-service-forever/{id}节点记录时间做比较 如果小于则认为机器时间发生了回拨,这个时候可以选择等待也可以选择失败退出。
3 如未写过 则直接注册进去。然后对比其他节点的系统时间判断自己系统时间是否正确。可以选择轮训对比 也可以选择相加/节点数对比
4 若时间正确就启动 写入zk
5 否则认为有回拨。
6 每隔一段时间上报自己的系统时间写入zk

由于强依赖时钟,对时钟要求很敏感。如果机器上有NTP时间服务同步的话。在他同步的时候会造成秒级的回拨。(不过一般的公司也不会有这种业务量 除了大厂)。解决方案就是在回拨的时候等待一段时间(1s 2s 这样)或者直接重试.再或者直接摘除节点 告警。

代码实现也很简单
/发生了回拨,此刻时间小于上次发号时间
if (timestamp < lastTimestamp) {

        long offset = lastTimestamp - timestamp;
        if (offset <= 5) {
            try {
            	//时间偏差大小小于5ms,则等待两倍时间
                wait(offset << 1);//wait
                timestamp = timeGen();
                if (timestamp < lastTimestamp) {
                   //还是小于,抛异常并上报
                    throwClockBackwardsEx(timestamp);
                  }    
            } catch (InterruptedException e) {  
               throw  e;
            }
        } else {
            //throw
            throwClockBackwardsEx(timestamp);
        }
    }

从使用情况来看 基本没有出现过问题。

id-service 情况

作为一个基架服务。性能应该是最关心的 能在4C8G机器上跑出4w QPS.可用性也能保证9999.提供给6个BU 一天有个几百万的使用量。作为基架。高SLA和高性能是必须要保证的。文章来源地址https://www.toymoban.com/news/detail-741258.html

到了这里,关于分布式ID系统设计(3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 分布式id、系统id、业务id以及主键之间的关系

    连分布式ID都理解不了,你是刚培训出来冒充面试官的吧 分布式ID、系统ID、业务ID和主键的关系: 分布式ID:在分布式系统中,由于存在多个独立的节点,为了保证每个节点生成的ID都是全局唯一的,就需要用到分布式ID。它是全局唯一的,可以用作数据库的主键。 系统ID:一

    2024年02月15日
    浏览(10)
  • 【分布式】分布式ID

    【分布式】分布式ID

    分布式场景下,一张表可能分散到多个数据结点上。因此需要一些分布式ID的解决方案。 分布式ID需要有几个特点: 全局唯一(必要) :在多个库的主键放在一起也不会重复 有序(必要) :避免频繁触发索引重建 信息安全 :ID连续,可以根据订单编号计算一天的单量,造成

    2024年02月07日
    浏览(13)
  • 【分布式技术专题】「分布式ID系列」百度开源的分布式高性能的唯一ID生成器UidGenerator

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

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

    2024年02月04日
    浏览(13)
  • 分布式系统概念和设计——分布式共享内存

    分布式系统概念和设计——分布式共享内存

    分布式共享内存 分布式共享内存是在不共享物理内存的计算机之间实现数据的共享的一个抽象。 有一个底层运行的系统保证其透明性,但是进程还是根据内存的分布处理物理内存的分布式能力 DMS最关键点: 不需要关心数据的通信,消息传递能力是巨大的底层支持。 生存周

    2024年02月10日
    浏览(10)
  • 分布式系统架构设计之分布式缓存技术选型

    分布式系统架构设计之分布式缓存技术选型

    随着互联网业务的快速发展,分布式系统已经成为了解决大规模并发请求、高可用性、可扩展性等问题的重要手段。在分布式系统中,缓存作为提高系统性能的关键技术,能够显著降低数据库负载、减少网络延迟、提高数据访问速度。当面对大量并发请求时,如果每次都直接

    2024年02月03日
    浏览(252)
  • 分布式id实战

    分布式id实战

    目录 常用方式 特征 潜在问题 信息安全 高性能 UUID 雪花算法 数据库生成 美团Leaf方案 Leaf-segment 数据库方案 Leaf-snowflake 方案 uuid 雪花算法 数据库主键 全局唯一 趋势递增 信息安全 如果id连续递增, 容易被爬虫, 批量下载数据 如果订单id是连续递增, 容易被竞争对手推算出日交

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

    分布式ID(2):雪花算法生成ID

    1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L

    2024年01月20日
    浏览(10)
  • 分布式唯一ID实战

    分布式唯一ID实战

    UUID的标准形式包含32个16进制数字,以 “ - ” 进行分割,形式为 8-4-4-4-12的32个字符,实例 550e8400-e29b-41d4-a716-446655440000。 优点: - 性能高,本地生成,没有网络消耗 缺点: - 不易存储,长度太长,32个16进制数字,128位 - 不安全,会暴露MAC地址 - UUID作为MySQL主键,会导致索引

    2024年02月12日
    浏览(46)
  • 算法、语言混编、分布式锁与分布式ID、IO模型

    算法、语言混编、分布式锁与分布式ID、IO模型

    数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构(数据的组织形式),写的程序逻辑就是算法。 算法是指用来操作数据、解决程序问题的一组方法。 对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源(空间

    2024年02月08日
    浏览(5)
  • 【系统架构】分布式系统架构设计

    【系统架构】分布式系统架构设计

    分布式系统是指由多个计算机节点组成的一个系统,这些节点通过网络互相连接,并协同工作完成某个任务。 与单个计算机相比,分布式系统具有更高的可扩展性、可靠性和性能等优势,因此广泛应用于大规模数据处理、高并发访问、分布式存储等领域。 分布式系统的设计

    2024年02月15日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包