Google App Script Web App上的并发点击数量是否有任何限制

时间:2013-07-07 12:36:20

标签: google-apps-script

我正在编写一个Apps脚本(用于处理电子邮件,任务和日历事件),并希望将其部署为Web应用程序。

应用程序将在运行它的用户的上下文中运行。 该应用程序将被超过10k +用户使用,甚至可能更多。

在我将此分发给用户之前,我想知道Web应用程序可以拥有的并发命中数是否有限制?

如果运行Web应用程序脚本的用户在这种情况下帐户或我的(脚本所有者)限制适用,那么限制是否会被限制?我是否可以假设它可以扩展到足以满足10k +用户的需求,前提是它们没有达到这里描述的限制?有任何相关的想法或经验吗?

1 个答案:

答案 0 :(得分:2)

如果您正在寻找这个问题的解决方案,那该怎么办?我使用fetchAll方法测量了Web Apps的并发连接数,该方法可以进行异步处理。流程如下。

  1. 部署Web应用程序。
  2. 通过异步处理连接到Web Apps。那时,连接数量的工人数量会发生变化。
  3. 检索从Web Apps返回结果时的错误数。
  4. 此实验的示例脚本:

    客户端脚本:Google Apps脚本

    var workers = 10; // Number of workers
    var object = [];
    for (var i = 0; i < workers; i++) {
      object.push({
          "url": "https://script.google.com/macros/s/#####/exec",
          "method": "get",
          "muteHttpExceptions": true,
      });
    }
    var startTime = Date.now();
    var res = UrlFetchApp.fetchAll(object);
    var endTime = Date.now();
    var elapsedTime = (endTime - startTime) / 1000;
    var error = res.filter(function(e){return ~e.getContentText().indexOf("Error")});
    var result = [[workers, elapsedTime, (error.length > 0 ? error.length : 0)]]; // This is imported to Spreadsheet
    

    Web Apps端脚本:

    function doGet(e) {
      if (e.parameter.key == "ok") {
        var val = JSON.stringify({
          date: new Date().getTime().toString(),
        });
        Utilities.sleep(1000);
        return ContentService.createTextOutput(val).setMimeType(ContentService.MimeType.JSON);
      } else {
        return;
      }
    }
    

    结果:

    enter image description here

    此图显示了随着工作人员数量的增加而返回的错误数。从这个图中可以看出,30名工人没有错误,而且当工人超过30时,错误也包含在返回的结果中。错误消息为Service invoked too many times in a short time: exec qps. Try Utilities.sleep(1000) between calls.。这意味着,对于Web Apps,连接并发访问的工作人员的最大有效数量为29。如果工人的访问时间间隔超过1秒,则不会发生错误。

    • 如果将Web Apps部署为"Execute the app as:" : Me,则Web Apps的脚本将作为所有者运行。因此使用了所有者的配额。
    • 如果将Web Apps部署为"Execute the app as:" : User accessing the web app,则Web Apps的脚本将作为每个用户运行。因此,使用每个用户的配额。

    参考:

    如果这不是你想要的,我很抱歉。