如何将Google Cloud Tasks作为独立服务从K8s微服务入队后台作业?
非GAE托管的K8s微服务结合Cloud Tasks+GAE Worker异步执行任务方案
完全可以实现你需要的使用场景,核心逻辑是将任务参数提交而非执行逻辑放在微服务侧,由Cloud Tasks作为中间调度层触发GAE侧的worker异步执行耗时任务,全程不会阻塞K8s部署的微服务运行。
具体实现步骤
- 预先在Google Cloud控制台创建Cloud Tasks队列,配置队列的重试策略、并发速率,并且绑定你的GAE Worker服务作为任务执行端,也可以在提交任务时动态指定需要调用的GAE Worker接口路径、请求方法。
- 在K8s部署的microservice1中集成Cloud Tasks官方SDK,当接口触发耗时任务时,不需要在微服务内部执行任务逻辑,只需要将任务执行所需的参数(比如数据处理的数据源路径、邮件发送的收件人、内容信息等)封装为任务请求,调用SDK的
create_task接口提交到提前创建好的Cloud Tasks队列即可。该提交操作是轻量的接口调用,毫秒级即可完成,提交后你的微服务接口可以直接返回响应,不会被耗时任务阻塞。 - Cloud Tasks队列会按照配置的调度规则,主动调用GAE Worker对应的HTTP接口,将你提交的任务参数传递给Worker,由GAE Worker实际执行耗时的数据处理、邮件发送等逻辑,执行结果可以由GAE Worker自行落库或者回调通知相关业务方,不需要回传给触发任务的K8s微服务。
示例逻辑适配说明
你之前看到的示例将任务结果存入payload只是演示逻辑,实际使用时你可以自定义payload内容,仅传递任务执行需要的参数即可,不需要提前包含执行结果。
鉴权配置要点
- K8s集群中的微服务需要绑定具备
roles/cloudtasks.enqueuer权限的Google Cloud服务账号,确保有权限向Cloud Tasks队列提交任务。 - 可以配置Cloud Tasks调用GAE Worker时自带OIDC身份凭证,你只需要在GAE Worker侧校验请求身份即可,避免未授权请求调用Worker接口。
内容的提问来源于stack exchange,提问作者Amirsalar
相关产品推荐
相关产品推荐

