问题标签 [distributed-lock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
225 浏览

mysql - 通过 redisson 避免重复行

我确实有一张桌子,Foo。我在某些事件上向此表添加行。当前的整体设计使得无法避免重复消息。这会导致向表中添加重复行。

我不能对表设置唯一约束,因为有不同类型的消息成为该表中的行。我想避免仅针对特定类型的消息重复。

由于重复消息经常同时出现,并且该应用程序在多个节点上运行,我决定使用 radisson 来获取分布式锁。但是,它似乎不起作用。我仍然在表中得到重复的行。

根据用户 ID、日期和类型检测重复消息。下面是简约的演示代码。我正在尝试在写入之前进行读取,并且此读取发生在跨应用程序节点的同步块中。

感谢对此的任何投入。

0 投票
1 回答
181 浏览

java - Curator Hierarchy Locking(重叠锁)

我能够成功锁定/ads/lock/0-test1,然后无法锁定/ads/lock

我该如何解决这个问题?

更新:这是https://github.com/Microsoft/Cluster-Partition-Rebalancer-For-Kafka/ZookeeperBackedAdoptionLogicImpl.java第 250 行(详细路径)和 299(根路径)中发生的事情的本质是连续的. 因此,当另一个实例尝试锁定详细路径 (250) 时,锁定失败,因为根路径 (299) 被锁定。逻辑有效但从未获得根锁

更新 2:我写了一个小程序来检查重叠锁是否有效,它确实有效。

0 投票
1 回答
184 浏览

hazelcast - Hazelcast IMap tryLock 批量多键

我有一个集群程序,其中每个线程都想锁定一组键。据我了解,使用 hazelcast 的最简单解决方案:

这段代码的主要问题是这段代码会产生大量的网络流量和对 hazelcast 的请求。有人可以推荐如何优化此代码吗?

我在 Hazelcast IMap 中找不到批量 tryLock 功能。

0 投票
1 回答
88 浏览

redis - Redisson 中的各种锁实现提供了哪些保证?

Redisson 有几种锁实现(RLock, RedissonMultiLock, RedissonRedLock),但是对于每种锁类型在安全性和活跃性方面提供了哪些保证尚不清楚。

参考这个 - https://redis.io/topics/distlock我相信 RedLock 实现必须是最强大的实现,但没有提到其他实现缺乏容错性。

0 投票
2 回答
852 浏览

c++ - 使用 C++ 的 Redis 5.0 集群的选项

我正在使用 C++ 探索 Redis 5.0 集群。我已经在 Redis 官方网站上看到了不同的选项,但没有一个 C++ 客户端被标记为推荐。我尝试了 C 客户端“hiredis-vip”,它适用于我的初始原型,但是在报告问题(及其解决方法)后,我被告知该客户端似乎并未正式支持 Redis 5.0(请参阅我的问题报告及其评论在这里)。

如果有使用 Redis 和 C/C++ 经验的人可以建议一些符合以下要求的好的 C/C++ 客户端选项,我将不胜感激:

  1. 通过集群支持支持较新版本的 Redis(最好是 5.0)
  2. 开箱即用的 RedLock 实现也会很棒(对于我的分布式锁定要求)。
0 投票
1 回答
1027 浏览

java - Hazelcast CP 子系统 FencedLock 内存使用情况

设置:

  • 榛树:3.12.3
  • 春季启动:2.1.6
  • 爪哇:1.8
  • 参数:-XX:+UseG1GC
  • Xms7g -Xmx7g 这些在 Docker 中运行:openjdk:8
  • 它们在专用的 vmware 节点 CentOS 7.5.1804 中运行

我总共有 7 个节点组成了一个 hazelcast 集群。其中5人是CP成员。组大小设置为 3。其他值得注意的配置更改:setSessionTimeToLiveSeconds(200)、setMissingCPMemberAutoRemovalSeconds(240)。

用法:我有 8 个客户端尝试获取 Long key 的防护锁,接口缓存 5 分钟。键几乎总是不同的,但在某些情况下,我们会收到同一个键的许多操作,我们希望避免这些键的异步更新。过去我为此使用 IMap,但我注意到它并不总是尊重锁。Fenced 锁在达到一定的内存使用率之前似乎表现得非常好。

问题:我观察到一个 cp 成员被大量使用,并且 G1 Old Gen 堆随着时间的推移而略微增加。一天之内就达到了 5GB。即使在我停止锁定请求之后,内存也永远不会被清除。 在此处输入图像描述

我尝试创建两个组以利用集群中的更多节点,它确实有帮助,但问题仍然存在,一些节点上的已用堆随着时间的推移而增加,并且有时它们变得非常慢。

问题:我做错了什么?这甚至是该工具的有效用例吗?

0 投票
2 回答
3297 浏览

multithreading - 微服务架构中的分布式锁

我们有一个架构设置,我们在服务器中运行客户端应用程序,我们希望有一个微服务负责提供分布式锁/映射/缓存功能。这个微服务内部使用 Redisson,这是一个基于 Java 的客户端,可以与 Redis 通信。现在我们想提供客户端应用程序可以使用的微服务的 api 锁定、解锁、获取、放置。对于应用程序到微服务的通信,我们将使用 gRPC 协议。

从微服务向客户端提供锁定/解锁 API 的正确方法是什么?目前,我们使用基于 RedissonMap RMap.getLock(..)) 的 Redisson 的 Semap,它遵循 java Lock 规范,因此获取分布式锁的线程只能解锁。一个问题是由于锁定是由微服务处理的,因此客户端必须发出单独的锁定和解锁请求,这些请求可能由同一节点(微服务)和同一线程提供服务,也可能不提供。这可以通过使用信号量(有 1 个许可证)来解决。所以,本质上我们使用redisson的Rsemaphore来服务互斥的用例

