博客
关于我
全局唯一 ID 服务的分布式ID生成系统
阅读量:298 次
发布时间:2019-03-01

本文共 965 字,大约阅读时间需要 3 分钟。

在复杂分布式系统中,如何为大量数据和消息生成唯一标识是一个关键问题。美团点评金融、支付、餐饮、酒店、猫眼电影等系统日益扩展,面临着数据分库分表后的唯一标识需求。传统的自增ID无法满足业务需求,因此设计一个高效、安全的全局唯一ID生成系统显得尤为重要。

ID号的核心要求

  • 全局唯一性

    ID必须确保唯一性,避免重复。

  • 趋势递增

    在MySQL InnoDB中,使用聚集索引,B-tree数据结构的主键应尽量选择有序的形式,以提升写入性能。

  • 单调递增

    某些场景(如事务版本号、IM增量消息)要求ID呈单调递增,确保后续ID总大于前一个。

  • 信息安全

    连续性ID易遭受攻击,恶意用户可按顺序下载数据,订单号等危害更大。因此,ID需无规则化。

  • ID生成系统的设计要求

  • 高性能

    平均延迟和TP999指标需尽可能低。

  • 高可用性

    系统需5个9的可用性,确保关键业务不受影响。

  • 高QPS

    支持大规模并发请求。

  • 常见方案分析

    UUID(Universally Unique Identifier)

    • 优点

      本地生成,无网络消耗,性能高。

    • 缺点

      UUID长度较长(128位),存储困难;信息不安全,基于MAC地址生成易泄露。

    Leaf-segment方案

    • 优点

      线性扩展方便,性能稳定,支持大规模部署。

    • 缺点

      ID缺乏随机性,信息安全性较低;TP999指标波动较大,DB宕机可能导致服务不可用。

    Leaf-snowflake方案

    • 优点

      采用雪花算法设计,结合时间、机器码、PID、增量序列,ID趋势递增。

    • 缺点

      强依赖时钟,时钟回拨可能导致重复ID;依赖Zookeeper,可能引发一致性问题。

    Leaf系统在美团点评的应用

    Leaf系统已在美团点评内部服务中应用,支持金融、支付、餐饮等多个业务线。目前性能达4C8G机器QPS近5w/s,TP999指标1ms,提供亿级调用量,满足高性能、高可用性要求。

    Leaf系统采用双buffer优化和容灾机制,确保在DB宕机期间仍能持续发号,最大化系统稳定性。同时,服务化架构支持负载均衡和过载保护,保证高SLA。

    参考资料

    • 斯奇茨. 《高性能MySQL》. 电子工业出版社, 2010:162-171.

    通过以上分析,Leaf系统展示了其在高性能、高可用性和信息安全方面的优势,为业务提供了可靠的唯一标识生成方案。

    转载地址:http://bjqa.baihongyu.com/

    你可能感兴趣的文章
    paddlehub安装及对口罩检测
    查看>>
    paddle的两阶段基础算法基础
    查看>>
    SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
    查看>>
    pageHelper分页工具的使用
    查看>>
    PageHelper:上手教程(最详细)
    查看>>
    PageOffice如何实现从零开始动态生成图文并茂的Word文档
    查看>>
    Paint类(画笔)
    查看>>
    Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
    查看>>
    Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
    查看>>
    Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
    查看>>
    pandas :将时间戳转换为 datetime.date
    查看>>
    pandas DataFrame 中的自定义浮点格式
    查看>>
    Pandas Plots:周末的单独颜色,x 轴上漂亮的打印时间
    查看>>
    Pandas 对数据框的布尔比较
    查看>>
    Pandas 读取具有浮点值的 csv 文件会导致奇怪的舍入和小数位数
    查看>>
    pandas 适用,但仅适用于满足条件的行
    查看>>
    Pandas-通过对列和索引的值求和来合并两个数据框
    查看>>
    pandas.read_csv()的详解-ChatGPT4o作答
    查看>>
    Pandas数据可视化怎么做?用实战案例告诉你!
    查看>>
    Pandas数据结构之DataFrame常见操作
    查看>>