我们的系统是使用微服务构建的,所有微服务都位于 API 网关后面。由于它们都是 REST API 服务,我很清楚使用 API 网关的好处和重点。现在,前端微服务(既具有 UI 又具有相应后端来处理内部通信的小组件)呢?是否存在代理每个微服务 HTTP 调用有害的情况?
例子
我们的微服务之一是支付提供商集成。由于处理支付有特定的规定,其中之一是需要将网络浏览器重定向到用户的银行页面以进行授权。由于这不可能以纯粹的后端方式进行,因此我们提供前端微服务- 一种本质上提供 HTML 的服务,您必须嵌套在 iframe 中,并且应该能够以 e2e 方式处理付款。下面是非常简化和剥离的示例。
假设您正在使用https://acme.com/order
并想要付款,其中嵌入了这样的代码段:
<iframe src="https://pay.acme.com?amount=42+USD
&returnUrl=https://acme.com/thankyou/[orderId]">
</iframe>
对于https://acme.com
. iframe 内部发生的事情会保留在那里。https://pay.acme.com
但是现在担心:收集信用卡详细信息,验证它们,将用户重定向到银行页面以输入 2FA 代码或任何需要的内容,等到付款被批准,最后将用户返回到returnUrl
付款顺序的正确路径最终确定(orderId
)。
现在,pay.acme.com frontend <-> pay.acme.com backend
沟通呢?是否可以让微服务与自己对话,或者更确切地说,所有的,甚至是对 API 消费者没有任何意义的内部通信,都必须通过 API 网关?这当然是可以做到的,并且仍然保持微服务解耦并且不知道 API 网关,但这比偏离始终执行约束并带来非常小的好处要昂贵得多,因为我们不使用任何高级速率限制或现在代理功能。