Google App Script Web App 上的并发命中数或同时执行数是不是有任何限制

Posted

技术标签:

【中文标题】Google App Script Web App 上的并发命中数或同时执行数是不是有任何限制【英文标题】:Is there any limit on number of concurrent hits or simultaneous executions on Google App Script Web AppGoogle App Script Web App 上的并发命中数或同时执行数是否有任何限制 【发布时间】:2013-07-04 22:23:17 【问题描述】:

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

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

在将其分发给用户之前,我想知道 Web 应用的并发点击数是否有限制?

如果运行网络应用程序脚本的用户在这种情况下会考虑限制,或者我的(脚本所有者)限制会适用吗?如果未达到此处描述的限制,我是否可以假设它可以扩展足以满足 10k+ 用户的需求?有什么相关的想法或经验吗?

【问题讨论】:

在这种情况下,如果运行 Web 应用脚本的用户会考虑限制,或者我的(脚本所有者)限制是否适用?如果未达到here 所述的限制,我是否可以假设它可以扩展到足以满足 10k+ 用户的需求? 我也在努力解决这个问题。自从提出这个问题以来,许多事情都发生了变化,现在文档中对每个应用程序的同时执行有一个特定的限制。但我还是有些疑惑。对于匿名运行或作为脚本所有者运行的 Web 应用程序,很明显将在 30 个并发调用时达到限制。但是,当 Web 应用程序以用户访问应用程序的身份运行时会发生这种情况吗? 【参考方案1】:

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

    部署 Web 应用程序。 通过异步处理连接到 Web 应用程序。那时,连接数的工人数发生了变化。 从 Web 应用返回结果时检索错误数。

本实验的示例脚本:

客户端脚本: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?key=ok",
      "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 应用端脚本:

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;
  

结果:

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

如果 Web 应用程序部署为 "Execute the app as:" : Me,则 Web 应用程序的脚本以所有者身份运行。所以使用了owner的配额。 如果 Web 应用程序部署为 "Execute the app as:" : User accessing the web app,则 Web 应用程序的脚本将作为每个用户运行。所以使用每个用户的配额。

参考:

fetchAll method

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

【讨论】:

根据您的实验,似乎可以支持 29 个并发用户。这使得任何必须支持超过 29 个并发请求的情况都毫无疑问,对吧?只是好奇,是否可以在 GAS Web 应用程序前面放置某种类型的负载均衡器?让它支持更多的并发调用?我看过你在 GAS 上的工作。值得称道。 @Malay Thakershi 谢谢你的评论。不幸的是,在现阶段,我对你的三个问题没有明确的答案。这是因为我的技术不好。我对此深表歉意。当我能得到你的 3 个问题的明确答案时,我想回复它。我再次为我的拙劣技能深表歉意。 @Tanaiike,我的另一个问题是 30 个并发请求是每个 Apps 脚本端点还是整个帐户? @Malay Thakershi 我认为是前者。 @Boris Baublys 感谢您的评论。从您的评论中,我注意到我抄错了。当我用### 替换https://script.google.com/macros/s/deployment id/exec?key=okdeployment id 时,我用https://script.google.com/macros/s/#####/exec 覆盖了它。所以我可以更新我的示例脚本。谢谢。

以上是关于Google App Script Web App 上的并发命中数或同时执行数是不是有任何限制的主要内容,如果未能解决你的问题,请参考以下文章

Google App Script Web App 上的并发命中数或同时执行数是不是有任何限制

如何向 Google Apps Script Web App 发送有效的 HTTP 请求?

将cURL与PHP文件中的Google Apps Script Web App一起使用时遇到问题

php [appscript api] google app script api

如何从 Google OAuth 2.0 Playground 运行 Google App Script 功能 |调用者没有权限

在Google App Script中使用导入的模块