我正在构建一个网站后端,该后端涉及客户端提交请求以执行一些昂贵的(及时)操作。昂贵的操作还涉及收集一些信息以完成。
客户提交的工作可以用uuid
. 我希望使用面向服务的架构(SOA)(即多个微服务)。
客户端通过 HTTP 使用 RESTful 通信与后端通信。我计划使用一个队列,执行昂贵操作的工作人员可以轮询工作。队列具有持久性并提供了不错的可靠性语义。
一个考虑因素是我是否收集上游昂贵操作所需的所有数据,然后将所有这些数据排入队列,或者我是否只是将这些数据排入队列uuid
并让工作人员获取数据。
以下是正在考虑的两种架构的图表:
基于推送(即上游收集数据):
基于拉的(即工人收集数据):
我想到的一些事情:
- 在基于推送的情况下,我可能会在收集所需数据时被阻塞,因此客户端的 HTTP 请求在收集数据然后入队之前不会得到响应。从 UI 的角度来看,请求将处于未决状态,直到响应返回。
- 在基于拉的场景中,只有工作人员需要知道工作需要哪些数据。这意味着我可以让多种类型的客户端与各种后端进行通信。如果数据需要更改,我只更新工作人员而不是每个上游服务。
还有什么我在这里想念的吗?