gpt4 book ai didi

java - 集群、无状态 Web 应用程序 - 如何处理并发请求?

转载 作者:行者123 更新时间:2023-11-28 22:29:03 25 4
gpt4 key购买 nike

我们有一个 spring mvc web 应用程序,它将为许多用户的操作提供服务。我们的数据源是一个 mySQL 数据库。

Web 应用程序位于 tomcat 服务器集群上。

用户在与 Web 应用程序交互时没有 session 。

该协议(protocol)是用户和网络应用之间的简单 REST API。

如果另一个请求处理仍在进行中,我们希望忽略用户请求。例如:

user1 requests for action1...
action1 handling begins in webapp.
user1 requests for action1 again (before the handling is completed)
server declines the 2nd request since action1 handling is still in progress..
action1 handling completed.
result for action1 is returned to user1's client.
(now further actions is accepted by the web app)

如何实现这一点?如果我们使用 Web 应用程序的单个节点,我们可以在内存中简单地管理它,但由于我们使用集群并且没有共享内存\缓存,它不会工作。

我们考虑的另一种替代方法是在数据库中使用锁定,例如,在专用表(称为 userLock)中为 userID 创建一个约束,在每次处理之前,我们只需将其插入到该表中,然后通过从中删除条目来完成,现在如果发出非法请求,则会抛出约束异常并且未处理)

除了这种“信号量”行为还有其他替代方法吗?

最佳答案

Hazelcast提供可能对您有用的 java.util.concurrent.locks.Lock 的分布式实现。

    HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
Lock lock = hazelcastInstance.getLock( "myLock" );
lock.lock();
try {
// do something here
} finally {
lock.unlock();
}

this 中列出了更多选项回答。

关于java - 集群、无状态 Web 应用程序 - 如何处理并发请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com