您如何从反应式微服务系统获取数据?

How do you get data from a reactive microservices system?

我正在设计一个反应式微服务系统,其中服务之间的通信——请求处理管道——是异步的(使用 kafka)。该系统将管理虚拟机集群。平移以使用 Spring WebFlux 作为框架。

例如,创建新 VM 的请求可能如下所示:

  1. API 网关
  2. 安全验证
  3. 在用户空间创建虚拟机
  4. 为 VM 安排资源
  5. 向用户发送一次通知succeeded/failed

感谢 kafka,所有步骤都是顺序的,但又是异步的。步骤由单独的微服务处理。

除此之外,客户端将(可能)想要发出 GET 请求,例如获取 VM 列表或有关集群状态的信息。我只是不知道如何。 我可以想到以下解决方案:

  1. 从 API 网关向其他服务发出(同步)GET 请求,聚合数据和 return。
  2. 给用户的通知已经有了所有需要的数据,所以我可以在专用服务中聚合所有用户可查询的数据(保存到数据库)并从那里转发来自 API 网关的 GET 请求。

我实际上建议不要像这样跨服务使用管道,而是要有一个服务来管理这个 saga 并跟踪 saga 的状态。

  1. API 网关将请求转发到 saga 管理服务
  2. Saga 管理服务通知安全验证服务
  3. 安全验证服务发布事件
  4. 基于 3 中的事件,saga 管理可能会通知 VM 创建服务
  5. VM 创建服务在用户空间创建 VM,发布事件
  6. 基于 5 的事件,saga 管理可能会通知资源调度程序服务
  7. 资源调度程序服务调度资源,发布事件
  8. 根据 7 的事件,saga 管理发送通知

saga 管理器可以响应故障(例如,如果无法安排资源,则通过回滚 VM 创建,或者通过检查服务来确定考虑它们是否有意义)并有效地解释要发布的内容 extra-rich 其他服务的事件(例如,可以列出 VM 的服务可能对涉及 VM 创建和资源调度的事件感兴趣,而不仅仅是通知)并响应交互式请求。