分布式id实战

目录

常用方式

特征

潜在问题

信息安全

高性能

UUID

雪花算法

数据库生成

美团Leaf方案

Leaf-segment 数据库方案

Leaf-snowflake 方案


常用方式

  • uuid
  • 雪花算法
  • 数据库主键

特征

  • 全局唯一
  • 趋势递增
  • 信息安全

潜在问题

信息安全

  • 如果id连续递增, 容易被爬虫, 批量下载数据
  • 如果订单id是连续递增, 容易被竞争对手推算出日交易量, 这时候需要ID不规则
  • 可能泄漏本机mac地址

高性能

        保证在高qps时候, 系统也高可用, 延迟低

UUID

标准型式包含 32 个 16 进制数字,以连字号分为五段,形式为 8-4-4-4-12 的 36 个字符.

示例:ecb02c7d-0a3f-4c00-85f6-aa5c6962eb4d

优点: 本地生成, 性能高, 没有网络消耗

缺点:

  • UUID太长不易储存, 16字节, 128位
  • 信息不安全. 基于 MAC 地址生成UUID的算法, 可能造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置
  • 不适合做DB主键. 数据库主键应该越短越好, uuid随机性, 导致聚集索引的数据频繁变动, 影响性能

雪花算法

  • 第 0 位: 符号位(标识正负),始终为 0,没有用,不用管。
  • 第 1~41 位 :一共 41 位,用来表示时间戳,单位是毫秒,可以支撑 2 ^41 毫秒(约 69 年)
  • 第 42~52 位 :一共 10 位,一般来说,前 5 位表示机房 ID,后 5 位表示机器 ID(实际项目中可以根据实际情况调整),这样就可以区分不同集群/机房的节点,这样就可以表示 32 个 IDC,每个 IDC 下可以有 32 台机器。
  • 第 53~64 位 :一共 12 位,用来表示序列号。 序列号为自增值,代表单台机器每毫秒能够产生的最大 ID 数(2^12 = 4096),也就是说单台机器每毫秒最多可以生成 4096 个 唯一 ID。理论上 snowflake 方案的 QPS 约为 409.6w/s

优点:

  • 顺序递增, 时间戳在高位, 自增序列在地位
  • 本地生成, 不依赖第三方主键, 稳定性更高, 性能高
  • 可以根据自身业务, 灵活分配bit位

缺点:

        存在时钟回拨问题

数据库生成

  • mysql自增主键
  • redis的incr命令
  • mongodb的ObjectId
  • zookeeper顺序节点

美团Leaf方案

Leaf 这个名字是来自德国哲学家、数学家莱布尼茨的一句话:
There are no two identical leaves in the world(“世界上没有两片相同的树叶”)
​Leaf 分别在 MySQL 和雪花上做了相应的优化,实现了 Leaf-segmentLeaf-snowflake 方案。

Leaf-segment 数据库方案

==

Leaf-snowflake 方案

==

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479268.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用

前言 本节内容我们主要介绍在Jenkins流水线中,其构建过程中的一些构建策略的配置,例如通过远程http构建、定时任务构建、轮询SCM构建、参数化构建、Git hook钩子触发构建等,可根据不同的需求完成不同构建策略的配置。 正文 Throttle build…

用户空间与内核通信(二)

文章:用户空间与内核通信(一)介绍了系统调用(System Call),内核模块参数和sysfs,sysctl函数方式进行用户空间和内核空间的访问。本章节我将介绍使用netlink套接字和proc文件系统实现用户空间对内…

详解-领航家政策/双2.0模式

#领航家代理政策怎么代理# ∨:ok1234vip 简单点说!费率/分润和返现先不说了,领航家是双2.0平台,用户也可以参与其中拼团,费率随之降低能一直降至0费率,甚至可以赚钱,(这就是拼团两人…

关于tcp与UDP基本对比

建立连接的差异 TCP 建立连接需要经过三次握手,同时 TCP 断开连接需要经过四次挥手,这也表示 TCP 是一种面向连接的协议,这个连接不是用一条网线或者一个管道把两个通信双方绑在一起,而是建立一条虚拟通信管道。 TCP 的三次握手…

亚马逊鲲鹏系统一键注册亚马逊买家号的软件

在如今的电商世界中,自动注册亚马逊买家号已经成为了一种必要的操作需求。为了规避关联性问题,许多用户选择借助专门设计的软件工具,其中最为流行的就是亚马逊鲲鹏系统。这款软件以其自带防指纹浏览器和全自动化操作功能而闻名。 亚马逊鲲鹏系…

计算机是否还要读研?就看这一点

不知道大家有没有了解最近新出现的chatGPT4,反正我是十分认真的研究了一把 而且,Github刚推出了Github Copilot X,基于chatGPT4,可以直接在IDE里对GPT4提问,帮助重构,调试,debug代码&#xff0…

CG-FS-M2 风速传感器 金属 轻便小巧 量程宽 稳定性好

产品概述 采用电路模块技术开发变送器,操作简单,使用方便,用于实现对环境风速的测量,根据需求可输出脉冲信号,0.4-2V电压或4-20mA电流信号,RS485信号。 功能特点 ◆体积小,携带方便、安装简捷 ◆测量精…

leetcode hot100 分割等和子集

在本题中,我们是要把一个数组,分割成两个子集,并且两个子集的元素和相等。那么也就是说,两个子集的和是相等的,并且都是整个数组的一半。那我们考虑这是一个01背包问题,物品的价值和物品的质量一样&#xf…

C++11---(3)

目录 一、可变参数模板 1.1、可变参数模板的概念 1.2、可变参数模板的定义方式 1.3、如何获取可变参数 二、lambda表达式 2.1、Lamabda表达式定义 2.2、为什么有Lambda 2.3、Lambda表达式的用法 2.4、函数对象与lambda表达式 三、包装器 3.1、function 3.2、bind …

Elasticsearch:什么是 kNN?

kNN - K-nearest neighbor 定义 kNN(即 k 最近邻算法)是一种机器学习算法,它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习(lazy learning)” 名…

做人力RPO项目需要注意哪些问题?

在当今激烈的商业环境中,企业对人才的需求愈发迫切,人力RPO(招聘流程外包)应运而生。作为一种创新的招聘模式,人力RPO被认为是蓝海项目,拥有广阔的市场前景和巨大潜力。本文将为您揭示做人力RPO市场的关键策略。 一、专业团队&…

用记事本写Java

本篇文章将会用hello word的例子来教大家如何使用记事本写java 1.创建一个txt文件 2.输入代码 public class HelloWorld{public static void main(String[] args){System.out.println("Hello World");} } 3.将文件名后缀由txt改为java 如果不能直接改后缀 打开…