分布式场景,唯一键的设计

标签: 分布 唯一 设计 | 发表时间:2014-08-12 16:35 | 作者:sling2007
出处:http://sling2007.blog.163.com

分布式场景下,如何设计唯一键?

我想到的思路有如下几种:
方法1、集群中每个机器分配一个唯一的id,比如用1、2、3、4来标识,那么每个机器生成唯一键的时候,只需要考虑在自己内部唯一即可,然后加上个用自己的机器id的前缀或者后缀。
这种方法最简单,实现起来也方便。

方法2、用zookeeper做一个分布式锁,在生成id的时候,先获取这个锁,然后生成唯一键,然后释放,然后下一次生成。

方法2.1、类似于方法2,我们可以单独写一个应用来生成唯一id,而让其它需要唯一键的地方,来请求这个服务。

方法3、数据库sequence方法,比较早的系统很多使用了这种方法。
3.1通过设置每个DB集群中自增 ID 起始点(auto_increment_offset),将各个集群的ID进行绝对的分段来实现全局唯一。当遇到某个集群数据增长过快后,通过命令调整下一个 ID 起始位置跳过可能存在的冲突。优点是实现简单,且比较容易根据 ID 大小直接判断出数据处在哪个集群,对应用透明。缺点是维护相对较复杂,需要高度关注各个集群 ID 增长状况。
比如集群1的id从0开始,集群2从10000开始,集群3从20000开始。。。当然起点还可以跨度更大。

3.2通过设置每个DB集群中自增 ID 起始点(auto_increment_offset)以及 ID 自增步长(auto_increment_increment),让目前每个集群的起始点错开 1,步长选择大于将来基本不可能达到的切分集群数,达到将 ID 相对分段的效果来满足全局唯一的效果。优点是实现简单,后期维护简单,对应用透明。缺点是第一次设置相对较为复杂。
比如集群中三个机器a,b,c,那么各自起点设置为1、2、3,自增步长为8,那么机器a的id为1、9、17、25。。。
这也是目前使用最广泛的一种方式。

分布式的唯一键最好不要自增的,这样会给以后的进一步扩展带来不便,也就是我不建议使用第三种方式。

相关 [分布 唯一 设计] 推荐:

分布式场景,唯一键的设计

- - sling2007的博客
分布式场景下,如何设计唯一键. 方法1、集群中每个机器分配一个唯一的id,比如用1、2、3、4来标识,那么每个机器生成唯一键的时候,只需要考虑在自己内部唯一即可,然后加上个用自己的机器id的前缀或者后缀. 这种方法最简单,实现起来也方便. 方法2、用zookeeper做一个分布式锁,在生成id的时候,先获取这个锁,然后生成唯一键,然后释放,然后下一次生成.

分布式系统中唯一 ID 的生成方法

- - 文章 – 伯乐在线
本文主要介绍在一个分布式系统中, 怎么样生成全局唯一的 ID. 在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的 unique ID?. 在单机系统中 (例如一个 MySQL 实例), unique ID 的生成是非常简单的, 直接利用 MySQL 自带的自增 ID 功能就可以实现..

多IDC的数据分布设计(二)

- crystal - Tim[后端技术]
在前文《多IDC的数据分布设计(一)》中介绍了多IDC数据一致性的几种实现原理,遗憾的是,目前虽然有不少分布式产品,但几乎都没有开源的产品专门针对IDC来优化. 本文从实践的角度分析各种方法优缺点. 背景资料 Latency差异. Jeff Dean提到不同数据访问方式latency差异. 这个数据对于我们设计多IDC数据访问策略具有关键的指导作用,我们可以用这个数据来衡量数据架构来如何设计才能满足高并发低延迟的目标.

分布式系统设计策略

- - 互联网 - ITeye博客
摘自 《深入分布式缓存:从原理到实践》. 分布式系统本质是通过低廉的硬件攒在一起以获得更好地吞吐量、性能以及可用性等. 分布式系统有一些通用的设计策略,也是在分布式环境下普遍关心的几个问题:. 在分布式环境中,一般会有多个节点来分担任务的运行、计算或程序逻辑处理. 如上图所示,Client请求Server,Server转发请求到具体的Node获取请求结果.

分布式系统中, 怎么样生成全局唯一的 ID

- - zzm
在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的 unique ID?. 在单机系统中 (例如一个 MySQL 实例), unique ID 的生成是非常简单的, 直接利用 MySQL 自带的自增 ID 功能就可以实现.. 但在一个存在多个 Shards 的分布式系统 (例如多个 MySQL 实例组成一个集群, 在这个集群中插入数据), 这个问题会变得复杂, 所生成的全局的 unique ID 要满足以下需求:.

后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异

- - mindwind
「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的. 然后呢,我就去把 GFS 的原始论文找出来仔细看了遍,GFS 的整体架构图如下:. HDFS 参照了它所以大部分架构设计概念是类似的,比如 HDFS NameNode 相当于 GFS Master,HDFS DataNode 相当于 GFS chunkserver.

分布式架构系统生成全局唯一序列号的一个思路

- - IT瘾-dev
作者简介  丁宜人,10年java开发经验. 携程技术中心基础业务研发部用户中心资深java工程师,负责携程账号的基础服务和相关框架组件研发. 之前在惠普公司供职6年,负责消息中间件产品研发. 分布式架构下,唯一序列号生成是我们在设计一个系统,尤其是数据库使用分库分表的时候常常会遇见的问题. 当分成若干个sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题.

【分布式系统工程实现】GFS&Bigtable设计的优势

- hikerlive - 淘宝核心系统团队博客
目前,知名度比较高的通用存储系统包括:Google GFS&Bigtable,Amazon Dynamo,Microsoft Azure存储系统及Yahoo PNUTS. 其中,GFS&Bigtable,Azure存储系统及Yahoo PNUTS都有总控节点,Amazon Dynamo采用去中心化的P2P设计.

分布式系统的设计几个要注意的地方

- - CSDN博客推荐文章
最近在做系统升级,由于当时设计的局限,导致系统不停服,保证服务的做法非常麻烦. 当时再定方案的时候,由于自己在这方面没有经验,导致有些乐观. 到了实际做的时候,预期时间至少比预想的多了一周的时间,要知道,在. 互联网公司,一周的时间是个非常长的时间. 在这里总结一下分布式系统设计的大忌,本来想试着分一下级,但是还是算了,一来标准太多,无法制定一个合适的规则来界定;二来自己的经验也在增长,低调一下是自己也没详细的研究过超过5个分布式系统;三来做事情还是要严谨,不做没有十足把握的事情.

从分布式存储设计到自动化运维

- - 五四陈科学院-坚信科学,分享技术
以下内容由 [五四陈科学院]提供. http://www.infoq.com/cn/articles/nosql-dynamo 三年前在infoq发表的一篇关于两种特别有代表性的分布式存储的设计思路解析,三年过去了,今天再来总结看看这几年的变化. 实际上,这三年,还是两个东西,一直没有冒出来更牛B的东西.