我们的系统是使用微服务构建的,所有微服务都位于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网关,但这比偏离总是做约束并带来非常小的好处要花得多,因为我们不要# 39;目前使用任何高级限速或代理功能。
答案 0 :(得分:1)
有简单的方法 - 拥有UI网关。代替API调用的网关将路由和代理资产请求调用(静态文件服务)。
如果实体属于相同的有界上下文(pay.acme.com frontend <-> pay.acme.com backend
),那么它们肯定应该作为单个后端微服务存在,它服务于以下任何一个:
ws
连接)这种微服务是常规的微服务,API(如果存在)应该可以通过API网关访问,UI应该通过UI代理/网关代理。
希望有所帮助。