当前位置: 首页 > 面试题库 >

分布式锁服务

吉和同
2023-03-14
问题内容

您将使用哪种分布式锁定服务?

要求是:

  1. 可以从不同的进程/机器看到的互斥(锁定)
  2. 锁定…释放语义
  3. 超时后自动释放锁-如果锁持有人死亡,它将在X秒后自动释放
  4. Java实现
  5. 很高兴拥有:.Net实现
  6. 如果免费:死锁检测/缓解
  7. 易于部署,请参阅下面的注释。

我对诸如“可以通过数据库完成”或“可以通过JavaSpaces完成”之类的答案不感兴趣-我知道。我对现成的,现成的,经过验证的实现感兴趣。


问题答案:

Teracotta(包括开源版本)已经通过使用synchronizedjava.util.concurrent.ReentrantReadWriteLock-显然符合您的要求的方式来分发锁定语义。

更新资料

由于该问题现在增加了与GigaSpaces“混合”的要求,所以我要说 不要 将它们混合。这只会增加您的技术堆栈的复杂性,并努力:

  • 在代码和基础架构方面进行集成;
  • 管理它们之间的同步;
  • 学习/调整/调试Teracotta。

将更好地用于基于GigaSpaces创建或实施锁定解决方案。



 类似资料:
  • 本系统中的分布式锁设计用于Storm多个线程实例抢占Redis缓存资源时出现的事务性问题,这个事务性问题是由客户端本身业务逻辑需求产生的,无法在服务端进行有效处理,需给出一个分布式资源同步的方案,此处我们采用了分布式锁来完成这项设计。 锁是编程中非常常见的概念。在维基百科上对锁有个相当精确的定义:在计算机科学中,锁是一种在多线程环境中用于强行限制资源访问的同步机制。锁被设计用于执行一个互斥的并发控

  • 主要内容:Redis分布式锁介绍,Redis分布式锁命令在分布式系统中,当不同进程或线程一起访问共享资源时,会造成资源争抢,如果不加以控制的话,就会引发程序错乱。此时使用分布式锁能够非常有效的解决这个问题,它采用了一种互斥机制来防止线程或进程间相互干扰,从而保证了数据的一致性。 提示:如果对分布式系统这一概念不清楚,可参考百度百科《分布式系统》,简而言之,它是一种架构、一种模式。 Redis分布式锁介绍 分布式锁并非是 Redis 独有,比如 MySQ

  • 在单机程序并发或并行修改全局变量时,需要对修改行为加锁以创造临界区。为什么需要加锁呢?我们看看在不加锁的情况下并发计数会发生什么情况: package main import ( "sync" ) // 全局变量 var counter int func main() { var wg sync.WaitGroup for i := 0; i < 1000; i++

  • 背景 在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GETSET,可以方便实现分布式锁机制。 一、使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以

  • Lock Redisson 分布式可重入锁,实现了 java.util.concurrent.locks.Lock 接口并支持 TTL。 RLock lock = redisson.getLock("anyLock"); // Most familiar locking method lock.lock(); // Lock time-to-live support // releases loc

  • 链接 Web API Controllers 动态WebApi层 集成OData 集成Swagger UI ASPNET Core 集成OData