我更感兴趣的是找出当我们提出获取/释放的 API 规范时需要考虑的因素,比如在微服务上对获取/释放许可的调用应该是同步的还是异步的。

0 投票
0 回答
36 浏览

java - 处理临界区的分布式锁

我有一个要求,即在不同的 DC 上运行 2 个应用程序实例。它使用分布式锁,因此在任何给定时间点,只有 1 个实例拥有锁。所以说实例 A 有锁,但是在运行一些关键部分时它失去了锁,但它不知道它,所以实例 B 获得了锁。所以现在在更新数据库实例 A 之前检查它是否有锁,如果它没有锁,它应该退出。我不确定处理退出的投注方式是什么。我不能只返回,因为代码流将继续。我在想 System.exit 然后因为我们使用 mesos 它将再次启动实例但想看看是否有更好的方法来处理它。

0 投票
1 回答
1581 浏览

redis - 锁定redis集群

我有一个由 3 个主节点组成的 Redis 集群,每个主节点都有相应的从节点。我想在集群上获取一个锁来执行一些写操作,然后释放锁。

从我读到的内容是 - 要连接到集群,我们通常连接到集群中的一个节点并在该节点上执行所有操作,然后再处理重定向到集群中的其他节点。

是否可以在 Redis 集群上获取锁?[PS 我正在使用 Redisson 客户端] 从 Multilock 和 redlock ( https://github.com/redisson/redisson/wiki/8.-Distributed-locks-and-synchronizers ) 下的 Redisson 客户端示例中,他们正在获取锁在各个节点上。

  • Multi lock或Red lock如何在集群上工作?
  • 如果我有 Redis 集群,我应该如何使用哪种锁?
  • 我使用哪个库(Jedis/Redisson)?

Jedis 似乎也支持锁定集群(https://github.com/kaidul/jedis-lock)。

PS:我已经广泛阅读了这方面的内容,但我无法找到关于锁定集群的明确答案。非常感谢一些帮助。

0 投票
0 回答
249 浏览

kotlin - 似乎redisson分布式锁不起作用

我正在测试 redisson 的分布式锁是否可以正常工作,使用 kotlin 和协程。

我认为结果值应该是 3000,因为分布式锁保证了 'get' 和 'set' 操作会原子地一起执行。

但是当我试图获得价值时,我得到了以下结果:

我究竟做错了什么 ???