我正在编写一个Apps脚本(用于处理电子邮件,任务和日历事件),并希望将其部署为Web应用程序。
应用程序将在运行它的用户的上下文中运行。 该应用程序将被超过10k +用户使用,甚至可能更多。
在我将此分发给用户之前,我想知道Web应用程序可以拥有的并发命中数是否有限制?
如果运行Web应用程序脚本的用户在这种情况下帐户或我的(脚本所有者)限制适用,那么限制是否会被限制?我是否可以假设它可以扩展到足以满足10k +用户的需求,前提是它们没有达到这里描述的限制?有任何相关的想法或经验吗?
答案 0 :(得分:2)
如果您正在寻找这个问题的解决方案,那该怎么办?我使用fetchAll方法测量了Web 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
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名工人没有错误,而且当工人超过30时,错误也包含在返回的结果中。错误消息为Service invoked too many times in a short time: exec qps. Try Utilities.sleep(1000) between calls.
。这意味着,对于Web Apps,连接并发访问的工作人员的最大有效数量为29。如果工人的访问时间间隔超过1秒,则不会发生错误。
"Execute the app as:" : Me
,则Web Apps的脚本将作为所有者运行。因此使用了所有者的配额。"Execute the app as:" : User accessing the web app
,则Web Apps的脚本将作为每个用户运行。因此,使用每个用户的配额。如果这不是你想要的,我很抱歉。