当前位置: 首页 > news >正文

分布式ID系统设计(1)

分布式ID系统设计(1)

在分布式服务中,需要对data和message进行唯一标识。
比如订单、支付等。然后在数据库分库分表之后也需要一个唯一id来表示。
基于DB的自增就肯定不能满足了。这个时候能够生成一个Global的唯一ID的服务就很有必要

我们姑且把它叫做id-server 。那么这么个id-server的设计和考虑需要什么

  1. 全局唯一:不能出现重复的id号 最基本要求。
  2. 趋势递增: 在innodb中使用的是聚集索引。B+Tree的pk最好是有序的
  3. 单调递增:保证下一个id一定要大于上一个id
  4. 安全:如果ID是连续的 被爬虫的可能性能就很大。有一些场景下会需要id的无序

上述 1 2 3对应三类场景。而且3和4是互斥的,不能使用同一个方案满足。
出了上述的对于id号码的要求。架构层还需要id-server可用性非常高。如果id-server瘫痪整个业务系统都是不可用的。基本就是业务瘫痪。

由上述的 总结出一个id-server 需要满足:

  1. 平均延迟和TP999延迟都要尽可能低;
  2. 高可用尽量满足99999
  3. QPS一定要高

常见方法介绍

UUID

uuid 标准包含32个16进制数字,以连字号为5段,形式8-4-4-4-12的36个字符。

Java下的UUID

· 优点:性能非常高 本地生成。没有任何网络消耗
. 缺点:
1.不容易存储。uuid太长 16字节128位 36长度字符串。很多场景不适用
2.信息不安全。毕竟里面包了mac地址 造成mac泄漏
3 id作pk的时候在某些场景下会有性能问题。比如MySQL-DB pk.无序的pk会导致数据位置频繁变动。严重影响性能。

类snowFlake方案

snowFlake 组成:

0(首位不用)-xxxxx(41位时间戳)-workerID(10位)-xxxx(12位序列号)

41位的时间可以表示(1L<<41) 大概是68年的时间 10位机器码可以表示1024机器。如果对idc划分有需求 可以划分一部分bit给idc 剩下的给workid。12个自增可以表示2的12次个ID。总的QPS应该能达到几百万

  • 优点:
    1. 毫秒数在高位 自增序列在低位。整个id都是趋势递增
    2. 不依赖数据库 以服务的方式部署 稳定性更高。生成ID的性能也高
    3. 可以根据自身业务特性分配bit位。较为灵活
  • 缺点:
    1. 强依赖机器时钟,如果机器上时钟回拨,会导致id重复或者服务不可用
http://www.lryc.cn/news/206932.html

相关文章:

  • 机器学习(python)笔记整理
  • 微客云霸王餐系统 1.0 : 全面孵化+高额返佣
  • 极智开发 | Hello world for Manim
  • 【云上探索实验室-码上学堂】免费学习领好礼!
  • Flutter最全面试题大全
  • Linux---(四)权限
  • 财务RPA机器人真的能提高效率吗?
  • 国产信号发生器 1442/1442A射频信号发生器
  • Kafka与Spark案例实践
  • 山西电力市场日前价格预测【2023-10-27】
  • centos7安装redis(包含各种报错)
  • 使用GoQuery实现头条新闻采集
  • “一带一路”十周年:用英语讲好中华传统故事
  • 机器视觉兄弟们还有几个月就拿到年终奖了,但我想跑路了
  • base_lcoal_planner的LocalPlannerUtil类中getLocalPlan函数详解
  • elasticSearch put全局更新和单个字段更新语法
  • 记录一次时序数据库的实战测试
  • HTML中文本框\单选框\按钮\多选框
  • 解释器模式——化繁为简的翻译机
  • 【凡人修仙传】定档,四女神出场,韩立遭极阴岛陷阱,蛮胡子亮相
  • 【解决】设置pip安装依赖包路径默认路径在conda路径下,而不是C盘路径下
  • JoySSL-新兴国产品牌数字证书
  • kafka3.X基本概念和使用
  • 用低代码平台代替Excel搭建进销存管理系统
  • Redis和Memcached网络模型详解
  • 二叉搜索树的实现(递归方式)
  • NetCore IIS Redis JMeter 登录压力测试
  • 进一步了解视频美颜SDK:美颜SDK的技术原理
  • 【Qt之QSetting】介绍及使用
  • 基于WebRTC构建的程序因虚拟内存不足导致闪退问题的排查以及解决办法的探究