如何仅在Google App Engine中处理特定请求路径的并发?

时间:2019-01-13 17:12:52

标签: java google-app-engine concurrency

是否有一种方法可以仅对具有动态路径参数的特定请求路径进行串行处理? 考虑路径-get / x,其中x可以是动态路径参数。 Google App Engine中有没有一种方法可以针对特定路径参数按顺序处理该特定路径的请求。如果针对路径get / alpha的两个请求一个接一个地出现,那么可以顺序处理这些请求吗?

1 个答案:

答案 0 :(得分:1)

不知道GAE如何处理调度/扩展和执行Java应用程序,您可以在多个级别上强制互斥或可序列化。

应用程序级别分布式锁定

一种方法是在HTTP应用程序级别强制执行排除。这将使您可以跨多个进程同步get/x

 @Override
  public void x(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

    // acquire lock from a lock service, a couple different options
    // to implement this
    DistributedLock lock = DistributedLock.Acquire()

    // do work because lock guarantees mutual exclusion


    // finally release the lock
    lock.Release()
  }

数据库级可序列化交易

如果要同步的操作是数据库操作,则可以将其推送到数据层。如果您的数据库支持SERIALIZABLE transactions,则可以确保没有两个并发操作同时修改同一数据。

流程级别单个实例

您可能能够实现的另一种方法是依靠GAE提供的担保。如果您将端点打包为单独的应用程序,并通过单个实例将其部署为自己的服务,则Google MAY (不确定它们可以为您提供什么保证:p),请确保不超过一次提供一个服务实例。这将是完全相同的代码库,但将是一个单独的配置/应用程序,仅公开您的端点。这可能被视为“黑客”。

这里棘手的部分是在自动缩放或部署期间,理想情况下将有一种方法来对其进行设置,以使两个实例永远不会同时启动。