Cloud Run Job(google作业) 处理耗时任务
最近使用google cloud的一些服务处理一些事,使用了Cloud Scheduler定时发送http请求大Cloud Function,让Cloud Function定时处理我的事。这个时候会有一个问题:超时。
我的任务比较耗时,任务处理完了返回ok,Cloud Scheduler可能会等不到,认为超时,会重试请求。如果Cloud Function先返回ok,然后再异步处理任务,但是查了下文档,Cloud Function在返回ok后,会在一定时间内自动销毁,也就是异步处理的任务可能还没执行完,函数就被销毁了,导致任务只执行了一部分。
这里将耗时任务调整为了:Cloud Scheduler定时 + Cloud Run Job。
一:本地环境
1:准备:需要一个google cloud 项目。本地安装个Google Cloud CLI,下载地址:https://cloud.google.com/sdk?hl=zh-CN。
2:文件准备,在一个文件夹下面建立3个文件:index.js,Dockerfile,.dockerignore,3个文件位于同一文件夹下。
/您的项目文件夹
├── Dockerfile
└── index.js
└── .dockerignore
index.js:
async function fetchFirestoreData() {
console.log("----test-api-test-----");
}
async function main() {
await fetchFirestoreData();
}
main().catch(console.error);
Dockerfile:
# 使用 Node.js 20 官方镜像
FROM node:20
# 更新 npm 到最新版本
# RUN npm install -g npm@latest # 设置工作目录
WORKDIR /usr/src/app # 复制 package.json 和 package-lock.json 文件
COPY package*.json ./ # 安装项目依赖
RUN npm install # 复制项目文件
COPY . . # 启动脚本
CMD ["node", "index.js"]
.dockerignore (如果这个文件夹下有不想部署的文件,可以在这里添加)
# 忽略 node_modules 文件夹
node_modules/ # 忽略不需要的 JS 文件
test.js # 忽略操作系统生成的文件
.DS_Store
Thumbs.db # 忽略环境变量配置文件
.env # 忽略本地构建文件夹
dist/
build/
或者添加 .gcloudignore --忽略一些提交的文件,格式跟上面一样
3:(可选)如果有第3方包:在shell或者cmd中,cd到该文件夹下:
# 初始化 package.json 文件
npm init -y
# 安装 @google-cloud/tasks 和 @google-cloud/bigquery 这里用这两个举例
npm install @google-cloud/tasks @google-cloud/bigquery
二:配置gcloud
1: 需要下载sdk到本地,安装:下载地址:https://cloud.google.com/sdk?hl=zh-CN。
打开Google Cloud SDK Shell:
初始化:
gcloud init
然后按照出现的提示,登录,选择你的google 项目,可以选择位置,比如:us-central1
2:远程配置,在浏览器中登录到google cloud 后。在菜单选择 Artifact Registry,新建一个代码库:


三:上传docker
打开本地Google Cloud SDK Shell:cd 到你的文件夹下,
//配置docker,REGION是你刚刚选的代码库的区域
gcloud auth configure-docker REGION-docker.pkg.dev
//比如us-central1区域
gcloud auth configure-docker us-central1-docker.pkg.dev
//提交docker到远程(不用复制,根据你的项目设置)
gcloud builds submit --tag us-central1-docker.pkg.dev/cloud-tes/jobs-docker-repo/taskjobs
//us-central1-docker.pkg.dev: 是远程区域
//cloud-tes: 是google 项目id
//jobs-docker-repo:是刚刚建的代码库名字
//taskjobs: 远程docker名字 //如果上传的项目变化,通过这个设置切换到新项目:新项目Id: cloud-tes(测试服上传成功后,需要往正式服传时,也可以通过这个切换项目id)
gcloud config set project cloud-tes
然后取google cloud后台看看上传的映像:

四:创建作业和定时:
1:创建 Cloud Run Job: 在google cloud后台创建一个job,如图:



2:创建定时任务。创建job完成后,点开刚刚创建的job,选择-》触发器:




五:完成:定时执行耗时任务的功能就ok了。这里的:Cloud Scheduler定时是不需要 Cloud Run Job返回的, Job执行完成后会自动关闭。

