api-gateway - 最小化/消除 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)
我们希望最小化或理想地消除这种初始延迟,例如保持函数的一个实例一直运行。最好的方法是什么?
解决方案
这在无服务器中被称为“冷启动”,正在努力减少初始启动时间。在此之前,可以使用健康检查来定期 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,您可以相应地调整健康检查时间。
推荐阅读
- android - Kotlin 中的“ClassInstance.[Someclass::class.java]”是什么意思?
- android - 如何完全结束或终止android中的活动并过渡到另一个活动?
- java - 如何将内容定位在itext 7中的指定位置
- java - 如何使流比当前流更简单
- linux - 卷曲:当我尝试将输出重定向到文件时出现问题
- caching - 对于 18k/s 吞吐量,Hazelcast 平均获取延迟 > 2 ms
- python - 从python中的列表中删除ndarray
- flutter - 如何在初始化 ChangeNotifierProvider 之前加载数据库?
- css - 正文类更改时如何更改 sass 导入文件
- mysql - 如何使用 if -else 基于条件通过 shell 脚本执行 MySQL 命令?