【发布时间】:2015-02-07 21:57:30
【问题描述】:
我正在构建一个网站后端,其中涉及客户端提交请求以执行一些昂贵的(及时)操作。昂贵的操作还涉及收集一些信息以完成。
客户提交的工作可以用uuid 来完整描述。我希望使用面向服务的架构 (SOA)(即多个微服务)。
客户端通过 HTTP 使用 RESTful 通信与后端通信。我计划使用一个队列,执行昂贵操作的工作人员可以轮询工作。队列具有持久性并提供良好的可靠性语义。
一个考虑因素是我是否收集上游昂贵操作所需的所有数据,然后将所有这些数据排入队列,或者我是否只是将 uuid 排入队列并让工作人员获取数据。
以下是正在考虑的两种架构的示意图:
基于推送(即收集上游数据):
基于拉的(即工作人员收集数据):
我想到的一些事情:
- 在基于推送的情况下,我可能会在收集所需数据时进行阻塞,因此在收集数据并入队之前不会响应客户端的 HTTP 请求。从 UI 的角度来看,请求将处于待处理状态,直到响应返回。
- 在基于拉的场景中,只有工作人员需要知道工作需要哪些数据。这意味着我可以让多种类型的客户端与各种后端进行通信。如果数据需要更改,我只更新工作线程,而不是每个上游服务。
还有什么我在这里遗漏的吗?
【问题讨论】:
标签: message-queue soa microservices