google-cloud-platform - 在 Google Cloud Functions 之间进行内部通信?
问题描述
我们创建了一个 Google Cloud Function,它本质上是一个内部 API。有没有什么方法可以让其他内部 Google Cloud Functions 与 API 函数对话,而无需暴露该函数的 HTTP 端点?
我们已经查看了 PubSub,但据我们所见,您可以发送请求(按说!)但您无法收到响应。
理想情况下,由于额外的安全后果,我们不想暴露 HTTP 端点,并且我们正在尝试遵循微服务方法,因此每个函数都是它自己的实体。
解决方案
我同情您的微服务方法并试图保持您的服务独立。您可以在不向 HTTP 开放所有函数的情况下完成此操作。Chris Richardson 在他的优秀网站microservices.io上描述了一个类似的案例:
您已应用 Database per Service 模式。每个服务都有自己的数据库。然而,一些业务事务跨越多个服务,因此您需要一种机制来确保跨服务的数据一致性。例如,假设您正在建立一个客户有信用额度的电子商务商店。应用程序必须确保新订单不会超过客户的信用额度。由于订单和客户位于不同的数据库中,因此应用程序不能简单地使用本地 ACID 事务。
然后他继续说:
使用这种方法的电子商务应用程序将使用基于编排的 saga 创建订单,该 saga 由以下步骤组成:
- Order Service 创建一个处于挂起状态的 Order 并发布一个 OrderCreated 事件。
- 客户服务收到事件尝试为该订单保留信用。它发布 Credit Reserved 事件或 CreditLimitExceeded 事件。
- 订单服务接收事件并将订单状态更改为已批准或已取消。
基本上,第一个微服务不是直接调用同步返回值的函数,而是向第二个微服务发送异步“请求事件”,第二个微服务发出第一个服务获取的“响应事件”。您将使用Cloud PubSub发送和接收消息。
您可以在他的网站上的Saga 模式下阅读更多相关信息。
推荐阅读
- sql - 在 SQL select 语句中使用多个 where 条件
- python - subprocess.call() 和 os.system() 之间的速度差异
- prisma - Prisma executeRaw 批处理操作保存错误浮点值
- python - 在pygame中绘制非像素化圆圈
- php - 在php中通过空格读取字符串
- python - 调试嵌入式 pybind11 python 解释器
- javascript - 创建一个由拾取的对象属性组成的对象:
- angular - 无法使用角度订阅转移价值
- excel - 用vba排序
- c# - 如何在asp.net core 3.1中从open-api doc做深度对象的模型绑定