确保每个用户在GAE / J中的请求处理序列化

| Google Appengine的默认模式是每个实例以单线程模式运行。如果需要,它们会通过生成新的JVM实例来处理并发请求。 不过,新的开关允许appengine在同一个实例上并行处理多个请求。 迄今为止,为了确保同一用户的请求之间的线程安全,我在常规托管的Java Web应用程序中所做的就是在http会话(或会话中存储的值)上进行同步。 Spring也会这样做(使用
synchronizeOnSession
标志)。 这在GAE中是不可能的,因为HttpSession(及其存储的所有变量)总是在每个http请求中都是新的。也就是说,哈希码始终是不同的。因此,对此进行同步完全无效。但是,即使有可能,appengine也不保证同一实例将处理来自同一用户的两个请求(类似于粘性会话)。 appengine的新标志警告:   如果您想使用并发   请求,您的应用程序代码需求   使用适当的线程同步   在启用之前。 因此,如何确保我的应用程序对于来自同一用户的操作而言是线程安全的?我最关心的是用户可以对其HTTP会话中存在的数据执行的操作。我显然只关心在同一实例中同步同一用户的请求。 谢谢     
已邀请:
        一些注意事项: 尝试在客户端保持应用程序状态,即使用javascript处理它。在那里,您可以防止用户一次或无序发送多个请求。 由于GAE可以在不同的服务器上并行运行多个实例,因此您在会话上进行同步的工作大部分时间都是有效的,但并不能保证始终都有效。 我想您想做的是防止用户将其数据置于不一致状态(通过无序执行操作)。最终,GAE中唯一同步的点是数据存储区事务。使用它们可以使数据保持一致状态。     

要回复问题请先登录注册