首页 > 解决方案 > 在 Google Cloud Functions 之间进行内部通信?

问题描述

我们创建了一个 Google Cloud Function,它本质上是一个内部 API。有没有什么方法可以让其他内部 Google Cloud Functions 与 API 函数对话,而无需暴露该函数的 HTTP 端点?

我们已经查看了 PubSub,但据我们所见,您可以发送请求(按说!)但您无法收到响应。

理想情况下,由于额外的安全后果,我们不想暴露 HTTP 端点,并且我们正在尝试遵循微服务方法,因此每个函数都是它自己的实体。

标签: google-cloud-platformgoogle-cloud-functions

解决方案


我同情您的微服务方法并试图保持您的服务独立。您可以在不向 HTTP 开放所有函数的情况下完成此操作。Chris Richardson 在他的优秀网站microservices.io上描述了一个类似的案例:

您已应用 Database per Service 模式。每个服务都有自己的数据库。然而,一些业务事务跨越多个服务,因此您需要一种机制来确保跨服务的数据一致性。例如,假设您正在建立一个客户有信用额度的电子商务商店。应用程序必须确保新订单不会超过客户的信用额度。由于订单和客户位于不同的数据库中,因此应用程序不能简单地使用本地 ACID 事务。

然后他继续说:

使用这种方法的电子商务应用程序将使用基于编排的 saga 创建订单,该 saga 由以下步骤组成:

  1. Order Service 创建一个处于挂起状态的 Order 并发布一个 OrderCreated 事件。
  2. 客户服务收到事件尝试为该订单保留信用。它发布 Credit Reserved 事件或 CreditLimitExceeded 事件。
  3. 订单服务接收事件并将订单状态更改为已批准或已取消。

基本上,第一个微服务不是直接调用同步返回值的函数,而是向第二个微服务发送异步“请求事件”,第二个微服务发出第一个服务获取的“响应事件”。您将使用Cloud PubSub发送和接收消息。

您可以在他的网站上的Saga 模式下阅读更多相关信息。


推荐阅读