- Install the Google Cloud CLI: google cloud cli工具安装方式
Cloud Function
- 不同配置的价格表
- 最大超时时间只能设置为540s=9min,实在不行可以用
Cloud Tasks
队列,或者在时间快完的时候直接再调用一下url参数组织一下 - 其他限制: 常用的会有未压缩HTTP请求或响应的大小为10 MB
- 为了减少函数的执行时间,我们需要尽量提升程序的启动时间,默认都是冷启动的,但是如果间隔时间很小,谷歌可能并没有销毁,这个间隔是谷歌自己控制的,并且是不一定的,所以你会发现如果启动时间长的函数,有时候处理得快有时候处理得慢。当然,谷歌也提供付费服务保证至少有几个实例在运行,如果不想用,还可以自己弄个定时任务去定时请求一次,不过当然那也算运行时间呀。
1 | req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.headers['fastly-client-ip'] // 可以通过这种方式获取客户端IP地址 |
Cloud Scheduler
- 定时任务
- 配置说明:
- Max retry attempts: 失败重试的次数
- Max retry duration: 失败后的最长重试时间,看次数和时间哪个先到就停止
- Min/Max backoff duration: 两次重复间隔最短/最长时间
- Attempt deadline config:验证一个请求是否成功的最长等待时间,如果超过这个时间会显示失败,并得到一个UNKNOWN的错误
- 居然遇到了trigger两次的bug,就一个任务在一个时间点居然trigger了两次,别人也遇到过https://stackoverflow.com/questions/71594174/cloud-scheduler-invokes-cloud-function-more-than-once-during-schedule,可能不能用http来trigger cloud function了
Cloud Tasks
任务队列,官方文档用起来非常简单实用,可用于多消费者,或者减少第三方接口的并发速率限制
速率控制(队列使用令牌桶来控制任务执行速率,每个命令的队列都有一个用于存储令牌的存储分区,应用每执行一个任务,就会从桶中移除一个令牌,会按照max_dispatches_per_second速率不断向令牌桶中补充填充新令牌)
- Max dispatches: 每秒钟任务分配的速率,每秒将任务分配给多少个worker
- Max concurrent dispatches: 并发执行的数量,同时运行的任务的最大数量
重试控制:
- MAX ATTEMPTS:任务可以尝试的最大次数,包括第一次尝试,-1表示不限制?,但是不能设置为0,所以如果说只想执行一次,应该是设置为1
- MAX INTERVAL:重试尝试之间的最短等待时间
一些限制
- 任务大小上限:100KB(超过会报错task size too large)
- 队列执行速率:每个队列每秒500次任务调度
- 人物的最大倒计时/ETA:30天
- 可以批量添加的最大任务数:100个
- 在一项事务中可以添加的最大任务数:5个
- 默认的最大任务队列数:100个
官方文档给的例子是发送一个字符串,但是如果要发送json格式的payload,可以这样做:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20const task = {
httpRequest: {
httpMethod: 'POST',
url: `${config.baseUrl}?${searchParams.toString()}`,
body: Buffer.from(JSON.stringify(params)).toString('base64'),
headers: {
'Content-Type': 'application/json',
},
},
};
const request = { parent: this.queue, task };
await client.createTask(request);
// 在接口这边不用做其他处理,就像平常的json请求那样即可
app.post('/endpoint', (req, res) => {
const {foo} = req.body;
console.log(foo); // "bar"
res.send('ok');
});The queue cannot be created because a queue with this name existed too recently: 队列删除7天后才能创建同名的队列