【问题标题】:Distributed Lock on GAE/JGAE/J 上的分布式锁
【发布时间】:2016-10-30 06:32:07
【问题描述】:

我正在 GAE/J 上开发一个应用程序,并研究如何在其上实现分布式锁。

我的要求和this question.完全一样 但是这个问题大约有7年的历史了,所以我找不到答案是否仍然有效。我也找不到这些答案适用于 GAE/J。

如何在 GAE/J 上实现分布式锁?

【问题讨论】:

    标签: java google-app-engine distributed-lock


    【解决方案1】:

    您可以在数据存储上进行事务,这样您就可以在其上实现分布式锁。 https://cloud.google.com/appengine/docs/java/datastore/transactions

    【讨论】:

    • 感谢您的回复。我的要求之一是“如果锁持有人死亡,它将在 X 秒后自动释放”。数据存储是否满足此要求?
    • 您在数据存储中放置一个值以使用事务获取锁,在您设置锁的事务之后。您必须使用 finally 或其他方法来确保释放锁。您可以有一个进程来检查锁并释放它以评估时间(值可以是时间戳)。但没有什么是开箱即用的。
    • 当进程死亡时,finally 不会被执行。并且不能使用时间戳方法,因为我们无法保证我们的交易需要多长时间。
    • 为什么你的进程死了?因为异常还是因为它被外部事件杀死?事务用于获取锁并读取它,进行“原子”操作,而不是在其中进行处理。
    • GAE 中的 memcache 不安全:“Memcache 可用于其他临时值。但是,在考虑是否将值仅存储在 memcache 中而不由其他持久存储支持时,请确保您的当值突然不可用时,应用程序的行为可以接受”
    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多