在分布式系统中如何设计和实现一套可靠的分布式锁服务机制一直是非常令人头痛的问题。Google在论文The Chubby lock service for loosely-coupled distributed systems 中,描述一个粗粒度的锁服务系统- Chubby。
1. Chubby能够干什么呢
根据Google论文提到的,Chubby系统在Google的分布式开发环境中扮演重要作用。Chubby系统让客户端进行同步并且协调配置环境,方便程序员进行分布式系统中一致性服务的开发。例如,Google的GFS系统直接使用chubby选取主服务器;Google的BigTable中使用chubby完成主服务选取、用户发现、表格锁服务等;软件开发者使用chubby粗粒度的分配任务;在编写并发程序时,使用chubby提供的共享锁或者独占锁,保证数据的一致性。
可见,Chubby的使用范围远远超过了分布式锁的初始开发用途,已经成为Google的基础软件架构之一,大致总结一下,包括以下几个方面:
1.挑选主控机。无论GFS、BigTable系统都是由Chubby来挑选主控机,防止单点故障。从机制上说,这套系统的可靠性和可用性已经远远超过当前比较流行的Linux HA的drbd、双机热备等机制。
2.名字服务器。Chubby可以管理整个应用空间的名字,用作分布式系统的名字服务器是最容易不过的事情。
3.分布式锁。这是Chubby初始的设计用途。
2. Chubby的性能怎么样
Chubby系统提供粗粒度(coarse-grained)而非细粒度(fine-grained)的锁服务,并且基于松耦合分布式系统设计可靠的存储。Chubby系统提供建议性的锁,而不是强制性的锁;强调锁服务的可用性、可靠性。Chubby系统在RAM中存储数据,并同步到磁盘上,支持大规模用户访问文件;客户端通过缓存数据,减少对主服务器的访问量。为了方便用户,使用一致性缓存。主服务器通过通报机制,定期向客户端发送更新消息。
一个标准的Chubby集群由5个节点组成,其中一个是主控机,任何一个节点都可以随时接替主控机的工作。根据Google论文中的数据,一个Chubby集群曾经管理90,000个客户端组成的服务器集群平稳运行了2年的时间,性能基本不存在大的问题。
3. 3.Chubby是怎么实现的
Chubby系统本质上是一个分布式的文件系统,存储大量的小文件。每一个文件就代表了一个锁,并且保存一些应用层面的小规模数据。用户通过打开、关闭和读取文件,获取共享锁或者独占锁;并且通过通信机制,向用户发送更新信息。例如,当一群机器选举mater时,这些机器同时申请打开某个文件,并请求锁住这个文件。成功获取锁的服务器当选主服务器,并且在文件中写入自己的地址。其他服务器通过读取文件中的数据,获得主服务器的地址信息。
分享到:
相关推荐
为什么要用分布式锁?-- 业务场景-2 用户下单库存超卖问题 3 为什么要用分布式锁?-- 业务场景-2 用户下单库存超卖问题 4 为什么要用分布式锁?-- 业务场景-2 用户下单库存超卖问题 APP快速连续点击会向服务器连续...
redis分布式锁,包含单服务器上锁解锁情况,和分布式上锁解锁情况,全部封装在类里,有需要可以下载,希望可以帮助到你。
分布式锁的一般实现方法是在应用服务器之外通过一个共享的存储服务器存储锁资源,同一时刻只有一个客户端能占有锁资源来完成。通常有基于Zookeeper,Redis,或数据库三种实现形式。本文介绍基于Redis的实现方案。
支持基于Kubernetes的分布式锁: Kubernetes储物柜由任意Kubernetes资源配置; 锁存储在指定资源的注释中; 正确使用本地Kubernetes乐观锁定来处理对资源的同时访问。 支持使用HTTP服务器的锁: lockgate锁...
分布式锁,基于Netty长连接实现,自定义协议,高性能锁,内置等待队列,服务下线立刻感知,无需等待超时.支持优雅关闭.规避Redis分布式锁缺陷
咨询锁 使用分布式。 一些用例: 您有一个并且要绝对确保在任何给定时间都不会有多个进程处于活动状态。 如果由于意外事件或在部署过程中按比例扩大了时钟进程,这种情况会使旧版本保持运行,直到新版本响应运行状况...
一款基于 Spring Boot Starter 机制的分布式锁框架,实现了redis和zookeeper两种模式的分布式锁功能,以注解的方式(@RLock和@ZLock)对方法进行加锁操作,零代码实现业务加锁能力,涵盖各种加锁方式,并支持redis和...
本项目将基于Consul的KV存储来实现一套Java的分布式锁小工具,以帮助简化分布式环境下的同步操作
一种简单的,支持不同方案的高性能分布式锁,基于Spring AOP 的声明式和编程式分布式锁,支持RedisTemplate、Redisson、Zookeeper可混用,支持扩展
在昨天 review 队友代码的过程中,发现了我们组分布式锁的写法似乎有点问题,实现代码如下: 加锁部分 解锁部分 主要原理是使用了 redis 的 setnx 去插入一组 key-value,其中 key 要上锁的标识(在项目中是锁死...
本文来自于技术世界,本文结合实例演示了使用Zookeeper实现分布式锁与领导选举的原理与具体实现方法。如上文《Zookeeper架构及FastLeaderElection机制》所述,Zookeeper提供了一个类似于Linux文件系统的树形结构。该...
一个应用于springboot项目的,基于redis的分布式锁 可用于多节点项目防重复业务调用。通过方法注解开启 简单、易用。可以通过简单的注解配置达到同机器或不同机器竞争锁
这是一个对文件存储、 JDK8日期,分布式锁、分布式限流、跨域请求,国际化、防XSS攻击、关键字脱敏的增强包,拥有良好的扩展性,一切功能都是基于注解化驱动
如果用户将自己的多条提现请求同时发送到服务器,代码能否扛得住呢?一旦没做锁,那么就真的会给用户多次提现,给公司带来损失。我来简单介绍一下在这种接口开发过程中,我的做法。 第一阶段: 我们使用的orm为xorm,...
使用非阻塞socket io并行获取分布式锁可以在第 (N/2+1) 个最快服务器的往返延迟约 2 倍的时间内获得分布式锁 用法示例: use RedLocker \ LockManager ; $ servers = array ( array ( 'localhost' , '4545' ), ...
在高并发的情形下会对数据库服务器或者是文件服务器应用服务器造成巨大的压力,严重时说不定就宕机了,另一个问题是,秒杀的东西都是有量的,例如一款手机只有10台的量秒杀,那么,在高并发的情况下,成千上万条数据...
分布式锁 我们需要怎么样的分布式锁? 可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行。 这把锁要是一把可重入锁(避免死锁) 这把锁最好是一把阻塞锁(根据业务需求...
Redis-分布式-事务在大型游戏中经常使用分布式,分布式中因为游戏逻辑会经常进行游戏事务,通过redis特性我们可以实现分布式锁和分布式事务。很多redis分配不支持redis的事务特性。支持独占锁,共享锁,读写锁,并且...