首页
Preview

为什么基于HTTP的微服务是一个不好的想法?

让我们来聊一聊微服务的主要基本元素,即将有界上下文隔离到每个服务中。

让我们看看某公司的新订单,以及HTTP后端的工作方式。

首先需要下单,然后发送请求以获取订单状态。如果我们收到响应,就进入处理阶段,最后交付订单。

问题

由于HTTP请求是按照序列方法工作的,如果一个阶段没有响应,整个请求将被挂起,直到处理完成。如果收到100个请求而处理阶段离线,整个系统将崩溃或卡住,这就是级联故障。这就是为什么基于HTTP的微服务是个坏主意。

让我们看一个另外的例子,

使用HTTP作为后端时,第一个响应需要10ms才能响应,第二个需要100ms才能响应,第三个需要30ms,但是第二个需要100ms,所以第三个必须等待第二个完成。这就是使用HTTP作为微服务后端的问题。

让我们来看一下解决方案。

解决方案

我们可以使用单独的消息框架,如kafka

以第一个例子为例,当订单请求到达时,它将推送到kafka,然后所有其他部分(获取订单、处理和交付)都会监听kafka。如果kafka发送了请求,它们就开始处理并发送回响应,但是离线阶段是正常的,因为kafka已经通过不等待离线阶段获得了其他响应。

一旦处理阶段在线,它就会从Kafka接收消息并处理它,因此现在所有响应都已完成,订单就可以被处理了。

例如,在HTTP方式下,第一个需要10ms,第二个需要100ms,第三个需要30ms,但如果我们使用消息框架,它将按以下方式工作:第一个需要10ms,第二个需要30ms,第三个需要100ms……

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
阿波
The minute I see you, I want your clothes gone!

评论(0)

添加评论