分布式唯一ID服务架构

一、背景介绍

在大型互联网应用中,随着用户数的增加;为了提高应用的性能,我们经常需要对数据库进行分库分表操作。在单表时代我们可以完全依赖于数据库的自增ID来唯一标识一个条数据。但是当我们对数据库进行了分库分表之后,就不能依赖于每个表的自增ID来全局唯一标识这些数据了。因为自增的ID不能在分库分表的场景下准确的路由到正确的数据。
因此我们需要提供一个全局唯一的ID生成策略来支持分库分表的应用环境;
这个系统必须满足以下需求:
· 全局唯一: 不能出现重复的ID;
· 高可用: ID生成系统属于基础服务,同时被许多关键系统调用,一旦宕机,会造成严重影响;

二、经典方案介绍

1. UUID
UUID是Universally Unique Identifier的缩写,它是在一定范围内(从特定的名字空间到全球)唯一的机器生成的标识符,UUID是16字节128位长的数字,通常以36字节的字符串表示;比如:
UUID经由一定的算法机器生成,为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保证了其唯一性的同时,意味着只能由计算机生成。
优点:本地生成ID,不需要远程调用、低延时、性能高;
缺点:UUID过长,16字节128位,很多场景不适用;比如用UUID做数据库的索引时,插入数据时数据量越大,插入性能越低;
UUID不是有序的,无法保证趋势递增;
2. Flicker方案
该方案主要的思路是采用了MySQL自增长的ID的机制(auto_increment + replace into)

--- 数据表CREATE TABLE Tickets64 (
  id     bigint(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值