豪翔天下

Change My World by Program

0%

Google Cloud 相关服务

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

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
    20
    const 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天后才能创建同名的队列

firebase/firestore

Google Drive

  • 无论是用google-drive-ocamlfuse还是rclone的方式挂载都需要在web端授权,不如就用rclone,主要是mac上面好安装点而且功能更多

Google Fonts

  • 谷歌字体服务
1
2
3
4
5
6
7
# 支持多种字体可以加多个family参数
https://fonts.googleapis.com/css2?family=Crimson+Pro&family=Literata

# 支持设置字体的weight
https://fonts.googleapis.com/css2?family=Crimson+Pro:wght@200..900
https://fonts.googleapis.com/css2?family=Crimson+Pro:ital,wght@1,200..900
https://fonts.googleapis.com/css2?family=Crimson+Pro:ital,wght@0,200..900;1,700

Google Tag Manager(GTM)

  • 谷歌代码管理系统
  • 如果要在前端代码里面集成多种跟踪或者网站分析代码,以前的话就得添加多个代码片段,有了google tag manager,只需要添加一次,在google后台配置即可添加多个

Logging

  • 谷歌的日志查询起来非常方便,就像是查询json字段一样

  • 日志最大为256kb,其实非常小,而且很难debug,出现的时候程序会直接crash。如果经常出现,可以尝试用object-sizeof来查看一下内存

  • 常用的查询语法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    jsonPayload.message =~ "regular expression pattern"	# 模糊查询
    jsonPayload.message !~ "regular expression pattern" # 模糊查询,不等于

    (jsonPayload.message = "abc" OR jsonPayload.message = "dd") # 或者or查询

    m = NULL_VALUE # 某个字段是否为null需要用这个特殊值,而不能直接用null

    # 查询数组内的字段,例如m=[{abc: 123}],可以直接当对象来查
    m.abc=123
    # 普通的数组,可以直接查询,例如m=["abc" , "def"]
    m = "abc"

    # 如果某个字段可能存在也可能不存在,可以这样查询
    operation.id:* # 如果该字段存在
    NOT operation.id:* # 如果该字段不存在

Map地图服务

  • vue推荐使用vue-google-autocomplete做地址的自动完成,只需要按照其README开通对应的API,然后在Credentials拿到API KEY即可,它主要是用的是AutocompletionService,该组件支持这样几个自定义搜索参数:
    • types: 默认值为address还支持geocode/establishment/address/(regions)/(cities)
    • country: 限制搜索国家
    • getAddressData会返回addressData(administrative_area_level_1, country, latitude, locality, longitude), placeResultData(address_components(包含行政区层级), place_id), id(这只是map组件的id)
    • 可以通过inputChange事件和update方法来修改自动填充的内容

GTM(Google Tag Manager)

  • 有了它就不用每次添加一个新的服务(tag)都去修改代码了,因此服务添加多了也不会影响网站的首次加载速度
  • 在新建了账号后,就可以选择Tags->New,例如可以添加Google Analytics 4

Colab

  • Variables不是环境变量,是tensorflow的变量,可以参考这里
  • Colab可以连接不同的文件服务: Github, Google Drive, Local File System, Google Sheets, Google Cloud Storage(GCS), AWS S3, Kaggle datasets, MySQL
    • Google Drive: 注意无法直接链接别人分享给你的文件夹,必须将分享的文件夹添加快捷方式(Add shortcut to drive)到你自己的文件夹才行

TroubleShooting

  • Error: Cannot find module ‘./middleware/cloudevent_to_background_event’: 给我的感觉就是新版的sdk发布后老的只要是重新安装的就不能用,必须升级到最新版才可以
  • Google Cloud Function出现错误Error: memory limit exceeded或者503 HTTP UNAVAILABLE: 可能真的是内存超了,默认内存是128MB
坚持原创技术分享,谢谢支持

欢迎关注我的其它发布渠道