google-app-engine - 替代谷歌云功能
问题描述
我正在使用 Google Cloud Function 来运行 ETL jop:
- 从 JSON API 获取数据
- 使用另一个 API 丰富该数据的每一行
- 写入云存储
云调度程序 cron 作业每晚运行以触发云功能。我还可以手动运行管道来查询特定日期。云函数是用 Python 编写的。
这项工作总是运行接近 9 分钟,但它在几个月内运行良好。不幸的是,现在我达到了 Google Cloud Functions 的 9 分钟硬限制,我想知道我最好的选择是什么:
- 设置计算引擎
- 设置应用引擎
- 使用云功能将其并行化并节省时间。
有没有更好的选择?哪种 GCP 服务非常适合这项任务?你有什么最佳实践吗?我真的很喜欢云功能的简单性,但这当然需要权衡......
解决方案
我建议您使用Cloud Run。
- 今天的超时时间是 15 分钟,很快又是 4 次!这足以满足您的处理需求。
- 如果您的代码可以利用多个 CPU,则可以使用 Cloud Run 拥有 2 个 CPU。
- 但是,如果可以同时进行多个处理,Cloud Run 在同一个实例上最多可以处理 80 个并发请求,而 Cloud Function 只能处理一个。如果您在实例上执行高计算,最好避免并发。将 --concurrency 参数设置为 1 以获得与 Cloud Function 完全相同的行为。
我写了一篇文章,将一个简单的函数包装到 Cloud Run 服务中。几行代码,一个额外的导入(烧瓶),就是这样!为 python放置一个标准的 Dockerfile并部署!
使用新的Buildpack 功能,您甚至可以避免创建 Dockerfile!Buildpack 安装在 Cloud Shell 上,如果您使用 Cloud Build,如果您愿意,我有一个工作示例(请告诉我!)
推荐阅读
- c++ - onPushButtonClick 代码重定向到另一个 Widget/Class(mainWindow.cpp)
- java - 从资源文件夹中读取图像
- c++ - 在一行中迭代元素字符串
- unreal-engine4 - 如何在 UE4 蓝图中访问我的 Player Camera Manager(复制的(监听服务器和客户端))
- python - python - 如何在不丢失熊猫记录顺序的情况下连接连续行?
- vim - 如何在具有双扩展名的vim中运行autocmd?
- javascript - VS 代码和 Chrome 的调试器如何在谷歌页面中显示我当前的代码?
- swift - 如何将字典传递到另一个视图控制器中的另一个字典
- vhdl - 为什么不编译VHDL程序
- node.js - 加载配置时出错 - 您似乎正在使用本机 ECMAScript 模块配置文件 (Jest)