Cloud Run Job(google作业) 处理耗时任务的更多相关文章
- 谷歌是如何改进 GKE、Cloud Run 的 gVisor 文件系统性能的?
灵活的应用程序架构.CI/CD 管道和容器工作负载通常运行不受信任的代码,因此应该与敏感的基础设施隔离.一种常见的解决方案是部署纵深防御产品(如使用gVisor的GKE Sandbox)以通过额外的保 ...
- [Xamarin.Android] 結合Windows Azure與Google cloud message 來實現Push Notification (转帖)
這一篇要討論如何使用Xamarin.Android 整合GCM以及Windows Azure來實作Android手機上的推播通知服務. 這篇文章比較著重概念的部分,在開始讀這篇之前,也可以先參考一下X ...
- Activating Google Cloud Storage
先决条件 你需要下面的内容: 1.一个Google账户,比如来自Gmail.如果你没有,请在Google account signup site注册. 2.一个新的或已经存在的Google Devel ...
- google cloud storage products
https://cloud.google.com/products/storage/ BigTable Cloud Bigtable 是 Google 面向大数据领域的 NoSQL 数据库服务.它也是 ...
- .Net程序员学用Oracle系列(8):触发器、作业、序列、连接
1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2.使用序列 & 删除序列 4.连接 4.1.创建连接 4.2.使 ...
- [转]The Production Environment at Google (part 2)
How the production environment at Google fits together for networking, monitoring and finishing with ...
- google云使用记录
gcloud工具在win下安装十分不便,而且由于众所周知的原因,无法连接,我的解决办法就是安装另外一个vps(centos7系统),然后在那里安装gcloud工具,对google进行远程访问. 1.利 ...
- Oracle系列:触发器、作业、序列、连接
.Net程序员学用Oracle系列(8):触发器.作业.序列.连接 1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2 ...
- 整合Spring Cloud Stream Binder与GCP Pubsub进行消息发送与接收
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<整合Spring Cloud Stream Binder与RabbitMQ进行消息发送与接收& ...
- 基于Apache Hudi在Google云构建数据湖平台
自从计算机出现以来,我们一直在尝试寻找计算机存储一些信息的方法,存储在计算机上的信息(也称为数据)有多种形式,数据变得如此重要,以至于信息现在已成为触手可及的商品.多年来数据以多种方式存储在计算机中, ...
随机推荐
- [每日算法 - 华为机试] leetcode20 :有效的括号 「栈」
入口 力扣https://leetcode.cn/problems/valid-parentheses/submissions/ 题目描述 给定一个只包括 '(',')','{','}','[','] ...
- 【Java】各种代码块的执行顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行. 执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public ...
- 【Linux】3.6 组管理和权限管理
组管理和权限管理 1. Linux组基本介绍 Linux中每个用户属于一个组,不能独立于组以外.所以在Linux中每个文件存在组的概念: 所有者 所在组 其他组 改变用户所在组 2. 文件/目录所有者 ...
- 【Java】Java提取${}占位符并组装对应值
目录 Java提取${}占位符并组装对应值 零.起因 壹.想法 贰.实现 叁.总结 肆.参考文档 Java提取${}占位符并组装对应值 实现了一个${}装配工~ 零.起因 最近写个JavaWeb项目, ...
- unigui的部署【9】
1.UniGUIServerModule的事件: procedure TUniServerModule.UniGUIServerModuleBeforeInit(Sender: TObject);be ...
- nodejs终端字符样式和进度条
Nodejs为终端字符增加样式 只有黑白的色调对于比较复杂的命令行程序来说就显得太单调了,我们可以为命令行程序增加样式使得程序更加友好! 安装package: npm install -S chalk ...
- HTB打靶记录-TheFrizz
信息收集 nmap -sV -sC -O 10.10.11.60 Nmap scan report for 10.10.11.60 Host is up (0.63s latency). Not sh ...
- JDK1.8的ConcurrentHashMap的put方法源码
一.JDK1.8的ConcurrentHashMap的put方法源码 ConcurrentHashMap 是 Java 并发包(java.util.concurrent)中的一个高性能线程安全哈希表实 ...
- eolinker校验规则之 Json Path定位:返回值内有多项同类参数,检验其中一个参数值
比如创建商品后,查询商品是否生成,执行完创建商品接口后就需要再执行查询商品接口. 查询接口查询出来的数据可能包括所有商品数据或者有同名商品数据,所有整个返回结果内可能包含多个同名不同商品id的数据 往 ...
- [not]exists和[not]in的区别
前言:近期在处理业务实际问题时发现使用in导致查询速度非常慢,于是查阅资料后发现使用exists能极大缩短查询时间,于是便将此经历记录下来. 数据源: grade表 stu_info表 exists与 ...