请教,一个多线程问题

zapdos 2014-07-25 08:57:47
简单的说这是为了解决分布式事务的死锁问题的,经测试是有效的,现在是想找个好的写法,麻烦各位高手帮忙看一下,这个具体的代码应该怎么写

如图所示为使用场景,服务器接到一个请求后需要分散到多个数据节点去操作,需要在阶段1决定锁的顺序,然后在阶段3对每个数据节点(数据节点是固定的)锁定,使其按阶段1决定的顺序获得锁,并在阶段4之前释放

不同的客户请求有可能在多个不同的服务器上发生,所以这些锁要求是分布式的

本来是想用分布式队列做的,但是感觉有点麻烦,可能使用分布式公平锁是不是会更好一点,但是我不知怎么写,求指教

下面这个是基本架构图
最底下是数据节点,中间是服务器
...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
致知Fighting 2014-07-25
  • 打赏
  • 举报
回复
引用 6 楼 zapdos 的回复:
[quote=引用 2 楼 ygycomon 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 分布式锁用zk(zookeeper)可以做,详细的资料网上很多,LZ可以自己去看看 PS:你的问题没太看明白
另外我对你的架构不太理解,如果不同的服务器之间要加锁而只能串行的话,那么你用集群的意图何在?[/quote] 串行的部分非常小,耗时操作都并行处理了,这个串行,只是为了决定一个顺序而已,实际上影响非常小,如果说完全没有需要同步的地方,那zookeeper还有什么用呢 这个问题,不在于分布式锁怎么弄,在于怎么让这个锁按顺序获得[/quote] 怎么让这个锁按顺序获得,不就是分布式锁怎么弄呢,我觉得没区别,zk可以轻松解决你的问题,搜资料去吧。 关于架构的问题,上一楼我已经分析过了。
zapdos 2014-07-25
  • 打赏
  • 举报
回复
引用 2 楼 ygycomon 的回复:
[quote=引用 1 楼 ygycomon 的回复:] 分布式锁用zk(zookeeper)可以做,详细的资料网上很多,LZ可以自己去看看 PS:你的问题没太看明白
另外我对你的架构不太理解,如果不同的服务器之间要加锁而只能串行的话,那么你用集群的意图何在?[/quote] 串行的部分非常小,耗时操作都并行处理了,这个串行,只是为了决定一个顺序而已,实际上影响非常小,如果说完全没有需要同步的地方,那zookeeper还有什么用呢 这个问题,不在于分布式锁怎么弄,在于怎么让这个锁按顺序获得
致知Fighting 2014-07-25
  • 打赏
  • 举报
回复
引用 4 楼 zapdos 的回复:
[quote=引用 3 楼 rumlee 的回复:] [quote=引用 2 楼 ygycomon 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 分布式锁用zk(zookeeper)可以做,详细的资料网上很多,LZ可以自己去看看 PS:你的问题没太看明白
另外我对你的架构不太理解,如果不同的服务器之间要加锁而只能串行的话,那么你用集群的意图何在?[/quote] 同意,我觉得也是的,如果这搞这么复杂,还用集群干嘛,这样搞下去也许最终性能比单服务器好不了多少呢?[/quote] 需要同步的只有2块低耗时的操作,况且哪个分布系统,是完全不需要锁的,不然用zookeeper来做什么呢[/quote] soga,如果你的问题可以抽象为分布式如何加锁的话,就上zk吧。 不过我还是觉得作为job服务器,从架构上说,这类服务器最好是无状态的,即你的加锁控制之类的逻辑不要放在job服务器上,可以作为总控节点存在,job服务器作无状态的集群专门跑job,这样你实现的复杂度要低很多。这样把控制逻辑揉进去,以后要改会很痛苦的
zapdos 2014-07-25
  • 打赏
  • 举报
回复
引用 3 楼 rumlee 的回复:
[quote=引用 2 楼 ygycomon 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 分布式锁用zk(zookeeper)可以做,详细的资料网上很多,LZ可以自己去看看 PS:你的问题没太看明白
另外我对你的架构不太理解,如果不同的服务器之间要加锁而只能串行的话,那么你用集群的意图何在?[/quote] 同意,我觉得也是的,如果这搞这么复杂,还用集群干嘛,这样搞下去也许最终性能比单服务器好不了多少呢?[/quote] 需要同步的只有2块低耗时的操作,况且哪个分布系统,是完全不需要锁的,不然用zookeeper来做什么呢
rumlee 2014-07-25
  • 打赏
  • 举报
回复
引用 2 楼 ygycomon 的回复:
[quote=引用 1 楼 ygycomon 的回复:] 分布式锁用zk(zookeeper)可以做,详细的资料网上很多,LZ可以自己去看看 PS:你的问题没太看明白
另外我对你的架构不太理解,如果不同的服务器之间要加锁而只能串行的话,那么你用集群的意图何在?[/quote] 同意,我觉得也是的,如果这搞这么复杂,还用集群干嘛,这样搞下去也许最终性能比单服务器好不了多少呢?
致知Fighting 2014-07-25
  • 打赏
  • 举报
回复
引用 1 楼 ygycomon 的回复:
分布式锁用zk(zookeeper)可以做,详细的资料网上很多,LZ可以自己去看看 PS:你的问题没太看明白
另外我对你的架构不太理解,如果不同的服务器之间要加锁而只能串行的话,那么你用集群的意图何在?
致知Fighting 2014-07-25
  • 打赏
  • 举报
回复
分布式锁用zk(zookeeper)可以做,详细的资料网上很多,LZ可以自己去看看 PS:你的问题没太看明白

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