欢迎加入华仔的星球,你将获得: 专属的中间件专栏 / 1v1 提问 / 简历修改指导/ 学习打卡 / 每月赠书 / 社群讨论
《从四大维度开始带你精通 RocketMQ》 已爆肝完毕,基于 RocketMQ 5.1.2 版本进行源码讲解。 《从四大维度开始带你精通 Kafka》 已爆肝完毕,基于 Kafka 2.8 以及 3.x 版本进行源码讲解。 截止目前,累计输出 500w+ 字,讲解图 2000+ 张,还在持续爆肝中.. 后续还会上新更多项目和专栏,目标是打造地表最强中间件星球,戳我加入学习,已有430+小伙伴加入,电商实战项目火热更新中,结束时会有简历指导包装,假期最后几张最低优惠券,需要的抓紧来。
这里说几点,解答一些疑惑,可以认真看下:
1、星球内容只会越来越完善,价格越来越贵,一年时间从69元开始发售到现在已经涨到了189元,下个月会涨价一波,所以需要抓紧来,越早越受益,别错过(国庆福利,最低优惠券最后几张,认可且需要的来,文末有优惠券)。
2、只筛选认可且支持我的老铁,我不喜欢白嫖怪,尊重别人就是尊重自己。
3、对于星球年费说下,只是到期后新内容看不到,已经更完的内容相当于一次付费永久看,所以认可我内容的可以放心来,有疑问文末加我好友进行答疑。
4、除专栏外,我会提供专属的一对一答疑服务,包括不限于工作中、专栏中遇到的问题,简历修改指导、职业规划服务等。这也是星球的特色服务。
分布式系统中设计分布式 ID 对于确保订单、用户或记录等实体的唯一性至关重要。
01 分布式 ID 的设计需求
唯一性:ID 必须在所有服务或系统中全局唯一。 可扩展性:系统应能够在高负载下以高吞吐量生成 ID。 排序性:在某些用例中,ID 需要是有序或大致按时间排序的(例如用于排序)。 避免碰撞:两个 ID 相同的概率应当极小。 去中心化:ID 的生成应不依赖单一的生成器,避免单点故障。 可用性:即使在网络分区时,ID 生成系统也应能正常工作。 紧凑性:ID 的格式应在存储时高效,特别是在数据库或日志中。 透明性:有时 ID 需要嵌入元数据(如时间戳或机器 ID )以便调试或追踪。
02 常见的分布式 ID 解决方案
UUID(通用唯一标识符)
版本1:基于时间戳,包含时间戳和节点特定的信息(如 MAC 地址)。 版本4:随机生成,提供高度的唯一性。 优点:简单,广泛应用于多种编程语言中。 缺点:无序,较大(128位),不能轻易按生成时间排序。 适用场景:适用于排序要求不高的分布式系统,如对象存储或用户 ID。
Snowflake 算法(Twitter)
一个 64 位的 ID,包含以下部分:
41 位用于时间戳(从某个自定义的纪元开始的毫秒数)。 10 位用于机器 ID(数据中心或节点 ID)。 12 位用于序列号(确保同一毫秒内生成的多个 ID 是唯一的)。 优点:时间排序,具有良好的扩展性,支持高吞吐量(每个节点每毫秒最多生成 4096 个 ID)。 缺点:需要节点间时间同步。 适用场景:常用于分布式系统,如微服务或订单管理系统。
数据库序列
数据库系统通常提供自增 ID 生成(例如 MySQL 的 AUTO_INCREMENT 或 PostgreSQL 的 SERIAL)。
优点:简单且可靠,适用于小型集中式系统。 缺点:无法很好地扩展到分布式系统,会引入单点故障。 适用场景:适用于无需高扩展性的简单应用。
KSUID(K-可排序的唯一标识符)
128 位 ID,嵌入时间戳和随机部分。
优点:ID 按生成时间可排序(字典序),比 UUID 更小。 缺点:稍微比 UUID 复杂,空间效率不如 Snowflake。 适用场景:适用于需要字典序排序和较长生命周期的场景,如日志聚合系统。
Redis / MongoDB 的序列生成器
像 Redis 或 MongoDB 这样的系统可以通过原子操作充当集中式的 ID 生成器。
优点:提供集中控制,并且具有高吞吐量。 缺点:存在单点故障,依赖 Redis/MongoDB 的可用性。 适用场景:适用于分布式系统,中央节点可以在没有高可用性要求的情况下生成 ID。
03 选择解决方案的考虑因素
吞吐量需求:如果系统需要每秒生成数百万个 ID,Snowflake 或 Redis-based 方案比 UUID 更合适。 有序还是随机:如果 ID 需要按时间排序,可以考虑 Snowflake、KSUID。 存储限制:与 KSUID 相比,Snowflake ID 更小,如果存储大小至关重要,可以选择更紧凑的格式。 元数据:如果需要在ID中包含元数据,Snowflake ID 或自定义哈希方案可以编码时间戳或机器 ID 等信息。
每种解决方案适合不同的用例,具体选择取决于扩展性、排序和存储大小等因素。Snowflake 和 UUID 是现代分布式系统中最常采用的方案。
-------- 往期好文 --------
最后推荐下一个小报童代码踩坑专栏,内容挺不错的。平时我晚上下班和周末都在总结代码踩坑点,花了很多心血,都是我工作遇到或者从一些前辈那里请教来的踩坑点。很实用的。后面会有200+篇,还考虑加入解决问题的通用思路,有需要的可以入手哈,39.9也就一顿快餐饭钱~扫码加入即可
另外星球国庆还有最低优惠券福利(最后几张优惠券,先到先得,买到就是赚到)哦,详情请点击:太火了,最后10张。。。
加入星球后,请务必添加我的好友拉你进星球群。