微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

微服务:如何跨服务共享有关初始请求的信息?

如何解决微服务:如何跨服务共享有关初始请求的信息?

我正在尝试使用微服务架构开发一个项目。 基本上,该应用程序将允许用户在一组选定的数据上运行机器学习算法。 有关数据的信息将作为接口的输入。 目前我确定了 3 个服务:

  • 界面,S1。
  • 一项仅提供用户要求的数据的服务,S2。
  • 将在数据上运行算法的服务 S3。

我选择让这些服务通过 PubSub 进行通信,因为它涉及长时间运行的作业。

现在,这是它的样子:

https://ibb.co/RYj321G

当在接口 (S1) 上发出请求时,我将消息推送到特定的 PubSub 主题。它包含有关要使用的数据的信息。此主题仅由 S2 服务使用。 S2 提供数据。现在我希望 ML 服务开始运行作业。 问题是,S3 需要知道 S2 的数据来源,但它也需要 S2 消费的消息中包含的信息。有什么办法呢?

  • S2 将一条新消息推送到包含初始消息内容的 PubSub 消息,+ 表明工作已完成的东西?

  • S3 也使用来自 S1 的初始消息,但我确保它只在它从 S2 拉取一条消息说数据准备好时才运行?

解决方法

有许多有效的方法:

  1. 如果 S2 和 S3 都需要 S1 推送 的数据,则它们都监听该主题。当 S2 推送 数据到 S3 时,它现在拥有所需的所有信息并且可以处理请求。这将符合 PubSub 的精神,发送方无需担心您需要使用数据。 S1 只推送一次数据。

  2. S1 推送 数据到 S2。然后 S2 将数据从 S1 和 S2 推送到 S3。 S2 正在做额外的工作来中继数据。

  3. S1 只向 S2 发送数据。 S2 只将它的数据发送到 S3。然后 S3 从 S1 中拉取它需要的任何数据(即向 S1 发送一条消息要求它,然后 S1 再次发送它)。 3 的主要好处是 S3 控制何时准备好处理请求(即流量控制)。

除了发送数据(服务具有私有存储)之外,您还可以发送标识符,然后服务会在需要时去检索数据(数据湖)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。