谷歌最近在公共预览版中为 Cloud Tasks 添加了两项新功能,包括队列级路由配置和 BufferTask API。结合这两个新功能,无需Tasks 客户端库即可创建HTTP 任务并添加到队列中。
Cloud Tasks是Google Cloud Platform 上的一项完全托管服务,可管理许多任务到 App Engine 或任何任意 HTTP 端点的执行、分派和异步交付。例如,开发人员可以使用该服务将独立任务(例如 HTTP 请求)添加到队列中,这些任务将保留在那里,直到它们被 App Engine 应用程序或选择的任何其他 HTTP 端点异步执行。此外,该服务还提供多种弹性功能,例如任务重复数据删除、保证交付以及速率和重试控制。
但是,HTTP 任务有一个警告,因为 Cloud Tasks 客户端库需要将 HTTP 请求包装到任务中并将它们添加到队列中。这会在调用方和 Cloud Tasks 客户端库之间创建依赖关系。Google 开发人员倡导者Mete Atamel在 Google博客文章中写道:
创建任务的负担实际上应该在目标服务而不是调用者身上,因为目标服务是从队列中受益的服务。新的队列级路由配置和 BufferTask API 解决了这个问题,并提供了一种更简单的方法来创建任务。
借助队列级任务路由配置功能,开发人员可以为所有新任务和待处理任务更改整个队列的 HTTP 任务路由。这将使创建任务更易于管理,因为不需要在任务级别设置 HTTP 目标。此外,控制权转移到服务提供者,服务提供者可以更好地定义队列中所有任务的目标。例如,如果原始后端不可用,服务提供商可以将流量重定向到备用后端。
BufferTask API是 Cloud Tasks 中的另一个功能,它使开发人员能够生成 HTTP 任务,而无需输入任何任务规范,包括 HTTP URL、标头和授权。相反,他们可以向 Buffer API 发送标准 HTTP 请求,然后使用队列级路由配置中的默认设置将请求打包到 HTTP 任务中。
必须为队列设置目标 URI 配置才能使用 BufferTask API。这意味着必须启用队列级路由配置功能作为使用 BufferTask API 的先决条件。
当 InfoQ 询问开发人员使用这些特性有什么好处时,Atmel 是这样说的:
当您想要保护您的服务免受突发流量或负载的影响时,缓冲很有用。例如,如果您的服务每秒只能处理 5 个请求,那么每秒发送 100 个请求并使您的服务不堪重负是没有意义的。相反,您可以在您的服务前面添加一个队列,并以您的服务可接受的速率从队列中排出请求。
此外,他补充说:
有了这些功能,服务的调用者不再需要创建任务,而只需发送常规的 HTTP 请求,Cloud Tasks 队列通过排队、排空和速率限制来处理其余的事情。
最后,定价页面上提供了 Cloud Tasks 的定价详细信息。此外,GitHub Cloud Tasks 示例存储库和动手代码实验室中提供了有关新功能的更多详细信息和指南。