当前位置:  开发笔记 > 编程语言 > 正文

分布式并发控制

如何解决《分布式并发控制》经验,为你挑选了2个好方法。

我已经在这方面工作了几天,我找到了几个解决方案,但没有一个简单或轻巧.问题基本上是这样的:我们有一个由10台机器组成的集群,每台机器在多线程ESB平台上运行相同的软件.我可以很容易地处理同一台机器上的线程之间的并发问题,但是对于不同机器上的相同数据的并发性呢?

本质上,软件接收通过Web服务将客户数据从一个企业提供给另一个企业的请求.但是,客户可能存在或可能不存在于另一个系统上.如果没有,我们通过Web服务方法创建它.所以它需要一种测试和设置,但我需要某种形式的信号量来锁定其他机器导致竞争条件.我曾经遇到过为一个本地客户创建两次远程客户的情况,这是不太理想的.

我从概念上玩弄的解决方案是:

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

    在我们的数据库中使用一个特殊的表,并锁定整个表,以便为锁记录进行"测试和设置".

    使用Terracotta,一种开源服务器软件,有助于扩展,但使用中心辐射模型.

    使用EHCache同步复制我的内存"锁".

我无法想象我是唯一一个遇到过这种问题的人.你是怎么解决的?你在内部做饭还是有最喜欢的第三方产品?



1> 小智..:

您可能要考虑使用Hazelcast分布式锁.超轻便易.

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

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



2> 小智..:

我们使用兵马俑,所以我想投票支持.

我一直在关注Hazelcast,它看起来像是另一种很有前途的技术,但由于我没有使用它,因此不能投票支持它,并且知道它使用的是基于P2P的系统,我真的不相信它的大扩展需求.

但我也听说过来自雅虎的Zookeeper,它正在Hadoop旗下.如果你冒险尝试一些新技术,这真的有很多承诺,因为它非常精益和平均,专注于协调.我喜欢这个愿景和承诺,尽管它可能还是太绿了.

http://www.terracotta.org

http://wiki.apache.org/hadoop/ZooKeeper

http://www.hazelcast.com

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有