首页 > 解决方案 > 最小化/消除 OCI API GW 授权的初始 FN 启动延迟

问题描述

我们使用 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

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

标签: api-gatewayoracle-cloud-infrastructurefn

解决方案


这在无服务器中被称为“冷启动”,正在努力减少初始启动时间。在此之前,可以使用健康检查来定期 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,您可以相应地调整健康检查时间。


推荐阅读