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

分布式并发控制

庾波光
2023-03-14
问题内容

我已经为此工作了几天,已经找到了几种解决方案,但是都没有一个非常简单或轻巧的解决方案。问题基本上是这样的:我们有一个由10台计算机组成的群集,每台计算机都在多线程ESB平台上运行相同的软件。我可以很轻松地处理同一台计算机上线程之间的并发问题,但是不同机器上同一数据上的并发又如何呢?

本质上,该软件接收请求,以通过Web服务将客户数据从一家公司传送到另一家公司。但是,客户可能存在或可能不存在于另一个系统上。如果没有,我们将通过Web服务方法创建它。因此,它需要某种测试和设置,但是我需要某种信号量,以防止其他计算机出现竞争状况。我曾经遇到过为一个本地客户创建两次远程客户的情况,这并不是很理想。

从概念上讲,我喜欢的解决方案是:

  1. 使用我们的容错共享文件系统创建“锁定”文件,每台机器将根据客户检查这些文件

  2. 在我们的数据库中使用特殊的表,并锁定整个表,以便对锁定记录进行“测试并设置”。

  3. 使用Terracotta,这是一种开放源代码服务器软件,可帮助扩展规模,但使用中心辐射型模型。

  4. 使用EHCache同步复制内存中的“锁”。

我无法想象我是唯一遇到过此类问题的人。您是如何解决的?您是在内部做饭还是有喜欢的第三方产品?


问题答案:

您可能要考虑使用Hazelcast分布式锁。超级轻巧易用。

java.util.concurrent.locks.Lock lock = Hazelcast.getLock ("mymonitor");
lock.lock ();
try {
// do your stuff
}finally {
   lock.unlock();
}

Hazelcast-分布式队列,地图,集合,列表,锁定



 类似资料:
  • 本文向大家介绍分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控(推荐),包括了分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控(推荐)的使用技巧和注意事项,需要的朋友参考一下 服务器磁盘的运作情况在一定程度上反应系统的负载。 磁盘通常是服务器最慢的设备,极容易出现瓶颈,通过监控可以判断出整个系统的短板。   zabbix并没有给我们提供这么一个模板来完成在Linux中磁

  • 我在我的API(如MemTable)中使用Hazelcast作为嵌入式分布式映射,在将其发送到另一个存储之前积累条目。我的问题是: 我可以使用为IMap提供的LocalMapStats对象控制堆大小吗? 我正在阅读关于该对象的信息,我认为getHeapSize()或getOwnedEntryMemoryCost()加上getBackupEntryMemoryCost()等方法可能会给我提供内存成本

  • 一、分布式锁 数据库的唯一索引 Redis 的 SETNX 指令 Redis 的 RedLock 算法 Zookeeper 的有序节点 二、分布式事务 2PC 本地消息表 三、CAP 一致性 可用性 分区容忍性 权衡 四、BASE 基本可用 软状态 最终一致性 五、Paxos 执行过程 约束条件 六、Raft 单个 Candidate 的竞选 多个 Candidate 竞选 数据同步 参考 一、分

  • 主要内容:并发控制的问题在并发控制中,可以同时执行多个事务。 它可能会影响事务结果。保持这些事务的执行顺序非常重要。 并发控制的问题 并发事务以不受控制的方式执行时可能会出现几个问题。 以下是并发控制中的三个问题。 更新丢失 脏读 不可重复读取 1. 更新丢失 当访问相同数据库项的两个事务包含其操作时,某些数据库项的值不正确,则会发生丢失的更新问题。 如果两个事务T1和T2读取记录然后更新它,那么第二个更新将覆盖更新第一

  • 配置样例 样例 1 限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个: <dubbo:service interface="com.foo.BarService" executes="10" /> 样例 2 限制 com.foo.BarService 的 sayHello 方法,服务器端并发执行(或占用线程池线程数)不能超过 10

  • 如果一个语言要实现支持并发执行的接口,则一般来说需要在并发控制上下功夫,原因就是前面说的,由于虚拟机实现的细节问题,直接依赖宿主环境的并发容易出问题。简单地,以使用宿主的线程为例。假如源语言的线程对应宿主环境的真线程,那么同步操作就需要用到线程间的互斥量,比如锁,信号量等 一个程序需要并发,一般来说有三个原因: 一,为充分利用多核cpu资源,提高计算速度。这个原因是很重要,但在实际中其重要性我觉得