最近使用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作业) 处理耗时任务的更多相关文章

  1. 谷歌是如何改进 GKE、Cloud Run 的 gVisor 文件系统性能的?

    灵活的应用程序架构.CI/CD 管道和容器工作负载通常运行不受信任的代码,因此应该与敏感的基础设施隔离.一种常见的解决方案是部署纵深防御产品(如使用gVisor的GKE Sandbox)以通过额外的保 ...

  2. [Xamarin.Android] 結合Windows Azure與Google cloud message 來實現Push Notification (转帖)

    這一篇要討論如何使用Xamarin.Android 整合GCM以及Windows Azure來實作Android手機上的推播通知服務. 這篇文章比較著重概念的部分,在開始讀這篇之前,也可以先參考一下X ...

  3. Activating Google Cloud Storage

    先决条件 你需要下面的内容: 1.一个Google账户,比如来自Gmail.如果你没有,请在Google account signup site注册. 2.一个新的或已经存在的Google Devel ...

  4. google cloud storage products

    https://cloud.google.com/products/storage/ BigTable Cloud Bigtable 是 Google 面向大数据领域的 NoSQL 数据库服务.它也是 ...

  5. .Net程序员学用Oracle系列(8):触发器、作业、序列、连接

    1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2.使用序列 & 删除序列 4.连接 4.1.创建连接 4.2.使 ...

  6. [转]The Production Environment at Google (part 2)

    How the production environment at Google fits together for networking, monitoring and finishing with ...

  7. google云使用记录

    gcloud工具在win下安装十分不便,而且由于众所周知的原因,无法连接,我的解决办法就是安装另外一个vps(centos7系统),然后在那里安装gcloud工具,对google进行远程访问. 1.利 ...

  8. Oracle系列:触发器、作业、序列、连接

    .Net程序员学用Oracle系列(8):触发器.作业.序列.连接   1.触发器 2.作业 2.1.作业调度功能和应用 2.2.通过 DBMS_JOB 来调度作业 3.序列 3.1.创建序列 3.2 ...

  9. 整合Spring Cloud Stream Binder与GCP Pubsub进行消息发送与接收

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<整合Spring Cloud Stream Binder与RabbitMQ进行消息发送与接收& ...

  10. 基于Apache Hudi在Google云构建数据湖平台

    自从计算机出现以来,我们一直在尝试寻找计算机存储一些信息的方法,存储在计算机上的信息(也称为数据)有多种形式,数据变得如此重要,以至于信息现在已成为触手可及的商品.多年来数据以多种方式存储在计算机中, ...

随机推荐

  1. Delphi 多线程使用

    1. 定义线程类 type TMyThread = class(TThread) private { Private declarations } fPos:Integer; // 变量 protec ...

  2. delphi 让执行程序不在任务栏显示

    Application.MainFormOnTaskbar := False; procedure TForm1.FormShow(Sender: TObject); begin ShowWindow ...

  3. 什么是 CSS 设计模式

    这是转载的,先收藏到我的博客园. 什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的 ...

  4. VsCode写Markdown使用snippet

      文件->首选项->用户片段   输入markdown   输入代码片段 Ctrl+P,输入settings.json   加入下面个这个选项 "[markdown]" ...

  5. JAVA---在idea上实现简易的学生管理系统

    登录需求 代码实现 APP package ITswj.test4_学生管理系统; import java.util.ArrayList; import java.util.Random; impor ...

  6. Robot Framework原生库的编辑与应用

    RF有一些操作指令不存在,需要自己添加方法,比如selenium里有click_and_hold指令(鼠标保持点击状态)而RF内没有.所以需要在库文件里加入这个方法 C:\Python27\Lib\s ...

  7. kettle介绍-Step之Write to log

    Write to log写日志介绍 写日志步骤是将输入步骤的信息打印在日志窗口,供用户直接查看 Step name:步骤的名称,在单一转换中,名称必须唯一. Log level:设置日志的显示级别. ...

  8. 定时任务稳定性解决方案-healthchecks监控系统

    背景 目前crontab出现问题后无感知,发现问题不及时,几乎是靠业务部门或用户反馈的方式,研发部门再排查的方式,处理问题.发现问题相对滞后,由此可见需要进一步优化crontab的稳定性,降故障通知前 ...

  9. 在AI大爆发的背景下,企业管理软件有什么冲击

    今天与同行开会提到在AI大爆发的背景下,未来企业管理软件究竟有什么冲击? 我和同事对此问题进行了探讨,一些拙见,与大家分享.先直接说观点:在未来的5到10年,制造业的管理软件市场将几乎消失.下面我来聊 ...

  10. grafana最新任意文件读取

    一.Grafana简介 Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知.它主要有以下六大特点: 1.展示方式:快速灵活的客户端图表,面板插 ...