Eventarc 轻松构建事件驱动:用60 多种Google Cloud 事件源触发 Cloud Run

图片

Google Cloud Run 全托管式无服务器容器服务,可以创建自动伸缩的,基于微服务的应用。但是,以前在解耦的微服务之间的事件通信时,不是很方便配置和维护。

现在,GCP 推出了 Eventarc,一个新的事件功能,可以从 60 多个 Google Cloud 事件来源触发 Cloud Run。Eventarc 可轻松构建事件驱动的应用,并负责事件提取、分发、安全管理和授权、可观察性和错误处理。

借助 Eventarc,可以对例如源自 Cloud Storage 对象存储、BigQuery 数仓、Firestore 数据库和 60 多种其他 Google Cloud 来源的事件触发响应程序,解决一些很有用的场景,例如视频分析、文件转换、新用户注册、应用程序监控等。 

常见场景

Eventarc 支持

  • 从60 多种 Google Cloud 来源接收事件(通过 Cloud Audit 日志)。

  • 通过发布到 Pub/Sub 实现从任意源接收事件,您的应用代码可以发送事件以在微服务之间通信 。

  •  以 CloudEvents 标准统一所有的消息,不论其来源,以确保一致的开发者体验。

  • 享受按需扩展,且无最低消费要求。

  • 可以从 Eventarc 的 API ,Google Cloud CLI 命令行或 Cloud Run 的 UI 中使用。

需要说明的是,除了 Eventarc 触发,Cloud Run 本身还内置了 HTTP(S) 调用入口,可以实现认证或非认证的请求直接调用,而不必须配置 API Gateway。Cloud Run 结合 Cloud Task 还可以实现异步队列调用。

Eventarc 为在 Cloud Run 上运行的应用启用了无限可能的用例,其中包括:

  • 使用 Cloud Storage事件触发数据处理管道 。

  • 每次 BigQuery 数仓的数据任务处理完成时,使用 BigQuery 事件触发 Cloud Run 启动下游处理。

  • 使用自定义事件源(发布到 Cloud Pub/Sub)在微服务之间通信,利用标准化的基础设施进行任意服务的异步调用。

Eventarc 示例:一个图像处理管道

Cloud Run 允许您在 Serverless 无服务器平台上运行应用。Eventarc 与 Cloud Run 集成,提供了标准化的基础服务来管理事件流,让开发专注于自己最擅长的事情:构建出色的应用。

让我们看看 Eventarc 的运行方式。我们的 DEMO 应用(详情见 github )构建了一个图像处理管道,将 Cloud Storage 事件连接到各种服务。当您将图像保存到输入的存储桶时,管道会过滤不合规的图像,并从图像中提取标签,调整图像大小,为它们添加水印。最后,输出的存储桶中有一个调整了大小、加了水印和标记的图像。

图片

管道中的服务互相是解耦的,并不直接相互通信,所以我们使用事件来“连接”它们。

图片

在这里,我们将重点介绍与事件相关的几个关键步骤:

关键点 1:为 Filter 服务创建触发器以接收来自 Cloud Storage 的事件(底层是通过 Cloud Audit Logs)。

图片

关键点二:编写 Filter 服务的代码以处理事件

在我们的示例中,需要从事件中提供的详细信息。它们通过请求的 HTTP 标头和正文传送,我们可以利用 Cloud Events SDK 和 Google Events 库 很容易就解包。我们将在本例中使用 C#。Cloud Run 也可以支持其他各种的开发语言,也都有相应的 SDK 和 Cloud Events 库。

使用 Cloud Events SDK 读取事件:


public async Task<CloudEvent> Read(HttpContext context)

{

     var cloudEvent = await context.Request.ReadCloudEventAsync();

     // ...

}

Parse the bucket and object name from the AuditLog in CloudEvent Data using Google Events library for C#:
//"protoPayload" : {"resourceName":"projects/_/buckets/events-atamel-images-input/objects/atamel.jpg}";
var logEntryData = CloudEventConverters.ConvertCloudEventData<LogEntryData>(cloudEvent);
var tokens = logEntryData.ProtoPayload.ResourceName.Split('/');
var bucket = tokens[3];
var name = tokens[5];

关键点 3:通过写入 Cloud Pub/Sub 向 Resizer 服务发出消息

通过写入由 Resizer 的触发器管理的 Pub/Sub 主题,过滤到 Resizer 服务的服务消息:

var topicName = new TopicName(_projectId, topicId);

var publisher = await PublisherClient.CreateAsync(topicName);

await publisher.PublishAsync(eventData);

Done!一个图像处理管道就这么简单,它使用事件将 Cloud Storage 存储桶连接到各种服务,并使用标准 Google Cloud 工具连接在一起!完整的说明和代码见 github Google Cloud Image Processing Pipeline - Eventarc,或参考更多 Eventarc 示例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值