0

我们使用 FN 函数进行 OCI API 网关授权 ( https://docs.cloud.oracle.com/en-us/iaas/Content/APIGateway/Tasks/apigatewayusingauthorizerfunction.htm )。我们发现,当函数容器的实例启动时,当一段时间没有触发身份验证过程时,它会出现轻微的延迟,这是预期的。正如 Oracle 文档所述:

当函数执行完毕并且空闲一段时间后,Docker 容器被移除。如果在删除容器之前 Oracle Functions 收到对同一函数的另一个调用,则第二个请求将路由到同一个正在运行的容器。如果 Oracle Functions 收到对当前正在运行的容器内执行的函数的调用,Oracle Functions 会水平扩展以服务传入请求并启动第二个 Docker 容器。https://docs.cloud.oracle.com/en-us/iaas/Content/Functions/Concepts/functionshowitworks.htm

我们希望最小化或理想地消除这种初始延迟,例如保持函数的一个实例一直运行。最好的方法是什么?

4

2 回答 2

2

这在无服务器中被称为“冷启动”,正在努力减少初始启动时间。在此之前,可以使用健康检查来定期 ping 函数。

本质上是在函数中创建一个案例,其中 URL 以 /status 或 /healthcheck 之类的结尾。在这种情况下返回 response.Response(ctx,response_data=json.dumps({"status": "OK"}), headers={"Content-Type": "application/json"})

在 API Gateway 中,创建一个路由,确保为调用该函数的 /status(或 /healthcheck)启用匿名。

然后设置运行状况检查以使用 /status 或 /healthcheck 端点定期调用 API。这既可以保持该功能处于活动状态,也可以监控运行状况。您的案例可以执行任何需要的验证,而不仅仅是返回 OK 响应。

要记住的另一件事是 API Gateway 将缓存响应,因此根据您选择的 TTL,您可以相应地调整健康检查时间。

于 2020-10-28T01:15:36.203 回答
2

我怀疑您是否可以在不重复调用 FN Container 的情况下保持热状态。愚蠢的选择之一可能是在每个“睡眠”间隔后继续调用它;但这必须与相关的 FN 调用成本/月进行权衡。

其他选项可以基于实际操作运行多长时间。例如,这可以分为由两个 FN 表示的两个操作。一个 FN 可以调用另一个 FN;因此,如果您的预期任务可以实现,您应该能够依次调用它们。

于 2020-10-27T15:21:41.257 回答