关于分布式uuid的一点设想】的更多相关文章

在一次公开课上,听别人讲过全局分布式uuid的设计,听过twitter的snowflake的设计.也听过,如果使用单独的计数器服务,不可能每次都保存当前计数器到文本,自己想到应该可以每隔一些数,例如1万次,10万次,反正64位的空间比较大,然后保存起来,那么就没有每次保存,对硬盘的写入压力.当出现故障的时候,跳过这么多数就可以了.只是,这个据说也是微信的uuid设计方案.我如果拿这个来讲,岂不是抄袭很严重.下面先给出uuid服务的图: 对于snowflake和微信的计数保存方案,各个各的优点,在…
背景 最近有个项目:涉及到分布式计算,tps相对较高,流程之间是异步调用,流程间相互依赖的对象(涉及记录外键)需要持久化.这就衍生出了需要在JVM中快速生成分布式UUID的问题 方案 1.通过JDK标准API?UUID会重复 要生成UUID,大多会直接使用下面这句: UUID.randomUUID().toString().replace("-", ""); 在多数情况下,这样的处理是没问题的,毕竟是JDK标准接口.但是在某些情况下,会出现重复.搜素 uuid 重复…
1.在分布式系统中,我们使用锁机制只能保证同一个JVM中一次只有一个线程访问,但是在分布式的系统中锁就不起作用了,这时候就要用到分布式锁(有多种,这里指 redis) 2.在 redis当中可以使用命令 setnx(key, value)来实现分布式锁 setnx:当key不存在的时候设置成功,返回1,若存在的话返回0表示失败.使用这个命令的话要搭配 expire(key, time)来设置过期时间,但是这种组合存在问题,如下: try { redisClient.expire(key, 100…
一.数据库发号器 每一次都请求数据库,通过数据库的自增ID来获取全局唯一ID 对于小系统来说,这是一个简单有效的方案,不过也就不符合讨论情形中的高并发的场景. 首先,数据库自增ID需要锁表 而且,UUID的生成强依赖于数据库,每次获取UUID都需要经过一次数据库的调用,性能损耗很大. 其实,在这种大并发的场景中,数据库的主键都不建议使用数据库的自增ID.因为虽然这个简单,但是如果随便业务发展,需要对原有的数据进行重新分库分表的时候,可能会产生主键冲突,这影响了系统的平滑扩容,容易埋下坑. 二.中…
基于Redis使用分布式锁在当今已经不是什么新鲜事了. 本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案.我们项目中的抢购订单采用的是分布式锁来解决的,有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了100瓶!要知道,这个地球上飞天茅台的稀缺性啊!!! 事故定为P0级重大事故...只能坦然接受.整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理. 好吧,冲~ 事故现场 经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种情况…
一 CAP理论简述 CAP (Consistency, Availability, Partition  Tolerance,) 理论是NoSQL数据库管理系统构建的基础.     强一致性:等同于所有节点访问同一份最新的数据副本   可用性:每一个操作总是能够在一定的时间内返回结果,这里需要注意的是"一定时间内"和"返回结果".一定时间指的是,在可以容忍的范围内返回结果,结果可以是成功或者失败.   分区容错性:理解为在存在网络分区的情况下,仍然可以接受请求(满足…
1.UUID的定义 通用唯一标识符(UUID)被设计成一个在时间和空间上都独一无二的数字,常被用作唯一性标识. UUID是一个由5位十六进制数的字符串表示的128比特数字,其格式为 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee. UUID的生成用到了以太网卡地址.纳秒级时间.芯片ID码和许多可能的数字,目的是保证UUID的唯一性. 2.Java对UUID的支持 JDK1.5之后增加了对UUID的支持: UUID uuid  =  UUID.randomUUID();…
随着微处理机技术的发展,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理机每秒钟所执行的指令还多.如果你愿意付出两倍的价钱,将得到同样的CPU,但它却以更高的时钟速率运行.因此,最节约成本的办法通常是在一个系统中使用集中在一起的大量的廉价CPU.所以,倾向于分布式系统的主要原因是它可以潜在地得到比单个的大型集中式系统好得多的性价比.实际上,分布式系统是通过较低廉的价格来实现相似的性能的. 随着互联网的兴起,越来越多的人使用者互联网产品.一般互联网系统…
承接前面一篇Redis分布式锁的原理介绍 https://www.cnblogs.com/liboware/p/11921759.html 我们针对于实现方案进行接下来上篇进行重新的规划和定义以及完善. 关于分布式锁 很久之前有讲过并发编程中的锁并发编程的锁机制:synchronized和lock.在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量.而同步的本质是通过锁来实现的.为了实现多个线程在一个时刻同一个代码…
任老师第一节主要讲了分布式系统实现时候面临的八个问题,布置的作业就是这个,查询CAP理论. 笔者初次接触分布式,所以本文主要是一个汇总. 一.CAP起源 CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他认为在设计一个大规模可扩放的网络服务时候会遇到三个特性:一致性(consistency).可用性(Availability).分区容错(partition-tolerance)都需要的情景,然而这是不可能都实现的.之后在2003年的时候,Mit的Gilbert和Lync…