【问题标题】:Porting from GAE to TomCat or another servlet server从 GAE 移植到 TomCat 或另一个 servlet 服务器
【发布时间】:2010-04-01 07:43:00
【问题描述】:

我对 GAE 不满意,因为 - 不能有全局变量和“同步”关键字。相反,必须捕获一个基本的 DB 事务异常并在一个 while 循环中重试——这将占用我所有的空闲 CPU 时间,并且在我到达 google 的 qouata 时开始花费我的钱。

  1. 在 tomcat 的 doPost() 中使用同步是否安全? (我想只要所有 servlet 都在 1 个 VM 上运行就可以了吗?)。如果不是在所有 tomcat 配置中,我如何配置 tomcat 以使其安全?

如何将 GAE 应用程序转换为我自己的 tomcat 服务器? - 如何在tomcat上安装DataNucleus Access Platform?

最好的问候

【问题讨论】:

  • 这个要求没有意义。你的问题出在其他地方。请详细说明问题。
  • 啊,我已经看到了,您发布了几个关于该主题的类似/相关问题,例如在这里:stackoverflow.com/questions/2556644/… 发布的答案非常好。再想一想。

标签: google-app-engine tomcat servlets


【解决方案1】:

App Engine 本质上是一个分布式系统。您不能使用同步原语,因为您的应用程序将在多个 VM 和多台机器上运行。依靠在单个 VM 上运行会对应用的可扩展性施加非常严格的限制。

为什么要这样做?几乎可以肯定有一种方法可以在不锁定的情况下实现它。

【讨论】:

  • 感谢您的提问。假设用户要求最合适的免费资源。我们需要同步它,这样两个用户就不会被分配相同的资源。我知道我们可以使用数据库事务,如果抛出异常,那么我们会在循环中重试,但是这个解决方案会浪费 CPU 和数据库。这就像不使用 sleep 命令,而是无所事事地循环使用 CPU 时间......
  • 假设寻找“最合适”的算法很昂贵——那么问题就更具体了
  • 正如我已经说过的,只有在发生冲突时才会“循环”。绝大多数情况下,不会有争用,所以它会在第一次执行。正如其他人所说,乐观并发是一种常见且有效的方法,当争用较少时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多